Three bugfixes in mkdir(1)
1) Any path passed to mkdir -p beginning with '/' failed, because it would cut out the first '/' immediately, passing "" to mkdir. 2) Running mkdir -p with a path/to/dir without trailing '/' would not create the directory. This is due to a wrong flag-check I added in the main-loop. It should now work as expected. 3) With the p-flag given, don't report an error in case the last dir also exists.
This commit is contained in:
parent
b12041365d
commit
c82425e128
6
mkdir.c
6
mkdir.c
|
@ -11,7 +11,7 @@ mkdirp(char *path)
|
|||
{
|
||||
char *p;
|
||||
|
||||
for (p = path; *p; p++) {
|
||||
for (p = path + (*path == '/'); *p; p++) {
|
||||
if (*p != '/')
|
||||
continue;
|
||||
*p = '\0';
|
||||
|
@ -56,9 +56,11 @@ main(int argc, char *argv[])
|
|||
for (; *argv; argc--, argv++) {
|
||||
if (pflag && mkdirp(*argv) < 0) {
|
||||
ret = 1;
|
||||
} else if (!pflag && mkdir(*argv, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
|
||||
} else if (mkdir(*argv, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
|
||||
if (!(pflag && errno == EEXIST)) {
|
||||
weprintf("mkdir %s:", *argv);
|
||||
ret = 1;
|
||||
}
|
||||
} else if (mflag && chmod(*argv, mode) < 0) {
|
||||
weprintf("chmod %s:", *argv);
|
||||
ret = 1;
|
||||
|
|
Loading…
Reference in New Issue
Block a user