diff options
| author | bhgv <bhgv.empire@gmail.com> | 2018-03-01 16:54:45 +0200 |
|---|---|---|
| committer | bhgv <bhgv.empire@gmail.com> | 2018-03-01 16:54:45 +0200 |
| commit | b786f20bbab5a59046aa78a2c6c2a11536497202 (patch) | |
| tree | 0851ecdec889eb9b7ba3751cc04d4f0b474e4a9e /utils/mkdir | |
inferno-os tree was separated from the inferno-os-android (separated from the Android driver)
Diffstat (limited to 'utils/mkdir')
| -rw-r--r-- | utils/mkdir/mkdir.c | 60 | ||||
| -rw-r--r-- | utils/mkdir/mkfile | 13 |
2 files changed, 73 insertions, 0 deletions
diff --git a/utils/mkdir/mkdir.c b/utils/mkdir/mkdir.c new file mode 100644 index 0000000..b47ee54 --- /dev/null +++ b/utils/mkdir/mkdir.c @@ -0,0 +1,60 @@ +#include <lib9.h> + +static void +usage(void) +{ + fprint(2, "usage: mkdir [-p] dir ...\n"); + exits("usage"); +} + +static int +mkdirp(char *s, int pflag) +{ + char *p; + + if(!pflag) { + if(access(s, 0) == 0){ + fprint(2, "mkdir: %s already exists\n", s); + exits("exists"); + } + return mkdir(s); + } + + /* create intermediate directories */ + p = strchr(s+1, '/'); + while(p != nil) { + *p = '\0'; + if(access(s, 0) != 0 && mkdir(s) != 0) + return -1; + *p = '/'; + p = strchr(p+1, '/'); + } + + /* create final directory */ + if(access(s, 0) == 0) + return 0; + return mkdir(s); +} + +void +main(int argc, char **argv) +{ + int pflag; + + pflag = 0; + ARGBEGIN{ + case 'p': + pflag++; + break; + default: + usage(); + }ARGEND + for(; *argv; argv++){ + if(mkdirp(*argv, pflag) < 0){ + fprint(2, "mkdir: can't create %s\n", *argv); + perror(0); + exits("error"); + } + } + exits(0); +} diff --git a/utils/mkdir/mkfile b/utils/mkdir/mkfile new file mode 100644 index 0000000..af0eb49 --- /dev/null +++ b/utils/mkdir/mkfile @@ -0,0 +1,13 @@ +<../../mkconfig + +TARG=mkdir + +OFILES= mkdir.$O\ + +HFILES= + +LIBS=9 + +BIN=$ROOT/$OBJDIR/bin + +<$ROOT/mkfiles/mkone-$SHELLTYPE |
