add -p flag. too many install scripts want it.
This commit is contained in:
parent
558ba8f4df
commit
aeb54c0efe
1 changed files with 60 additions and 16 deletions
|
|
@ -1,26 +1,70 @@
|
||||||
#include <u.h>
|
#include <u.h>
|
||||||
#include <libc.h>
|
#include <libc.h>
|
||||||
|
|
||||||
|
char *e;
|
||||||
|
|
||||||
|
void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprint(2, "usage: mkdir [-p] dir...\n");
|
||||||
|
exits("usage");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
makedir(char *s)
|
||||||
|
{
|
||||||
|
int f;
|
||||||
|
|
||||||
|
if(access(s, AEXIST) == 0){
|
||||||
|
fprint(2, "mkdir: %s already exists\n", s);
|
||||||
|
e = "error";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
f = create(s, OREAD, DMDIR | 0777L);
|
||||||
|
if(f < 0){
|
||||||
|
fprint(2, "mkdir: can't create %s: %r\n", s);
|
||||||
|
e = "error";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
close(f);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mkdirp(char *s)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
for(p=strchr(s+1, '/'); p; p=strchr(p+1, '/')){
|
||||||
|
*p = 0;
|
||||||
|
if(access(s, AEXIST) != 0 && makedir(s) < 0)
|
||||||
|
return;
|
||||||
|
*p = '/';
|
||||||
|
}
|
||||||
|
if(access(s, AEXIST) != 0)
|
||||||
|
makedir(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i, f;
|
int i, pflag;
|
||||||
char *e;
|
|
||||||
|
|
||||||
e = nil;
|
pflag = 0;
|
||||||
for(i=1; i<argc; i++){
|
ARGBEGIN{
|
||||||
if(access(argv[i], 0) == AEXIST){
|
default:
|
||||||
fprint(2, "mkdir: %s already exists\n", argv[i]);
|
usage();
|
||||||
e = "error";
|
case 'p':
|
||||||
continue;
|
pflag = 1;
|
||||||
}
|
break;
|
||||||
f = create(argv[i], OREAD, DMDIR | 0777L);
|
}ARGEND
|
||||||
if(f < 0){
|
|
||||||
fprint(2, "mkdir: can't create %s: %r\n", argv[i]);
|
for(i=0; i<argc; i++){
|
||||||
e = "error";
|
if(pflag)
|
||||||
continue;
|
mkdirp(argv[i]);
|
||||||
}
|
else
|
||||||
close(f);
|
makedir(argv[i]);
|
||||||
}
|
}
|
||||||
exits(e);
|
exits(e);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue