Three bugfixes in mkdir(1)
1) Any path passed to mkdir -p beginning with '/' failed, because it would cut out the first '/' immediately, passing "" to mkdir. 2) Running mkdir -p with a path/to/dir without trailing '/' would not create the directory. This is due to a wrong flag-check I added in the main-loop. It should now work as expected. 3) With the p-flag given, don't report an error in case the last dir also exists.
This commit is contained in:
		
							
								
								
									
										10
									
								
								mkdir.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								mkdir.c
									
									
									
									
									
								
							| @@ -11,7 +11,7 @@ mkdirp(char *path) | ||||
| { | ||||
| 	char *p; | ||||
|  | ||||
| 	for (p = path; *p; p++) { | ||||
| 	for (p = path + (*path == '/'); *p; p++) { | ||||
| 		if (*p != '/') | ||||
| 			continue; | ||||
| 		*p = '\0'; | ||||
| @@ -56,9 +56,11 @@ main(int argc, char *argv[]) | ||||
| 	for (; *argv; argc--, argv++) { | ||||
| 		if (pflag && mkdirp(*argv) < 0) { | ||||
| 			ret = 1; | ||||
| 		} else if (!pflag && mkdir(*argv, S_IRWXU | S_IRWXG | S_IRWXO) < 0) { | ||||
| 			weprintf("mkdir %s:", *argv); | ||||
| 			ret = 1; | ||||
| 		} else if (mkdir(*argv, S_IRWXU | S_IRWXG | S_IRWXO) < 0) { | ||||
| 			if (!(pflag && errno == EEXIST)) { | ||||
| 				weprintf("mkdir %s:", *argv); | ||||
| 				ret = 1; | ||||
| 			} | ||||
| 		} else if (mflag && chmod(*argv, mode) < 0) { | ||||
| 			weprintf("chmod %s:", *argv); | ||||
| 			ret = 1; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user