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
This commit is contained in:
FRIGN 2015-03-02 00:36:51 +01:00
parent 7afc84396a
commit d806f75cb6
3 changed files with 13 additions and 12 deletions

2
README
View File

@ -11,7 +11,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
------- -------------------- --------------- ------- -------------------- ---------------
=*| basename yes none =*| basename yes none
=* cal yes none =* cal yes none
=* cat yes none =*| cat yes none
=* chgrp yes none =* chgrp yes none
=* chmod yes none =* chmod yes none
=* chown yes none =* chown yes none

4
cat.1
View File

@ -1,4 +1,4 @@
.Dd January 16, 2015 .Dd March 1, 2015
.Dt CAT 1 .Dt CAT 1
.Os sbase .Os sbase
.Sh NAME .Sh NAME
@ -14,7 +14,7 @@ reads each
.Ar file .Ar file
in sequence and writes it to stdout. If no in sequence and writes it to stdout. If no
.Ar file .Ar file
is given, is given
.Nm .Nm
reads from stdin. reads from stdin.
.Sh OPTIONS .Sh OPTIONS

19
cat.c
View File

@ -8,7 +8,7 @@
static void static void
usage(void) usage(void)
{ {
eprintf("usage: %s [-u] [file...]\n", argv0); eprintf("usage: %s [-u] [file ...]\n", argv0);
} }
int int
@ -28,17 +28,18 @@ main(int argc, char *argv[])
if (argc == 0) { if (argc == 0) {
concat(stdin, "<stdin>", stdout, "<stdout>"); concat(stdin, "<stdin>", stdout, "<stdout>");
} else { } else {
for (; argc; argc--, argv++) { for (; argc > 0; argc--, argv++) {
if (argv[0][0] == '-' && !argv[0][1]) if ((*argv)[0] == '-' && !(*argv)[1]) {
argv[0] = "/dev/fd/0"; concat(stdin, "<stdin>", stdout, "<stdout>");
if (!(fp = fopen(argv[0], "r"))) { } else if (!(fp = fopen(*argv, "r"))) {
weprintf("fopen %s:", argv[0]); weprintf("fopen %s:", *argv);
ret = 1; ret = 1;
continue; } else {
concat(fp, *argv, stdout, "<stdout>");
fclose(fp);
} }
concat(fp, argv[0], stdout, "<stdout>");
fclose(fp);
} }
} }
return ret; return ret;
} }