Factorizing mode expression code
This commit is contained in:
parent
c5a36e759a
commit
c64e3f99ac
38
src/mkfifo.c
38
src/mkfifo.c
@ -8,16 +8,28 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define COMMON_MODE
|
||||||
|
#include "common.c"
|
||||||
|
|
||||||
|
|
||||||
/* mkfifo */
|
/* mkfifo */
|
||||||
static int _mkfifo(char const * pathname, mode_t mode)
|
static int _mkfifo_error(char * message, int ret);
|
||||||
|
static int _mkfifo(mode_t mode, int argc, char * argv[])
|
||||||
{
|
{
|
||||||
if(mkfifo(pathname, mode) == -1)
|
int ret = 0;
|
||||||
{
|
int i;
|
||||||
perror("mkfifo");
|
|
||||||
return 2;
|
for(i = 0; i < argc; i++)
|
||||||
}
|
if(mkfifo(argv[i], mode) == -1)
|
||||||
return 0;
|
ret+=_mkfifo_error(argv[i], 1);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _mkfifo_error(char * message, int ret)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s", "mkfifo: ");
|
||||||
|
perror(message);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -34,18 +46,13 @@ static int _usage(void)
|
|||||||
int main(int argc, char * argv[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
mode_t mode = 0777;
|
mode_t mode = 0777;
|
||||||
int errcode = 0;
|
|
||||||
int o;
|
int o;
|
||||||
char * p;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
while((o = getopt(argc, argv, "m:")) != -1)
|
while((o = getopt(argc, argv, "m:")) != -1)
|
||||||
switch(o)
|
switch(o)
|
||||||
{
|
{
|
||||||
case 'm':
|
case 'm':
|
||||||
/* FIXME mode may be an expression */
|
if(_mode(optarg, &mode) != 0)
|
||||||
mode = strtol(optarg, &p, 8);
|
|
||||||
if(*optarg == '\0' || *p != '\0' || mode > 0777)
|
|
||||||
return _usage();
|
return _usage();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -53,8 +60,5 @@ int main(int argc, char * argv[])
|
|||||||
}
|
}
|
||||||
if(argc == optind)
|
if(argc == optind)
|
||||||
return _usage();
|
return _usage();
|
||||||
for(i = optind; i < argc; i++)
|
return _mkfifo(mode, argc - optind, &argv[optind]) == 0 ? 0 : 2;
|
||||||
if(_mkfifo(argv[i], mode) == 2)
|
|
||||||
errcode = 2;
|
|
||||||
return errcode;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user