summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-01-21 08:40:54 +0000
committerDenys Vlasenko <vda.linux@googlemail.com>2021-02-02 17:37:41 +0100
commitc849e72c0b216578f96b763529c5e58056d0662c (patch)
tree2f1cb9320218a0e471ea8924d315e981470d4cc9
parent27ae859c50b6eedb9f43e21cdc774a2fefd726e1 (diff)
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.c2
-rw-r--r--coreutils/nl.c2
-rw-r--r--libbb/print_numbered_lines.c3
-rwxr-xr-xtestsuite/cat.tests24
-rwxr-xr-xtestsuite/nl.tests39
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