From cad5364599eb5062d59e0c397ed638ddd61a8d5d Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Wed, 19 Mar 2003 09:13:01 +0000 Subject: Major coreutils update. --- coreutils/mkdir.c | 58 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 27 deletions(-) (limited to 'coreutils/mkdir.c') diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c index f003db99f..b018ac181 100644 --- a/coreutils/mkdir.c +++ b/coreutils/mkdir.c @@ -20,46 +20,50 @@ * */ -#include -#include -#include -#include -#include -#include -#include -#include +/* BB_AUDIT SUSv3 compliant */ +/* http://www.opengroup.org/onlinepubs/007904975/utilities/mkdir.html */ + +/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org) + * + * Fixed broken permission setting when -p was used; especially in + * conjunction with -m. + */ +#include +#include #include "busybox.h" extern int mkdir_main (int argc, char **argv) { - mode_t mode = -1; + mode_t mode = (mode_t)(-1); + int status = EXIT_SUCCESS; int flags = 0; - int i, opt; + int opt; - while ((opt = getopt (argc, argv, "m:p")) != -1) { - switch (opt) { - case 'm': + while ((opt = getopt (argc, argv, "m:p")) > 0) { + if (opt == 'm') { mode = 0777; - if (!parse_mode (optarg, &mode)) { - error_msg_and_die ("invalid mode `%s'", optarg); + if (!bb_parse_mode (optarg, &mode)) { + bb_error_msg_and_die ("invalid mode `%s'", optarg); } - umask(0); - break; - case 'p': + } else if (opt == 'p') { flags |= FILEUTILS_RECUR; - break; - default: - show_usage (); + } else { + bb_show_usage(); } } - if (optind == argc) - show_usage (); - - for (i = optind; i < argc; i++) { - make_directory (argv[i], mode, flags); + if (optind == argc) { + bb_show_usage(); } - return(EXIT_SUCCESS); + argv += optind; + + do { + if (bb_make_directory(*argv, mode, flags)) { + status = EXIT_FAILURE; + } + } while (*++argv); + + return status; } -- cgit v1.2.3