コード例 #1
0
ファイル: wiki_bookmark.cpp プロジェクト: ZPVIP/fastwiki
int WikiBookmark::wbm_copy_key(bookmark_key_t *k, const char *title, int len)
{
	memset(k, 0, sizeof(bookmark_key_t));

	crc32sum(title, len, &k->crc32, &k->r_crc32);
	k->len = len;

	return 0;
}
コード例 #2
0
ファイル: s_hash.cpp プロジェクト: giser/fastwiki
int SHash::sh_fd_find(const void *key, void *value)
{
    char buf[1024];
    unsigned int next, crc32;
    unsigned int hash_value = 0;
    struct shm_hash_head *head = (struct shm_hash_head *)m_head;

    unsigned int offset;

    void *new_key;
    int ret_len;

    key_func(func_type, key, head->key_len, (void **)&new_key, &ret_len);

    crc32 = crc32sum((char *)new_key, ret_len) % head->hash;

    offset = m_pos + sizeof(struct shm_hash_head) + crc32 * sizeof(int);
    lseek(fd, offset, SEEK_SET);
    read(fd, &hash_value, sizeof(hash_value));

    if (hash_value == 0)
        return _SHASH_NOT_FOUND;

    unsigned int rec_pos = sh_fd_get_rec(head);
    unsigned int rec_seek = sh_fd_get_pos(hash_value);

    for (;;) {
        memset(buf, 0, key_len + value_len + sizeof(int));

        offset = m_pos + rec_pos + rec_seek;
        lseek(fd, offset, SEEK_SET);
        read(fd, buf, key_len + value_len + sizeof(int));

        if (sh_record_is_used(buf)) {
            if (cmp_func(func_type, sh_get_key(buf), key, key_len) == 0) {
                memcpy(value, sh_get_value(buf), value_len);
                return _SHASH_FOUND;
            }
        }

        if ((next = sh_get_next(buf)) == 0)
            break;

        rec_seek = sh_fd_get_pos(next);
    }

    return _SHASH_NOT_FOUND;
}
コード例 #3
0
ファイル: s_hash.cpp プロジェクト: giser/fastwiki
/*
 * _SHASH_FOUND
 * _SHASH_NOT_FOUND
 * _SHASH_NOT_FOUND_NEXT
 * _SHASH_SYS_ERROR
 */
int SHash::sh_sys_find(const void *key, void **value,
                       unsigned int *crc32, void **used, void **find)
{
    void *p;
    unsigned int next;
    int *hash;
    void *new_key;
    int ret_len;

    struct shm_hash_head *head = sh_get_head();

    void *rec = sh_get_rec(head);

    key_func(func_type, key, key_len, (void **)&new_key, &ret_len);

    *crc32 = crc32sum((char *)new_key, ret_len) % head->hash;
    hash = sh_get_hash(head) + *crc32;

    if (*hash == 0) {
        return _SHASH_NOT_FOUND;
    }

    *find = p = sh_get_pos(rec, *hash);
    *used = NULL;

    for (;;) {
        *find = p;

        if (sh_record_is_used(*find)) {
            if (cmp_func(func_type, sh_get_key(p), key, key_len) == 0) {
                if (value)
                    *value = sh_get_value(p);
                return _SHASH_FOUND;
            }
        } else {
            if (*used == NULL)
                *used = *find;
        }

        if ((next = sh_get_next(p)) == 0)
            break;

        p = sh_get_pos(rec, next);
    }

    return _SHASH_NOT_FOUND_NEXT;
}
コード例 #4
0
ファイル: fastwiki-zim.cpp プロジェクト: duliangang/fastwiki
static int add_title_hash(const char *title)
{
	struct title_key key;
	struct title_value value;

	memset(&key, 0, sizeof(key));
	memset(&value, 0, sizeof(value));

	value.len = strlen(title);
	crc32sum(title, value.len, &key.crc32, &key.r_crc32);

	m_title_hash->sh_replace(&key, &value);

	mylog("title:%s\n", title);

	return 0;
}
コード例 #5
0
ファイル: fastwiki-zim.cpp プロジェクト: duliangang/fastwiki
static int find_title_hash(const char *title)
{
	int len;
	struct title_key key;
	struct title_value *f;

	memset(&key, 0, sizeof(key));

	len = strlen(title);
	crc32sum(title, len, &key.crc32, &key.r_crc32);

	if (m_title_hash->sh_find(&key, (void **)&f) == _SHASH_FOUND) {
		if (f->len == len)
			return 1;
	}

	return 0;
}
コード例 #6
0
ファイル: crc32sum.c プロジェクト: anchorz/dosprg
int main(int argc, char **argv)
{
    int i;

    if (argc == 1) {
        usage();
        return 0;
    }

    if (check_options_quit(argc, argv)) {
        return 0;
    }

    if (!check_options_ok(argc, argv)) {
        return 1;
    }

    for (i = 1; i < argc; i++) {
        crc32sum(argv[i]);
    }

    return 0;
}