sbase

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

commit d806f75cb64523318665f77c75fbbb55b562eaf5
parent 7afc84396aa66268b6c7762958343c194cd2b052
Author: FRIGN <dev@frign.de>
Date:   Mon,  2 Mar 2015 00:36:51 +0100

Audit cat(1)

1) Fix usage ... spacing
2) use *argv instead of argv[0] in the idiomatic for-loop
3) Stop the naïve usage of "/dev/fd/0" and use plain stdin
   instead (This also makes error-messages more consistent).
4) Add newline before return
5) Remove comma in manpage

Diffstat:
MREADME | 2+-
Mcat.1 | 4++--
Mcat.c | 19++++++++++---------
3 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/README b/README @@ -11,7 +11,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, ------- -------------------- --------------- =*| basename yes none =* cal yes none -=* cat yes none +=*| cat yes none =* chgrp yes none =* chmod yes none =* chown yes none diff --git a/cat.1 b/cat.1 @@ -1,4 +1,4 @@ -.Dd January 16, 2015 +.Dd March 1, 2015 .Dt CAT 1 .Os sbase .Sh NAME @@ -14,7 +14,7 @@ reads each .Ar file in sequence and writes it to stdout. If no .Ar file -is given, +is given .Nm reads from stdin. .Sh OPTIONS diff --git a/cat.c b/cat.c @@ -8,7 +8,7 @@ static void usage(void) { - eprintf("usage: %s [-u] [file...]\n", argv0); + eprintf("usage: %s [-u] [file ...]\n", argv0); } int @@ -28,17 +28,18 @@ main(int argc, char *argv[]) if (argc == 0) { concat(stdin, "<stdin>", stdout, "<stdout>"); } else { - for (; argc; argc--, argv++) { - if (argv[0][0] == '-' && !argv[0][1]) - argv[0] = "/dev/fd/0"; - if (!(fp = fopen(argv[0], "r"))) { - weprintf("fopen %s:", argv[0]); + for (; argc > 0; argc--, argv++) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + concat(stdin, "<stdin>", stdout, "<stdout>"); + } else if (!(fp = fopen(*argv, "r"))) { + weprintf("fopen %s:", *argv); ret = 1; - continue; + } else { + concat(fp, *argv, stdout, "<stdout>"); + fclose(fp); } - concat(fp, argv[0], stdout, "<stdout>"); - fclose(fp); } } + return ret; }