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>
This commit is contained in:
parent
27ae859c50
commit
c849e72c0b
@ -201,7 +201,7 @@ int cat_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
ns.start = 1;
|
ns.start = 1;
|
||||||
ns.inc = 1;
|
ns.inc = 1;
|
||||||
ns.sep = "\t";
|
ns.sep = "\t";
|
||||||
ns.empty_str = "\n";
|
ns.empty_str = NULL;
|
||||||
ns.all = !(opts & CAT_OPT_b); /* -n without -b */
|
ns.all = !(opts & CAT_OPT_b); /* -n without -b */
|
||||||
ns.nonempty = (opts & CAT_OPT_b); /* -b (with or without -n) */
|
ns.nonempty = (opts & CAT_OPT_b); /* -b (with or without -n) */
|
||||||
exitcode = EXIT_SUCCESS;
|
exitcode = EXIT_SUCCESS;
|
||||||
|
@ -68,7 +68,7 @@ int nl_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
&ns.width, &ns.sep, &ns.start, &ns.inc, &opt_b);
|
&ns.width, &ns.sep, &ns.start, &ns.inc, &opt_b);
|
||||||
ns.all = (opt_b[0] == 'a');
|
ns.all = (opt_b[0] == 'a');
|
||||||
ns.nonempty = (opt_b[0] == 't');
|
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;
|
argv += optind;
|
||||||
if (!*argv)
|
if (!*argv)
|
||||||
|
@ -22,10 +22,11 @@ int FAST_FUNC print_numbered_lines(struct number_state *ns, const char *filename
|
|||||||
if (ns->all
|
if (ns->all
|
||||||
|| (ns->nonempty && line[0])
|
|| (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;
|
N += ns->inc;
|
||||||
} else if (ns->empty_str)
|
} else if (ns->empty_str)
|
||||||
fputs(ns->empty_str, stdout);
|
fputs(ns->empty_str, stdout);
|
||||||
|
puts(line);
|
||||||
free(line);
|
free(line);
|
||||||
}
|
}
|
||||||
ns->start = N;
|
ns->start = N;
|
||||||
|
@ -22,4 +22,28 @@ testing 'cat -v' \
|
|||||||
'foo\n'
|
'foo\n'
|
||||||
SKIP=
|
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
|
exit $FAILCOUNT
|
||||||
|
39
testsuite/nl.tests
Executable file
39
testsuite/nl.tests
Executable file
@ -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
|
Loading…
Reference in New Issue
Block a user