Fix wc(1) output for large files
Previously, we used the System V output format: "%7d%7d%7d %s\n" The problem here is, that if any number has more than six digits, the result looks like one big number, as we don't mandate spaces. POSIX says the output format should rather be "%d %d %d %s\n" but in this case we wouldn't get consistent results. To serve both camps, I changed it to the following: "%6d %6d %6d %s\n" This won't change the output for normal values, but also prevent the output of large files to be ambiguous.
This commit is contained in:
parent
a392cd475e
commit
79e8e330cb
21
wc.c
21
wc.c
@ -15,12 +15,21 @@ output(const char *str, size_t nc, size_t nl, size_t nw)
|
|||||||
int noflags = !cmode && !lflag && !wflag;
|
int noflags = !cmode && !lflag && !wflag;
|
||||||
int first = 1;
|
int first = 1;
|
||||||
|
|
||||||
if (lflag || noflags)
|
if (lflag || noflags) {
|
||||||
printf("%*.1zu", first ? (first = 0) : 7, nl);
|
if (!first)
|
||||||
if (wflag || noflags)
|
putchar(' ');
|
||||||
printf("%*.1zu", first ? (first = 0) : 7, nw);
|
printf("%*.1zu", first ? (first = 0) : 6, nl);
|
||||||
if (cmode || noflags)
|
}
|
||||||
printf("%*.1zu", first ? (first = 0) : 7, nc);
|
if (wflag || noflags) {
|
||||||
|
if (!first)
|
||||||
|
putchar(' ');
|
||||||
|
printf("%*.1zu", first ? (first = 0) : 6, nw);
|
||||||
|
}
|
||||||
|
if (cmode || noflags) {
|
||||||
|
if (!first)
|
||||||
|
putchar(' ');
|
||||||
|
printf("%*.1zu", first ? (first = 0) : 6, nc);
|
||||||
|
}
|
||||||
if (str)
|
if (str)
|
||||||
printf(" %s", str);
|
printf(" %s", str);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
Loading…
Reference in New Issue
Block a user