diff options
author | Ron Yorston <rmy@pobox.com> | 2021-01-21 08:40:54 +0000 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-02-02 17:37:41 +0100 |
commit | c849e72c0b216578f96b763529c5e58056d0662c (patch) | |
tree | 2f1cb9320218a0e471ea8924d315e981470d4cc9 | |
parent | 27ae859c50b6eedb9f43e21cdc774a2fefd726e1 (diff) | |
download | busybox-c849e72c0b216578f96b763529c5e58056d0662c.tar.gz |
nl: ensure '-b n' option displays file content
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@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/cat.c | 2 | ||||
-rw-r--r-- | coreutils/nl.c | 2 | ||||
-rw-r--r-- | libbb/print_numbered_lines.c | 3 | ||||
-rwxr-xr-x | testsuite/cat.tests | 24 | ||||
-rwxr-xr-x | testsuite/nl.tests | 39 |
5 files changed, 67 insertions, 3 deletions
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 |