Make mkdir -m work

This commit is contained in:
Eric Andersen
1999-10-22 18:18:31 +00:00
parent 8eefd021ca
commit fa0540fb09
5 changed files with 55 additions and 22 deletions

View File

@@ -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);
}