[PATCH] nl: ensure '-b n' option displays file content

Denys Vlasenko vda.linux at googlemail.com
Tue Feb 2 16:41:55 UTC 2021


Applied, thanks!

On Thu, Jan 21, 2021 at 9:41 AM Ron Yorston <rmy at pobox.com> wrote:
>
> The command 'nl -b n' should output no line numbers, just some
> spaces as a placeholder followed by the actual file content.
>
> Add tests for line numbering by cat and nl.  The correct results
> were obtained from coreutils.
>
> function                                             old     new   delta
> print_numbered_lines                                 152     157      +5
> .rodata                                           182456  182453      -3
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 1/1 up/down: 5/-3)                Total: 2 bytes
>
> Signed-off-by: Ron Yorston <rmy at pobox.com>
> ---
>  coreutils/cat.c              |  2 +-
>  coreutils/nl.c               |  2 +-
>  libbb/print_numbered_lines.c |  3 ++-
>  testsuite/cat.tests          | 24 ++++++++++++++++++++++
>  testsuite/nl.tests           | 39 ++++++++++++++++++++++++++++++++++++
>  5 files changed, 67 insertions(+), 3 deletions(-)
>  create mode 100755 testsuite/nl.tests
>
> diff --git a/coreutils/cat.c b/coreutils/cat.c
> index 65f0648f9..dae6089bd 100644
> --- a/coreutils/cat.c
> +++ b/coreutils/cat.c
> @@ -201,7 +201,7 @@ int cat_main(int argc UNUSED_PARAM, char **argv)
>                 ns.start = 1;
>                 ns.inc = 1;
>                 ns.sep = "\t";
> -               ns.empty_str = "\n";
> +               ns.empty_str = NULL;
>                 ns.all = !(opts & CAT_OPT_b); /* -n without -b */
>                 ns.nonempty = (opts & CAT_OPT_b); /* -b (with or without -n) */
>                 exitcode = EXIT_SUCCESS;
> diff --git a/coreutils/nl.c b/coreutils/nl.c
> index 800b73c26..d06673881 100644
> --- a/coreutils/nl.c
> +++ b/coreutils/nl.c
> @@ -68,7 +68,7 @@ int nl_main(int argc UNUSED_PARAM, char **argv)
>                         &ns.width, &ns.sep, &ns.start, &ns.inc, &opt_b);
>         ns.all = (opt_b[0] == 'a');
>         ns.nonempty = (opt_b[0] == 't');
> -       ns.empty_str = xasprintf("%*s\n", ns.width + (int)strlen(ns.sep), "");
> +       ns.empty_str = xasprintf("%*s", ns.width + (int)strlen(ns.sep), "");
>
>         argv += optind;
>         if (!*argv)
> diff --git a/libbb/print_numbered_lines.c b/libbb/print_numbered_lines.c
> index d6459d7c3..4758068a4 100644
> --- a/libbb/print_numbered_lines.c
> +++ b/libbb/print_numbered_lines.c
> @@ -22,10 +22,11 @@ int FAST_FUNC print_numbered_lines(struct number_state *ns, const char *filename
>                 if (ns->all
>                  || (ns->nonempty && line[0])
>                 ) {
> -                       printf("%*u%s%s\n", ns->width, N, ns->sep, line);
> +                       printf("%*u%s", ns->width, N, ns->sep);
>                         N += ns->inc;
>                 } else if (ns->empty_str)
>                         fputs(ns->empty_str, stdout);
> +               puts(line);
>                 free(line);
>         }
>         ns->start = N;
> diff --git a/testsuite/cat.tests b/testsuite/cat.tests
> index 10970dc90..cf924ab5b 100755
> --- a/testsuite/cat.tests
> +++ b/testsuite/cat.tests
> @@ -22,4 +22,28 @@ testing 'cat -v' \
>         'foo\n'
>  SKIP=
>
> +optional FEATURE_CATN
> +testing 'cat -n' \
> +       'cat -n' \
> +"\
> +     1 line 1
> +     2
> +     3 line 3
> +" \
> +       '' \
> +       'line 1\n\nline 3\n'
> +SKIP=
> +
> +optional FEATURE_CATN
> +testing 'cat -b' \
> +       'cat -b' \
> +"\
> +     1 line 1
> +
> +     2 line 3
> +" \
> +       '' \
> +       'line 1\n\nline 3\n'
> +SKIP=
> +
>  exit $FAILCOUNT
> diff --git a/testsuite/nl.tests b/testsuite/nl.tests
> new file mode 100755
> index 000000000..95e7abb58
> --- /dev/null
> +++ b/testsuite/nl.tests
> @@ -0,0 +1,39 @@
> +#!/bin/sh
> +# Copyright 2021 by Ron Yorston
> +# Licensed under GPLv2, see file LICENSE in this source tree.
> +
> +. ./testing.sh
> +
> +# testing "test name" "commands" "expected result" "file input" "stdin"
> +
> +testing "nl numbers all lines" \
> +       "nl -b a input" \
> +"\
> +     1 line 1
> +     2
> +     3 line 3
> +" \
> +       "line 1\n\nline 3\n" \
> +       ""
> +
> +testing "nl numbers non-empty lines" \
> +       "nl -b t input" \
> +"\
> +     1 line 1
> +
> +     2 line 3
> +" \
> +       "line 1\n\nline 3\n" \
> +       ""
> +
> +testing "nl numbers no lines" \
> +       "nl -b n input" \
> +"\
> +       line 1
> +
> +       line 3
> +" \
> +       "line 1\n\nline 3\n" \
> +       ""
> +
> +exit $FAILCOUNT
> --
> 2.29.2
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox


More information about the busybox mailing list