520d87e58e
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
48 lines
758 B
C
48 lines
758 B
C
/* See LICENSE file for copyright and license details. */
|
|
#include <sys/stat.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "util.h"
|
|
|
|
static void
|
|
usage(void)
|
|
{
|
|
eprintf("usage: %s [-m mode] name ...\n", argv0);
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
mode_t mode = 0, mask;
|
|
int mflag = 0, ret = 0;
|
|
|
|
ARGBEGIN {
|
|
case 'm':
|
|
mflag = 1;
|
|
mask = getumask();
|
|
mode = parsemode(EARGF(usage()), mode, mask);
|
|
break;
|
|
default:
|
|
usage();
|
|
} ARGEND;
|
|
|
|
if (!argc)
|
|
usage();
|
|
|
|
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;
|
|
} else if (mflag) {
|
|
if (chmod(*argv, mode) < 0) {
|
|
weprintf("chmod %s:", *argv);
|
|
ret = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|