From fc9f31b8ad44e88eff9c17830674e371189d1d65 Mon Sep 17 00:00:00 2001 From: pdw <> Date: Wed, 3 Apr 2002 16:19:12 +0000 Subject: [PATCH] Fixed segfault bug. --- addr_hash.c | 2 +- hash.c | 14 ++++++++++---- iftop.c | 6 +++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/addr_hash.c b/addr_hash.c index 1c9d19d..996ea44 100644 --- a/addr_hash.c +++ b/addr_hash.c @@ -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; diff --git a/hash.c b/hash.c index 6119483..ed4f684 100644 --- a/hash.c +++ b/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; diff --git a/iftop.c b/iftop.c index bb645e8..251e64e 100644 --- a/iftop.c +++ b/iftop.c @@ -96,13 +96,13 @@ void tick(int print) { t = time(NULL); if(t - last_timestamp >= RESOLUTION) { //printf("TICKING\n"); - analyse_data(); + analyse_data(); ui_print(); history_rotate(); last_timestamp = t; } else if(print) { - ui_print(); + ui_print(); } pthread_mutex_unlock(&tick_mutex); @@ -187,7 +187,7 @@ static void handle_packet(char* args, const struct pcap_pkthdr* pkthdr,const cha hash_insert(history, &ap, ht); } - len = ntohs(iptr->ip_len); + len = ntohs(iptr->ip_len); /* Update record */ ht->last_write = history_pos;