summaryrefslogtreecommitdiff
path: root/src/mkfifo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mkfifo.c')
-rw-r--r--src/mkfifo.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mkfifo.c b/src/mkfifo.c
index 76291e5bc..78ff909cc 100644
--- a/src/mkfifo.c
+++ b/src/mkfifo.c
@@ -116,10 +116,13 @@ main (int argc, char **argv)
newmode = MODE_RW_UGO;
if (specified_mode)
{
+ mode_t umask_value;
struct mode_change *change = mode_compile (specified_mode);
if (!change)
error (EXIT_FAILURE, 0, _("invalid mode"));
- newmode = mode_adjust (newmode, false, umask (0), change, NULL);
+ umask_value = umask (0);
+ umask (umask_value);
+ newmode = mode_adjust (newmode, false, umask_value, change, NULL);
free (change);
if (newmode & ~S_IRWXUGO)
error (EXIT_FAILURE, 0,
@@ -132,6 +135,12 @@ main (int argc, char **argv)
error (0, errno, _("cannot create fifo %s"), quote (argv[optind]));
exit_status = EXIT_FAILURE;
}
+ else if (specified_mode && lchmod (argv[optind], newmode) != 0)
+ {
+ error (0, errno, _("cannot set permissions of `%s'"),
+ quote (argv[optind]));
+ exit_status = EXIT_FAILURE;
+ }
exit (exit_status);
}