commit 520d87e58ebc263d8ef975ba274c6d7afaaf149a
parent cae9e3e7d2d6379e137c3ba0fdf7df90feebd797
Author: FRIGN <dev@frign.de>
Date: Mon, 2 Mar 2015 17:25:29 +0100
Audit mkfifo(1)
1) Fix usage()
2) Group local variables
3) Idiomatic argv-loop
4) BUGFIX: When the m-flag is specified, POSIX clearly says:
"Set the file permission bits of the newly-created FIFO to the specified mode
value."
This means, that if mkfifo() fails for some reason, it should not try to
chmod() the given path (which has been fixed with the "else if")
A simple testcase is:
$ touch testfile; mkfifo -m 000 testfile;
GNU mkfifo(1): ls -l testfile
-rw-r--r-- 1 testfile
sbase mkfifo(1): ls -l testfile
---------- 1 testfile
5) Add blank line before return
Diffstat:
2 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/README b/README
@@ -44,7 +44,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
= ls no (-C), -S, -f, -m, -s, -x
=*| md5sum non-posix none
=* mkdir yes none
-=* mkfifo yes none
+=*| mkfifo yes none
=* mktemp non-posix none
=* mv yes none (-i)
=*| nice yes none
diff --git a/mkfifo.c b/mkfifo.c
@@ -8,16 +8,14 @@
static void
usage(void)
{
- eprintf("usage: %s [-m mode] name...\n", argv0);
+ eprintf("usage: %s [-m mode] name ...\n", argv0);
}
int
main(int argc, char *argv[])
{
- mode_t mode = 0;
- mode_t mask;
- int mflag = 0;
- int ret = 0;
+ mode_t mode = 0, mask;
+ int mflag = 0, ret = 0;
ARGBEGIN {
case 'm':
@@ -29,21 +27,21 @@ main(int argc, char *argv[])
usage();
} ARGEND;
- if (argc < 1)
+ if (!argc)
usage();
- for (; argc > 0; argc--, argv++) {
- if (mkfifo(argv[0], S_IRUSR | S_IWUSR |
- S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) {
- weprintf("mkfifo %s:", argv[0]);
+ for (; *argv; argc--, argv++) {
+ if (mkfifo(*argv, S_IRUSR | S_IWUSR | S_IRGRP |
+ S_IWGRP | S_IROTH | S_IWOTH) < 0) {
+ weprintf("mkfifo %s:", *argv);
ret = 1;
- }
- if (mflag) {
- if (chmod(argv[0], mode) < 0) {
- weprintf("chmod %s:", argv[0]);
+ } else if (mflag) {
+ if (chmod(*argv, mode) < 0) {
+ weprintf("chmod %s:", *argv);
ret = 1;
}
}
}
+
return ret;
}