#include "uthash.h" #include /* malloc */ #include /* perror */ #include /* printf */ #define BUFLEN 20 #if 0 #undef uthash_expand_fyi #define uthash_expand_fyi(tbl) printf("expanding to %d buckets\n", tbl->num_buckets) #endif typedef struct name_rec { char boy_name[BUFLEN]; UT_hash_handle hh; } name_rec; int main() { name_rec *name, *names=NULL; char linebuf[BUFLEN]; FILE *file; int i=0,j=0; file = fopen( "test14.dat", "r" ); if (file == NULL ) { perror("can't open: "); exit(-1); } while (fgets(linebuf,BUFLEN,file) != NULL) { i++; name = (name_rec*)malloc(sizeof(name_rec)); if (name == NULL) { exit(-1); } strcpy(name->boy_name, linebuf); HASH_ADD_STR(names,boy_name,name); } fseek(file,0L,SEEK_SET); while (fgets(linebuf,BUFLEN,file) != NULL) { HASH_FIND_STR(names,linebuf,name); if (!name) { printf("failed to find: %s", linebuf); } else { j++; } } fclose(file); printf("lookup on %d of %d names succeeded\n", j, i); return 0; }