From: Francois Fleuret Date: Wed, 1 Jul 2009 06:58:36 +0000 (+0200) Subject: Now compiles with -pedantic. X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=selector.git;a=commitdiff_plain;h=5f733b018c4c16c4cd6ccba602c742989f0ed215 Now compiles with -pedantic. --- diff --git a/Makefile b/Makefile index bdc1863..7e821fa 100644 --- a/Makefile +++ b/Makefile @@ -34,12 +34,12 @@ else OPTIMIZE_FLAG = -ggdb3 -O3 endif -CFLAGS = -DREVISION_NUMBER=$(REVISION_NUMBER) -Wall $(OPTIMIZE_FLAG) +CFLAGS = -Wall -ansi -pedantic -DREVISION_NUMBER=$(REVISION_NUMBER) $(OPTIMIZE_FLAG) all: selector selector: selector.o - $(CC) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) + $(CC) -o $@ $^ $(LDFLAGS) install: selector install -m 755 selector $(BINARY_PATH) diff --git a/selector.c b/selector.c index c8ccb5c..6c0f7f5 100644 --- a/selector.c +++ b/selector.c @@ -44,7 +44,7 @@ #define VERSION "1.0" -const int buffer_size = 4096; +#define BUFFER_SIZE 4096 /* Yeah, global variables! */ @@ -70,11 +70,11 @@ int attr_modeline, attr_focus_line, attr_error; void inject_into_tty_buffer(char *string) { struct termios oldtio, newtio; const char *k; + const char control_q = '\021'; tcgetattr(STDIN_FILENO, &oldtio); memset(&newtio, 0, sizeof(newtio)); /* Set input mode (non-canonical, *no echo*,...) */ tcsetattr(STDIN_FILENO, TCSANOW, &newtio); - const char control_q = '\021'; /* Put the selected string in the tty input buffer */ for(k = string; *k; k++) { if(add_control_qs && !(*k >= ' ' && *k <= '~')) { @@ -227,7 +227,8 @@ void free_matcher(matcher_t *matcher) { void initialize_matcher(int use_regexp, int case_sensitive, matcher_t *matcher, const char *pattern) { const char *s; - char *t; + char *t, *last_pattern_start; + int n; if(use_regexp) { matcher->nb_patterns = -1; @@ -248,8 +249,8 @@ void initialize_matcher(int use_regexp, int case_sensitive, strcpy(matcher->splitted_patterns, pattern); - int n = 0; - char *last_pattern_start = matcher->splitted_patterns; + n = 0; + last_pattern_start = matcher->splitted_patterns; for(t = matcher->splitted_patterns; n < matcher->nb_patterns; t++) { if(*t == pattern_separator || *t == '\0') { *t = '\0'; @@ -266,7 +267,7 @@ void initialize_matcher(int use_regexp, int case_sensitive, void delete_char(char *buffer, int *position) { if(buffer[*position]) { int c = *position; - while(c < buffer_size && buffer[c]) { + while(c < BUFFER_SIZE && buffer[c]) { buffer[c] = buffer[c+1]; c++; } @@ -290,7 +291,7 @@ void backspace_char(char *buffer, int *position) { } void insert_char(char *buffer, int *position, char character) { - if(strlen(buffer) < buffer_size - 1) { + if(strlen(buffer) < BUFFER_SIZE - 1) { int c = *position; char t = buffer[c], u; while(t) { @@ -358,16 +359,17 @@ void update_screen(int *current_focus_line, int *displayed_focus_line, int cursor_position, char *pattern) { - char buffer[buffer_size]; + char buffer[BUFFER_SIZE]; matcher_t matcher; int k, l, m; + int console_width, console_height; + int nb_printed_lines = 0; + int cursor_x; initialize_matcher(use_regexp, case_sensitive, &matcher, pattern); - int console_width = getmaxx(stdscr); - int console_height = getmaxy(stdscr); - - int nb_printed_lines = 0; + console_width = getmaxx(stdscr); + console_height = getmaxy(stdscr); use_default_colors(); @@ -453,7 +455,7 @@ void update_screen(int *current_focus_line, int *displayed_focus_line, if(match(lines[l], &matcher)) { int k = 0; - while(lines[l][k] && k < buffer_size - 2 && k < console_width - 2) { + while(lines[l][k] && k < BUFFER_SIZE - 2 && k < console_width - 2) { buffer[k] = lines[l][k]; k++; } @@ -524,7 +526,7 @@ void update_screen(int *current_focus_line, int *displayed_focus_line, /* There must be a more elegant way of moving the cursor at a location met during display */ - int cursor_x = 0; + cursor_x = 0; if(title) { addstr(title); @@ -575,6 +577,7 @@ void update_screen(int *current_focus_line, int *displayed_focus_line, void store_line(const char *t, int nb_lines_max, int *nb_lines, char **lines, int hash_table_size, int *hash_table) { + int dup; /* Remove the zsh history prefix */ @@ -594,8 +597,6 @@ void store_line(const char *t, /* Check for duplicates with the hash table and insert the line in the list if necessary */ - int dup; - if(hash_table) { dup = add_and_get_previous_index(t, *nb_lines, lines, hash_table, hash_table_size); } else { @@ -619,16 +620,19 @@ void read_file(const char *input_filename, int nb_lines_max, int *nb_lines, char **lines, int hash_table_size, int *hash_table) { - char raw_line[buffer_size]; + char raw_line[BUFFER_SIZE]; + int start, end, k; + FILE *file; - FILE *file = fopen(input_filename, "r"); + file = fopen(input_filename, "r"); if(!file) { fprintf(stderr, "Can not open `%s'.\n", input_filename); exit(1); } - int start = 0, end = 0, k; + start = 0; + end = 0; while(*nb_lines < nb_lines_max && (end > start || !feof(file))) { int eol = start; @@ -641,13 +645,13 @@ void read_file(const char *input_filename, end -= start; eol -= start; start = 0; - end += fread(raw_line + end, sizeof(char), buffer_size - end, file); + end += fread(raw_line + end, sizeof(char), BUFFER_SIZE - end, file); while(eol < end && raw_line[eol] != '\n') eol++; } - if(eol == buffer_size) { - raw_line[buffer_size - 1] = '\0'; - fprintf(stderr, "Line too long (max is %d characters):\n", buffer_size); + if(eol == BUFFER_SIZE) { + raw_line[BUFFER_SIZE - 1] = '\0'; + fprintf(stderr, "Line too long (max is %d characters):\n", BUFFER_SIZE); fprintf(stderr, raw_line); fprintf(stderr, "\n"); exit(1); @@ -669,19 +673,26 @@ void read_file(const char *input_filename, int main(int argc, char **argv) { - if(!ttyname(STDIN_FILENO)) { - fprintf(stderr, "The standard input is not a tty.\n"); - exit(1); - } - - char input_filename[buffer_size], output_filename[buffer_size]; + char input_filename[BUFFER_SIZE], output_filename[BUFFER_SIZE]; + char pattern[BUFFER_SIZE]; int i, k, l, n; + int cursor_position; int error = 0, show_help = 0; int rest_are_files = 0; + int key; + int current_focus_line, displayed_focus_line; int color_fg_modeline, color_bg_modeline; int color_fg_highlight, color_bg_highlight; + char **lines, **labels; + int nb_lines, hash_table_size, *hash_table; + + if(!ttyname(STDIN_FILENO)) { + fprintf(stderr, "The standard input is not a tty.\n"); + exit(1); + } + color_fg_modeline = COLOR_WHITE; color_bg_modeline = COLOR_BLACK; color_fg_highlight = COLOR_BLACK; @@ -697,7 +708,7 @@ int main(int argc, char **argv) { if(strcmp(argv[i], "-o") == 0) { check_opt(argc, argv, i, 1, ""); - strncpy(output_filename, argv[i+1], buffer_size); + strncpy(output_filename, argv[i+1], BUFFER_SIZE); i += 2; } @@ -735,7 +746,7 @@ int main(int argc, char **argv) { else if(strcmp(argv[i], "-f") == 0) { check_opt(argc, argv, i, 1, ""); - strncpy(input_filename, argv[i+1], buffer_size); + strncpy(input_filename, argv[i+1], BUFFER_SIZE); i += 2; } @@ -841,11 +852,11 @@ int main(int argc, char **argv) { exit(error); } - char **lines = (char **) malloc(nb_lines_max * sizeof(char *)); + lines = (char **) malloc(nb_lines_max * sizeof(char *)); - int nb_lines = 0; - int hash_table_size = nb_lines_max * 10; - int *hash_table = 0; + nb_lines = 0; + hash_table_size = nb_lines_max * 10; + hash_table = 0; if(remove_duplicates) { hash_table = new_hash_table(hash_table_size); @@ -889,12 +900,13 @@ int main(int argc, char **argv) { label_separator and transform control characters to printable ones */ - char **labels = (char **) malloc(nb_lines * sizeof(char *)); + labels = (char **) malloc(nb_lines * sizeof(char *)); + for(l = 0; l < nb_lines; l++) { char *s, *t; + int e = 0; const char *u; t = lines[l]; - int e = 0; while(*t && *t != label_separator) { u = unctrl(*t++); e += strlen(u); @@ -909,10 +921,8 @@ int main(int argc, char **argv) { *s = '\0'; } - char pattern[buffer_size]; pattern[0] = '\0'; - int cursor_position; cursor_position = 0; /* Here we start to display with curse */ @@ -955,19 +965,18 @@ int main(int argc, char **argv) { } - int key; - int current_focus_line = 0, displayed_focus_line = 0; + current_focus_line = 0; + displayed_focus_line = 0; update_screen(¤t_focus_line, &displayed_focus_line, 0, nb_lines, labels, cursor_position, pattern); do { + int motion = 0; key = getch(); - int motion = 0; - if(key >= ' ' && key <= '~') { /* Insert character */ insert_char(pattern, &cursor_position, key); }