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