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
10
mkdir.c
10
mkdir.c
|
@ -11,7 +11,7 @@ mkdirp(char *path)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
for (p = path; *p; p++) {
|
for (p = path + (*path == '/'); *p; p++) {
|
||||||
if (*p != '/')
|
if (*p != '/')
|
||||||
continue;
|
continue;
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
@ -56,9 +56,11 @@ main(int argc, char *argv[])
|
||||||
for (; *argv; argc--, argv++) {
|
for (; *argv; argc--, argv++) {
|
||||||
if (pflag && mkdirp(*argv) < 0) {
|
if (pflag && mkdirp(*argv) < 0) {
|
||||||
ret = 1;
|
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) {
|
||||||
weprintf("mkdir %s:", *argv);
|
if (!(pflag && errno == EEXIST)) {
|
||||||
ret = 1;
|
weprintf("mkdir %s:", *argv);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
} else if (mflag && chmod(*argv, mode) < 0) {
|
} else if (mflag && chmod(*argv, mode) < 0) {
|
||||||
weprintf("chmod %s:", *argv);
|
weprintf("chmod %s:", *argv);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user