projects
/
selector.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added a detection of full hash table.
[selector.git]
/
selector.c
diff --git
a/selector.c
b/selector.c
index
e2f8f79
..
b849e65
100644
(file)
--- a/
selector.c
+++ b/
selector.c
@@
-45,7
+45,7
@@
#include <getopt.h>
#include <limits.h>
#include <getopt.h>
#include <limits.h>
-#define VERSION "1.1.
1
"
+#define VERSION "1.1.
2
"
#define BUFFER_SIZE 4096
#define BUFFER_SIZE 4096
@@
-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) {
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
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;
}
code = code % hash_table->size;
+ start = code;
while(hash_table->entries[code] >= 0) {
/* There is a string with that 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;
/* 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
}
/* This string was not already in there, store the index in the
@@
-980,14
+987,14
@@
int main(int argc, char **argv) {
}
}
}
}
- if(
show_help ||
error) {
- if(error) {
-
usage(stderr
);
- exit(EXIT_FAILURE);
- } else {
- usage(stdout);
-
exit(EXIT_SUCCESS
);
- }
+ if(error) {
+ usage(stderr);
+
exit(EXIT_FAILURE
);
+ }
+
+ if(show_help) {
+
usage(stdout
);
+ exit(EXIT_SUCCESS);
}
lines = safe_malloc(nb_lines_max * sizeof(char *));
}
lines = safe_malloc(nb_lines_max * sizeof(char *));