From daf36948a9c235d5e70ec343557facfb80edaddd Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 6 May 2015 16:39:12 -0500 Subject: Fix more with missing files. Previously we'd go into an infinite loop because we weren't incrementing optargs. Also add a missing flush so an error on stderr won't overtake the escape code that resets reverse video. Disclaimer: the new behavior isn't exactly like the desktop version; surprisingly they try to open the next file _before_ they prompt. That feels weird to me as a user, and seems like it would lead to a more awkward implementation, but if you're more concerned about authenticity... --- toys/pending/more.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'toys/pending/more.c') diff --git a/toys/pending/more.c b/toys/pending/more.c index 59392ffe..f0e79079 100644 --- a/toys/pending/more.c +++ b/toys/pending/more.c @@ -53,6 +53,7 @@ static int prompt(FILE *cin, const char* fmt, ...) input_key = tolower(getc(cin)); printf("\33[0m\33[1K\r"); // Reset all attributes, erase to start of line. if (strchr(" \nrq", input_key)) { + fflush(NULL); return input_key; } printf("\33[7m(Enter:Next line Space:Next page Q:Quit R:Show the rest)"); @@ -95,8 +96,8 @@ void more_main() do { fp = stdin; if (*toys.optargs && !(fp = fopen(*toys.optargs, "r"))) { - perror_msg("'%s'", *toys.optargs); - continue; + perror_msg("%s", *toys.optargs); + goto next_file; } st.st_size = show_prompt = col = row = 0; fstat(fileno(fp), &st); @@ -133,6 +134,7 @@ void more_main() } fclose(fp); +next_file: if (*toys.optargs && *++toys.optargs) { input_key = prompt(cin, "--More--(Next file: %s)", *toys.optargs); if (input_key == 'q') goto stop; -- cgit v1.2.3