[Toybox] [PATCH] fix more with missing files

Rob Landley rob at landley.net
Fri May 1 11:33:21 PDT 2015


Alright, I'll clean up less next...

Rob

On 04/30/2015 11:32 PM, enh wrote:
> 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;
> _______________________________________________
> Toybox mailing list
> Toybox at lists.landley.net
> http://lists.landley.net/listinfo.cgi/toybox-landley.net
> 


More information about the Toybox mailing list