List* ParseFileToList(FILE* fd) { List* head = NULL; char* buf; char* sfstr = scanfstr(); Result* r; while ( !feof(fd) ) { buf = calloc(_MAXWORDLENGTH_,sizeof(char)); if ( fscanf(fd,sfstr,buf) == EOF ) break; buf = ParseString(strtolower(buf)); if ( strcmp(buf,"housekeepers") == 0) printf("[DBG] [ParseFileToList] Hit housekeepers.\n"); r = SearchListForKeyAndAct(head,buf,ACT_INC); if ( r->count == -1 ) { head = CreateNewListItem(buf,1,head); } free(buf); } return head; } List** ParseFileToHashTable(FILE* fd) { List** table = InitialiseHashTable(); char* buf; char* sfstr = scanfstr(); while ( !feof(fd) ) { buf = calloc(_MAXWORDLENGTH_,sizeof(char)); if ( fscanf(fd,sfstr,buf) == EOF ) break; buf = ParseString(strtolower(buf)); if ( strcmp(buf,"housekeepers") == 0) printf("[DBG] [ParseFileToHashTable] Hit housekeepers.\n"); InsertIntoTable(table,buf); } return table; } ..... (in main) FILE* fd = OpenFile(argv[1]); fseek(fd,0,SEEK_SET); List* head = ParseFileToList(fd); fclose(fd); clock_t clockRead_Mid = clock(); fd = OpenFile(argv[1]); fseek(fd,0,SEEK_SET); List** table = ParseFileToHashTable(fd); fclose(fd);