From befec8cf677ba01674ac5997fb83623177ceb151 Mon Sep 17 00:00:00 2001 From: FRIGN Date: Wed, 28 Jan 2015 20:55:50 +0100 Subject: [PATCH] Add mandoc-manpage for mkfifo(1) and add full mode support and mark it as finished in the README. Previously, it would only parse octal mode strings. Given we have the parsemode()-function in util.h anyway, why not also use it? --- README | 2 +- mkfifo.1 | 48 +++++++++++++++++++++++++++++------------------- mkfifo.c | 18 ++++++++++++++---- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/README b/README index dab73bc..987f26f 100644 --- a/README +++ b/README @@ -43,7 +43,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, = ls no -C, -R, -q, -u md5sum non-posix none =* mkdir yes none -= mkfifo yes none +=* mkfifo yes none = mktemp non-posix none = mv yes (-i) = nice yes none diff --git a/mkfifo.1 b/mkfifo.1 index 0f60d87..ea5ec6c 100644 --- a/mkfifo.1 +++ b/mkfifo.1 @@ -1,19 +1,29 @@ -.TH MKFIFO 1 sbase\-VERSION -.SH NAME -mkfifo \- make named pipe -.SH SYNOPSIS -.B mkfifo -.RB [ \-m -.IR mode ] -.I name ... -.SH DESCRIPTION -.B mkfifo -creates named pipes (FIFOs) with the given names. -.SH OPTIONS -.TP -.B \-m -Set the file permission bits of newly created FIFOs to mode. The mode -is specified in octal as we do not currently support all the formats that -the chmod(1) utility supports. -.SH SEE ALSO -.IR mkfifo (3) +.Dd January 28, 2015 +.Dt MKFIFO 1 sbase\-VERSION +.Sh NAME +.Nm mkfifo +.Nd create named pipes +.Sh SYNOPSIS +.Nm mkfifo +.Op Fl m Ar mode +.Ar name ... +.Sh DESCRIPTION +.Nm +creates a named pipe for each +.Ar name +if it does not already exist. +.Sh OPTIONS +.Bl -tag -width Ds +.It Fl m +Set the file +.Ar mode +of newly created named pipes. +.El +.Sh SEE ALSO +.Xr mkfifo 3 +.Sh STANDARDS +The +.Nm +utility is compliant with the +.St -p1003.1-2008 +specification. diff --git a/mkfifo.c b/mkfifo.c index fbaee4c..5bad406 100644 --- a/mkfifo.c +++ b/mkfifo.c @@ -15,13 +15,16 @@ usage(void) int main(int argc, char *argv[]) { - mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | - S_IWGRP | S_IROTH | S_IWOTH; + mode_t mode = 0; + mode_t mask; + int mflag = 0; int ret = 0; ARGBEGIN { case 'm': - mode = estrtol(EARGF(usage()), 8); + mflag = 1; + mask = getumask(); + mode = parsemode(EARGF(usage()), mode, mask); break; default: usage(); @@ -31,10 +34,17 @@ main(int argc, char *argv[]) usage(); for (; argc > 0; argc--, argv++) { - if (mkfifo(argv[0], mode) < 0) { + if (mkfifo(argv[0], S_IRUSR | S_IWUSR | + S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) { weprintf("mkfifo %s:", argv[0]); ret = 1; } + if (mflag) { + if (chmod(argv[0], mode) < 0) { + weprintf("chmod %s:", argv[0]); + ret = 1; + } + } } return ret; }