Initial Commit

This commit is contained in:
2014-07-14 20:45:23 +01:00
commit e34a32555b
7 changed files with 16405 additions and 0 deletions

90
list.c Normal file
View File

@@ -0,0 +1,90 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
#include "uthash.h"
entry *hashtable = NULL;
int main(int argc, char* argv[]) {
char * listfile = DEFAULT_LISTFILE;
if (argc > 1) {
listfile = argv[1];
}
FILE* fh = fopen(listfile, "r");
if (fh == NULL) {
perror("Error opening list");
return EXIT_FAILURE;
}
char buffer[1024];
while (fgets(buffer, sizeof buffer, fh) != NULL) {
char *pos;
if ((pos=strchr(buffer, '\n')) != NULL)
*pos = '\0';
add_entry(buffer);
}
if (!feof(fh)) {
perror("Error reading file");
fclose(fh);
return EXIT_FAILURE;
}
fclose(fh);
memset(buffer, 0, sizeof(buffer));
while(scanf("%1023s", buffer) > 0) {
char* input = calloc(strlen(buffer)+1, sizeof(char));
strcpy(input, buffer);
if (find_entry(input) == 1) {
printf("OK\n");
} else {
printf("ERR\n");
}
fflush(stdout);
free(input);
memset(buffer, 0, sizeof(buffer));
}
return EXIT_SUCCESS;
}
unsigned long hashstr(char *str) {
unsigned long hash = 5381;
int c;
while ((c = *str++)) {
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
}
return hash;
}
void add_entry(char* str) {
entry *e;
e = calloc(1, sizeof(entry));
e->hash = hashstr(str);
e->str = calloc(strlen(str)+1, sizeof(char));
strcpy(e->str, str);
HASH_ADD_INT(hashtable, hash, e);
}
unsigned char find_entry(char* str) {
unsigned long hash = hashstr(str);
entry *e = NULL;
HASH_FIND_INT(hashtable, &hash, e);
if (e == NULL) {
return 0;
} else {
return 1;
}
}