diff --git a/src/coreutils/mkdir/mkdir.c b/src/coreutils/mkdir/mkdir.c index af9d640..25d200d 100644 --- a/src/coreutils/mkdir/mkdir.c +++ b/src/coreutils/mkdir/mkdir.c @@ -6,11 +6,17 @@ #include #include #include "parse_mode.h" -unsigned int v_flag; -int do_mkdir(const char *path, mode_t mode) { +unsigned int v_flag; +unsigned int p_flag; +mode_t mode = 0777; + +int do_mkdir(const char *path) { if (mkdir(path, mode)) { - fprintf(stderr, "mkdir: %s %s\n", path, strerror(errno)); + if (p_flag) + return 0; + + fprintf(stderr, "mkdir: %s: %s\n", path, strerror(errno)); return 1; } @@ -20,7 +26,7 @@ int do_mkdir(const char *path, mode_t mode) { return 0; } -int do_parents(const char *path, mode_t mode) { +int do_parents(const char *path) { if (path[0] == '.' || path[0] == '/') return 0; @@ -31,17 +37,14 @@ int do_parents(const char *path, mode_t mode) { } const char *par = dirname(path2); - do_parents(par, mode); - do_mkdir(path2, mode); + do_parents(par); + int ret = do_mkdir(path2); free(path2); - return 0; + return ret; } int main(int argc, char **argv) { - unsigned int p_flag = 0; - mode_t mode = 0777; - int opt; while ((opt = getopt(argc, argv, "pm:v")) != -1) { switch (opt) { @@ -68,12 +71,12 @@ int main(int argc, char **argv) { for (int i = 0; i < argc; i++) { if (p_flag) { - if (do_parents(argv[i], mode)) + if (do_parents(argv[i])) return 1; } else { - if (do_mkdir(argv[i], mode)) + if (do_mkdir(argv[i])) return 1; } }