"Fossies" - the Fresh Open Source Software Archive

Member "iftop-0.17/ns_hash.c" (21 Oct 2002, 1382 Bytes) of package /linux/privat/old/iftop-0.17.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "ns_hash.c": 1.0pre4_vs_0.17.

    1 /* hash table */
    2 
    3 #include <stdio.h>
    4 #include <stdlib.h>
    5 #include <sys/types.h>
    6 #include <sys/socket.h>
    7 #include <netinet/in_systm.h>
    8 #include <netinet/in.h>
    9 #include <arpa/inet.h>
   10 #include "ns_hash.h"
   11 #include "hash.h"
   12 #include "iftop.h"
   13 
   14 #define hash_table_size 256
   15 
   16 int ns_hash_compare(void* a, void* b) {
   17     struct in_addr* aa = (struct in_addr*)a;
   18     struct in_addr* bb = (struct in_addr*)b;
   19     return (aa->s_addr == bb->s_addr);
   20 }
   21 
   22 int ns_hash_hash(void* key) {
   23     int hash;
   24     long addr;
   25         
   26     addr = (long)((struct in_addr*)key)->s_addr;
   27 
   28     hash = ((addr & 0x000000FF)
   29             + (addr & 0x0000FF00 >> 8)
   30             + (addr & 0x00FF0000 >> 16)
   31             + (addr & 0xFF000000 >> 24)) % 0xFF;
   32 
   33     return hash;
   34 }
   35 
   36 void* ns_hash_copy_key(void* orig) {
   37     struct in_addr* copy;
   38     copy = xmalloc(sizeof *copy);
   39     *copy = *(struct in_addr*)orig;
   40     return copy;
   41 }
   42 
   43 void ns_hash_delete_key(void* key) {
   44     free(key);
   45 }
   46 
   47 /*
   48  * Allocate and return a hash
   49  */
   50 hash_type* ns_hash_create() {
   51     hash_type* hash_table;
   52     hash_table = xcalloc(hash_table_size, sizeof *hash_table);
   53     hash_table->size = hash_table_size;
   54     hash_table->compare = &ns_hash_compare;
   55     hash_table->hash = &ns_hash_hash;
   56     hash_table->delete_key = &ns_hash_delete_key;
   57     hash_table->copy_key = &ns_hash_copy_key;
   58     hash_initialise(hash_table);
   59     return hash_table;
   60 }
   61