From 2ac8cc9f516ec5c5991ba22d48662a40c3bd6dd0 Mon Sep 17 00:00:00 2001 From: pgen Date: Sat, 10 Jul 2021 15:00:11 +0200 Subject: Fix my_ungetc - reset EOF flag if necessary. - make it POSIX compliant. --- fgetc.c | 7 ++++++- fgetc.h | 2 +- smenu.c | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/fgetc.c b/fgetc.c index fd1e611..7da6b24 100644 --- a/fgetc.c +++ b/fgetc.c @@ -32,11 +32,16 @@ my_fgetc(FILE * input) /* Pushes character back on input. */ /* =============================== */ void -my_ungetc(int c) +my_ungetc(int c, FILE * input) { if (next_buffer_pos >= GETC_BUFF_SIZE) fprintf(stderr, "Error: cannot push back more than %d characters\n", GETC_BUFF_SIZE); else + { getc_buffer[next_buffer_pos++] = c; + + if (feof(input)) + clearerr(input); /* No more EOF. */ + } } diff --git a/fgetc.h b/fgetc.h index f458928..3948588 100644 --- a/fgetc.h +++ b/fgetc.h @@ -10,6 +10,6 @@ int my_fgetc(FILE * input); void -my_ungetc(int c); +my_ungetc(int c, FILE * input); #endif diff --git a/smenu.c b/smenu.c index 7d4dabb..f6ae146 100644 --- a/smenu.c +++ b/smenu.c @@ -2755,10 +2755,10 @@ get_word(FILE * input, ll_t * word_delims_list, ll_t * record_delims_list, pos = strlen(utf8_buffer); while (pos > 0) - my_ungetc(utf8_buffer[--pos]); + my_ungetc(utf8_buffer[--pos], input); } else - my_ungetc(byte); + my_ungetc(byte, input); } /* Mark it as the last word of a record if its sequence matches a */ -- cgit v1.2.3