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 <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
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int i, f;
|
||||
char *e;
|
||||
int i, pflag;
|
||||
|
||||
e = nil;
|
||||
for(i=1; i<argc; i++){
|
||||
if(access(argv[i], 0) == AEXIST){
|
||||
fprint(2, "mkdir: %s already exists\n", argv[i]);
|
||||
e = "error";
|
||||
continue;
|
||||
}
|
||||
f = create(argv[i], OREAD, DMDIR | 0777L);
|
||||
if(f < 0){
|
||||
fprint(2, "mkdir: can't create %s: %r\n", argv[i]);
|
||||
e = "error";
|
||||
continue;
|
||||
}
|
||||
close(f);
|
||||
pflag = 0;
|
||||
ARGBEGIN{
|
||||
default:
|
||||
usage();
|
||||
case 'p':
|
||||
pflag = 1;
|
||||
break;
|
||||
}ARGEND
|
||||
|
||||
for(i=0; i<argc; i++){
|
||||
if(pflag)
|
||||
mkdirp(argv[i]);
|
||||
else
|
||||
makedir(argv[i]);
|
||||
}
|
||||
exits(e);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue