← Commit list

fa0540fb0

Eric Andersen
Eric Andersen
1999-10-22
SOURCE BUG Duration: 1s

Subject

Make mkdir -m work

SOURCE BUG

This commit was genuinely broken at the time (not related to our build system): regexp.c bu commit'te eklendi ama karsilik gelen regexp.h unutuldu, 11 commit sonra (c8fdb5638) eklendi - o araliktaki her commit gercekten derlenemezdi

→ Bu hatanin tam hikayesini ve duzeltme diffini gor

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Debian 14.2.0-19) 14.2.0

—

Build Log

(log yok)

Commit Diff GitHub →

Changelog+3 -0
@@ -1,3 +1,6 @@
+0.32
+ * Fixed mkdir -m option so that it works.
+
0.31
* I added a changelog for version 0.30.
* adjusted find internals to make it smaller, and removed
chmod_chown_chgrp.c+1 -1
@@ -101,7 +101,7 @@ int chmod_chown_chgrp_main(int argc, char **argv)
if ( whichApp == CHMOD_APP ) {
/* Find the specified modes */
- mode &= S_ISVTX|S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO;
+ mode = ( 0 & (S_ISVTX|S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO));
if ( parse_mode(*argv, &mode) == FALSE ) {
fprintf(stderr, "%s: Unknown mode: %s\n", invocationName, *argv);
exit( FALSE);
coreutils/mkdir.c+24 -8
@@ -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);
}
mkdir.c+24 -8
@@ -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);
}
utility.c+3 -5
@@ -540,11 +540,9 @@ parse_mode( const char* s, mode_t* theMode)
groups |= S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO;
break;
default:
- if ( isdigit(c) && c >= '0' && c <= '7' && mode == 0 && groups == 0 ) {
- andMode = 0;
- orMode = strtol(--s, NULL, 8);
- *theMode &= andMode;
- *theMode |= orMode;
+ if ( isdigit(c) && c >= '0' && c <= '7' &&
+ mode == 0 && groups == 0 ) {
+ *theMode = strtol(--s, NULL, 8);
return (TRUE);
}
else