sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit befec8cf677ba01674ac5997fb83623177ceb151
parent ee6f7d3fc077c0afdfc510e57dc13b326b21fdd8
Author: FRIGN <dev@frign.de>
Date:   Wed, 28 Jan 2015 20:55:50 +0100

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?

Diffstat:
MREADME | 2+-
Mmkfifo.1 | 48+++++++++++++++++++++++++++++-------------------
Mmkfifo.c | 18++++++++++++++----
3 files changed, 44 insertions(+), 24 deletions(-)

diff --git 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 @@ -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 @@ -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; }