[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    [PATCH] nl: ensure '-b n' option displays file content
From:       Ron Yorston <rmy () pobox ! com>
Date:       2021-01-21 8:40:54
Message-ID: 60093e16.3byV1Bmh7HvdUGxc%rmy () pobox ! com
[Download RAW message or body]

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>
---
 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@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic