commit c82425e128383d6750488435deb2b2326c3f180a
parent b12041365dd492f602b049052c0bf8755771b4a9
Author: FRIGN <dev@frign.de>
Date: Fri, 13 Mar 2015 12:15:30 +0100
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.
Diffstat:
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/mkdir.c b/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;