X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=selector.git;a=blobdiff_plain;f=selector.c;h=b849e65b7a5e5e2ff4adce999cc4a71776103335;hp=edff2beafe0f7472bccffbc857e55f5c59e52b09;hb=1c1c34b6adc7cf03bf97470ad1180fd61911b4b3;hpb=c06d16d13ad754eae97cb38dd45f684e0d8f1c07 diff --git a/selector.c b/selector.c index edff2be..b849e65 100644 --- a/selector.c +++ b/selector.c @@ -252,7 +252,7 @@ int add_and_get_previous_index(struct hash_table_t *hash_table, const char *new_string, int new_index, char **strings) { - unsigned int code = 0; + unsigned int code = 0, start; int k; /* This is my recipe. I checked, it seems to work (as long as @@ -264,6 +264,7 @@ int add_and_get_previous_index(struct hash_table_t *hash_table, } code = code % hash_table->size; + start = code; while(hash_table->entries[code] >= 0) { /* There is a string with that code */ @@ -278,6 +279,12 @@ int add_and_get_previous_index(struct hash_table_t *hash_table, /* This collision was not the same string, let's move to the next in the table */ code = (code + 1) % hash_table->size; + /* We came back to our original code, which means that the table + is full */ + if(code == start) { + printf("Full hash table (that should not happen)\n"); + exit(EXIT_FAILURE); + } } /* This string was not already in there, store the index in the