diff options
Diffstat (limited to 'src/mkfifo.c')
-rw-r--r-- | src/mkfifo.c | 11 |
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); } |