[Toybox] [PATCH] fix more with missing files

enh enh at google.com
Thu Apr 30 21:32:53 PDT 2015


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...

diff --git a/toys/pending/more.c b/toys/pending/more.c
index 59392ff..f0e7907 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;

 1430454773.0


More information about the Toybox mailing list