tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[patch] cat -n bug from 33 years ago
Hi,
The attached patch fixes a bug in /bin/cat when using -n with multiple input
files. This bug seems to have been introduced in 4.3BSD-Reno.
Numbering currently starts over at 1 for each input file, here is a simple
reproducer:
$ echo "foo\nbar" > /tmp/1
$ echo "foobar\nbar\nbaz" > /tmp/2
$ cat -n /tmp/1 /tmp/2
1 foo
2 bar
1 foobar
2 bar
3 baz
Historic BSD behaviour, (confirmed in at least 2.9-BSD, 4.1c-BSD, 4.2BSD,
and 4.3BSD), and current gnu coreutils behaviour numbers the lines of the
output as a single entity. For example, with gnu cat:
$ gcat -n /tmp/1 /tmp/2
1 foo
2 bar
3 foobar
4 bar
5 baz
Here is a proposed patch to fix it, by making 'line' a static:
--- cat_netbsd.c.dist Wed Nov 15 07:43:09 2023
+++ cat_netbsd.c Wed Nov 15 07:46:48 2023
@@ -170,9 +170,10 @@
void
cook_buf(FILE *fp)
{
- int ch, gobble, line, prev;
+ int ch, gobble, prev;
+ static int line;
- line = gobble = 0;
+ gobble = 0;
for (prev = '\n'; (ch = getc(fp)) != EOF; prev = ch) {
if (prev == '\n') {
if (sflag) {
Home |
Main Index |
Thread Index |
Old Index