sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

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:
Mmkdir.c | 10++++++----
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;