Fixed segfault bug.
This commit is contained in:
@@ -28,7 +28,7 @@ int hash(void* key) {
|
||||
+ (addr & 0xFF000000 >> 24)) % 0xFF;
|
||||
|
||||
addr = (long)ap->dst.s_addr;
|
||||
hash += ((addr & 0x000000FF)
|
||||
hash = ( hash + (addr & 0x000000FF)
|
||||
+ (addr & 0x0000FF00 >> 8)
|
||||
+ (addr & 0x00FF0000 >> 16)
|
||||
+ (addr & 0xFF000000 >> 24)) % 0xFF;
|
||||
|
||||
14
hash.c
14
hash.c
@@ -44,12 +44,14 @@ hash_status_enum hash_delete(hash_type* hash_table, void* key) {
|
||||
if (!p) return HASH_STATUS_KEY_NOT_FOUND;
|
||||
|
||||
/* p designates node to delete, remove it from list */
|
||||
if (p0)
|
||||
if (p0) {
|
||||
/* not first node, p0 points to previous node */
|
||||
p0->next = p->next;
|
||||
else
|
||||
}
|
||||
else {
|
||||
/* first node on chain */
|
||||
hash_table->table[bucket] = p->next;
|
||||
}
|
||||
|
||||
hash_table->delete_key(p->key);
|
||||
free (p);
|
||||
@@ -62,9 +64,13 @@ hash_status_enum hash_find(hash_type* hash_table, void* key, void **rec) {
|
||||
/*******************************
|
||||
* find node containing data *
|
||||
*******************************/
|
||||
p = hash_table->table[hash_table->hash(key)];
|
||||
while (p && !hash_table->compare(p->key, key))
|
||||
int bucket = hash_table->hash(key);
|
||||
|
||||
p = hash_table->table[bucket];
|
||||
|
||||
while (p && !hash_table->compare(p->key, key)) {
|
||||
p = p->next;
|
||||
}
|
||||
if (!p) return HASH_STATUS_KEY_NOT_FOUND;
|
||||
*rec = p->rec;
|
||||
return HASH_STATUS_OK;
|
||||
|
||||
Reference in New Issue
Block a user