summaryrefslogtreecommitdiffhomepage
path: root/coreutils
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>1999-10-22 18:18:31 +0000
committerEric Andersen <andersen@codepoet.org>1999-10-22 18:18:31 +0000
commitfa0540fb091625499b90285bafa061c665e0c636 (patch)
treeb0a130e8b224f980f1ea234c0d1d47590ebe748c /coreutils
parent8eefd021ca7a0b14e46e6bbff2d885ca9da0ea96 (diff)
Make mkdir -m work
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/mkdir.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c
index 98c8d8f08..0d0a90ec3 100644
--- a/coreutils/mkdir.c
+++ b/coreutils/mkdir.c
@@ -33,21 +33,32 @@ static const char mkdir_usage[] = "Usage: mkdir [OPTION] DIRECTORY...\n"
static int parentFlag = FALSE;
-static int permFlag = FALSE;
-static mode_t mode = 0777;
+static mode_t mode = 777;
extern int mkdir_main(int argc, char **argv)
{
+ int i=FALSE;
argc--;
argv++;
/* Parse any options */
- while (argc > 1 && **argv == '-') {
- while (*++(*argv))
+ while (argc > 0 && **argv == '-') {
+ while (i==FALSE && *++(*argv)) {
switch (**argv) {
case 'm':
- permFlag = TRUE;
+ if (--argc == 0)
+ usage( mkdir_usage);
+ /* Find the specified modes */
+ mode = 0;
+ if ( parse_mode(*(++argv), &mode) == FALSE ) {
+ fprintf(stderr, "Unknown mode: %s\n", *argv);
+ exit( FALSE);
+ }
+ /* Set the umask for this process so it doesn't
+ * screw up whatever the user just entered. */
+ umask(0);
+ i=TRUE;
break;
case 'p':
parentFlag = TRUE;
@@ -55,6 +66,7 @@ extern int mkdir_main(int argc, char **argv)
default:
usage( mkdir_usage);
}
+ }
argc--;
argv++;
}
@@ -64,11 +76,13 @@ extern int mkdir_main(int argc, char **argv)
usage( mkdir_usage);
}
- while (--argc > 0) {
+ while (argc > 0) {
+ int status;
struct stat statBuf;
- if (stat(*(++argv), &statBuf) != ENOENT) {
+ status=stat(*argv, &statBuf);
+ if (status != -1 && status != ENOENT ) {
fprintf(stderr, "%s: File exists\n", *argv);
- return( FALSE);
+ exit( FALSE);
}
if (parentFlag == TRUE)
createPath(*argv, mode);
@@ -78,6 +92,8 @@ extern int mkdir_main(int argc, char **argv)
exit( FALSE);
}
}
+ argc--;
+ argv++;
}
exit( TRUE);
}