From 5ee1be7e93de3850f70a4c4d83752659acf47ca4 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 20 Dec 2023 17:59:13 +0300 Subject: [PATCH] mkdir fix: p_flag --- src/coreutils/mkdir/mkdir.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) 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; } }