sbase

suckless unix tools
git clone git://git.2f30.org/sbase.git
Log | Files | Refs | README | LICENSE

commit 219b18aae728ffed58d43287425826c6fd28a7fe
parent 53f0e6108376aad24115f029ac8577c61fdcd4b0
Author: FRIGN <dev@frign.de>
Date:   Wed Feb 24 15:40:50 +0100

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.

Diffstat:
wc.c | 21+++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/wc.c b/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 first = 1; - if (lflag || noflags) - printf("%*.1zu", first ? (first = 0) : 7, nl); - if (wflag || noflags) - printf("%*.1zu", first ? (first = 0) : 7, nw); - if (cmode || noflags) - printf("%*.1zu", first ? (first = 0) : 7, nc); + if (lflag || noflags) { + if (!first) + putchar(' '); + printf("%*.1zu", first ? (first = 0) : 6, nl); + } + 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) printf(" %s", str); putchar('\n');