[PATCH] less: further tweaks to regular file detection

Denys Vlasenko vda.linux at googlemail.com
Mon Aug 3 14:42:04 UTC 2015


Applied, thanks!

On Fri, Jul 31, 2015 at 6:33 PM, Ron Yorston <rmy at pobox.com> wrote:
> Test explicitly for REOPEN flags:  update_num_lines is called
> unconditionally so (num_lines != NOT_REGULAR_FILE) is also true when
> num_lines contains a valid number of lines.
>
> The call to fstat doesn't need to be in #if ENABLE_FEATURE_LESS_FLAGS:
> the whole function is already in such a test.
>
> Signed-off-by: Ron Yorston <rmy at pobox.com>
> ---
>  miscutils/less.c | 16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/miscutils/less.c b/miscutils/less.c
> index be8d20e..7a441bf 100644
> --- a/miscutils/less.c
> +++ b/miscutils/less.c
> @@ -615,11 +615,12 @@ static int safe_lineno(int fline)
>  static void update_num_lines(void)
>  {
>         int count, fd;
> +       struct stat stbuf;
>         ssize_t len, i;
>         char buf[4096];
>
>         /* only do this for regular files */
> -       if (num_lines != NOT_REGULAR_FILE) {
> +       if (num_lines == REOPEN_AND_COUNT || num_lines == REOPEN_STDIN) {
>                 count = 0;
>                 fd = open("/proc/self/fd/0", O_RDONLY);
>                 if (fd < 0 && num_lines == REOPEN_AND_COUNT) {
> @@ -631,17 +632,10 @@ static void update_num_lines(void)
>                         num_lines = NOT_REGULAR_FILE;
>                         return;
>                 }
> -#if ENABLE_FEATURE_LESS_FLAGS
> -               {
> -                       struct stat stbuf;
> -                       if (fstat(fd, &stbuf) != 0
> -                        || !S_ISREG(stbuf.st_mode)
> -                       ) {
> -                               num_lines = NOT_REGULAR_FILE;
> -                               goto do_close;
> -                       }
> +               if (fstat(fd, &stbuf) != 0 || !S_ISREG(stbuf.st_mode)) {
> +                       num_lines = NOT_REGULAR_FILE;
> +                       goto do_close;
>                 }
> -#endif
>                 while ((len = safe_read(fd, buf, sizeof(buf))) > 0) {
>                         for (i = 0; i < len; ++i) {
>                                 if (buf[i] == '\n' && ++count == MAXLINES)
> --
> 2.4.3
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox


More information about the busybox mailing list