Annotation of embedaddon/iftop/ns_hash.c, revision 1.1

1.1     ! misho       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: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>