diff --git a/src/mkdir.c b/src/mkdir.c index 411cbcd..327afbe 100644 --- a/src/mkdir.c +++ b/src/mkdir.c @@ -24,12 +24,9 @@ static int _mkdir(int flagp, mode_t mode, int argc, char * argv[]) if(flagp == 1) { if(_mkdir_p(mode, argv[i]) != 0) - { res = 2; - continue; - } } - if(mkdir(argv[i], mode) != 0) + else if(mkdir(argv[i], mode) != 0) res = _mkdir_error(argv[i], 2); } return res; @@ -45,20 +42,23 @@ static int _mkdir_error(char * message, int ret) static int _mkdir_p(mode_t mode, char * pathname) { char * p; - char c; struct stat st; for(p = pathname; *p != '\0'; p++) { if(*p != '/') continue; - c = *p; *p = '\0'; if(!(stat(pathname, &st) == 0 && S_ISDIR(st.st_mode)) && mkdir(pathname, mode) == -1) return _mkdir_error(pathname, 2); - *p = c; + for(*p++ = '/'; *p == '/'; p++); + if(*p == '\0') + return 0; } + if(!(stat(pathname, &st) == 0 && S_ISDIR(st.st_mode)) + && mkdir(pathname, mode) == -1) + return _mkdir_error(pathname, 2); return 0; }