fix the simple hash finding function and use it

This commit is contained in:
Zack Rusin 2008-04-23 13:32:41 -04:00
parent 4f93a3a680
commit e1180c2d69
3 changed files with 12 additions and 23 deletions

View File

@ -255,9 +255,9 @@ void *cso_hash_find_data_from_template( struct cso_hash *hash,
while (!cso_hash_iter_is_null(iter)) {
void *iter_data = cso_hash_iter_data(iter);
if (!memcmp(iter_data, templ, size)) {
/* Return the payload:
/* We found a match
*/
return (unsigned char *)iter_data + size;
return iter_data;
}
iter = cso_hash_iter_next(iter);
}

View File

@ -65,16 +65,14 @@ static struct translate *cached_translate(struct pt_emit *emit,
struct translate_key *key)
{
unsigned hash_key = create_key(key);
struct cso_hash_iter iter = cso_hash_find(emit->hash, hash_key);
struct translate *translate = 0;
if (cso_hash_iter_is_null(iter)) {
struct translate *translate = (struct translate*)
cso_hash_find_data_from_template(emit->hash,
hash_key,
key, sizeof(*key));
if (!translate) {
/* create/insert */
translate = translate_create(key);
cso_hash_insert(emit->hash, hash_key, translate);
/*debug_printf("\tCREATED with %d\n", hash_key);*/
} else {
translate = cso_hash_iter_data(iter);
/*debug_printf("\tOK with %d\n", hash_key);*/
}
return translate;

View File

@ -67,19 +67,10 @@ static struct translate *cached_translate(struct pt_fetch *fetch,
struct translate_key *key)
{
unsigned hash_key = create_key(key);
struct cso_hash_iter iter = cso_hash_find(fetch->hash, hash_key);
struct translate *translate = 0;
while (!cso_hash_iter_is_null(iter)) {
void *iter_data = cso_hash_iter_data(iter);
if (memcmp(iter_data, key, sizeof(*key)) == 0) {
/* found */
translate = cso_hash_iter_data(iter);
break;
}
iter = cso_hash_iter_next(iter);
/*debug_printf("\tOK with %d\n", hash_key);*/
}
struct translate *translate = (struct translate*)
cso_hash_find_data_from_template(fetch->hash,
hash_key,
key, sizeof(*key));
if (!translate) {
/* create/insert */