diff options
author | Eric Andersen <andersen@codepoet.org> | 1999-10-22 18:18:31 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 1999-10-22 18:18:31 +0000 |
commit | fa0540fb091625499b90285bafa061c665e0c636 (patch) | |
tree | b0a130e8b224f980f1ea234c0d1d47590ebe748c /coreutils/mkdir.c | |
parent | 8eefd021ca7a0b14e46e6bbff2d885ca9da0ea96 (diff) | |
download | busybox-w32-fa0540fb091625499b90285bafa061c665e0c636.tar.gz busybox-w32-fa0540fb091625499b90285bafa061c665e0c636.tar.bz2 busybox-w32-fa0540fb091625499b90285bafa061c665e0c636.zip |
Make mkdir -m work
Diffstat (limited to 'coreutils/mkdir.c')
-rw-r--r-- | coreutils/mkdir.c | 32 |
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" | |||
33 | 33 | ||
34 | 34 | ||
35 | static int parentFlag = FALSE; | 35 | static int parentFlag = FALSE; |
36 | static int permFlag = FALSE; | 36 | static mode_t mode = 777; |
37 | static mode_t mode = 0777; | ||
38 | 37 | ||
39 | 38 | ||
40 | extern int mkdir_main(int argc, char **argv) | 39 | extern int mkdir_main(int argc, char **argv) |
41 | { | 40 | { |
41 | int i=FALSE; | ||
42 | argc--; | 42 | argc--; |
43 | argv++; | 43 | argv++; |
44 | 44 | ||
45 | /* Parse any options */ | 45 | /* Parse any options */ |
46 | while (argc > 1 && **argv == '-') { | 46 | while (argc > 0 && **argv == '-') { |
47 | while (*++(*argv)) | 47 | while (i==FALSE && *++(*argv)) { |
48 | switch (**argv) { | 48 | switch (**argv) { |
49 | case 'm': | 49 | case 'm': |
50 | permFlag = TRUE; | 50 | if (--argc == 0) |
51 | usage( mkdir_usage); | ||
52 | /* Find the specified modes */ | ||
53 | mode = 0; | ||
54 | if ( parse_mode(*(++argv), &mode) == FALSE ) { | ||
55 | fprintf(stderr, "Unknown mode: %s\n", *argv); | ||
56 | exit( FALSE); | ||
57 | } | ||
58 | /* Set the umask for this process so it doesn't | ||
59 | * screw up whatever the user just entered. */ | ||
60 | umask(0); | ||
61 | i=TRUE; | ||
51 | break; | 62 | break; |
52 | case 'p': | 63 | case 'p': |
53 | parentFlag = TRUE; | 64 | parentFlag = TRUE; |
@@ -55,6 +66,7 @@ extern int mkdir_main(int argc, char **argv) | |||
55 | default: | 66 | default: |
56 | usage( mkdir_usage); | 67 | usage( mkdir_usage); |
57 | } | 68 | } |
69 | } | ||
58 | argc--; | 70 | argc--; |
59 | argv++; | 71 | argv++; |
60 | } | 72 | } |
@@ -64,11 +76,13 @@ extern int mkdir_main(int argc, char **argv) | |||
64 | usage( mkdir_usage); | 76 | usage( mkdir_usage); |
65 | } | 77 | } |
66 | 78 | ||
67 | while (--argc > 0) { | 79 | while (argc > 0) { |
80 | int status; | ||
68 | struct stat statBuf; | 81 | struct stat statBuf; |
69 | if (stat(*(++argv), &statBuf) != ENOENT) { | 82 | status=stat(*argv, &statBuf); |
83 | if (status != -1 && status != ENOENT ) { | ||
70 | fprintf(stderr, "%s: File exists\n", *argv); | 84 | fprintf(stderr, "%s: File exists\n", *argv); |
71 | return( FALSE); | 85 | exit( FALSE); |
72 | } | 86 | } |
73 | if (parentFlag == TRUE) | 87 | if (parentFlag == TRUE) |
74 | createPath(*argv, mode); | 88 | createPath(*argv, mode); |
@@ -78,6 +92,8 @@ extern int mkdir_main(int argc, char **argv) | |||
78 | exit( FALSE); | 92 | exit( FALSE); |
79 | } | 93 | } |
80 | } | 94 | } |
95 | argc--; | ||
96 | argv++; | ||
81 | } | 97 | } |
82 | exit( TRUE); | 98 | exit( TRUE); |
83 | } | 99 | } |