]> git.sur5r.net Git - i3/i3/blobdiff - libi3/mkdirp.c
mkdirp: do not throw an error if directory exists
[i3/i3] / libi3 / mkdirp.c
index a0d35f961dbfcbd35687f051bcdd010ffc812282..95c31b59d5634bc6a1026195aaabad7d1b68942d 100644 (file)
 bool mkdirp(const char *path) {
     if (mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0)
         return true;
-    if (errno != ENOENT) {
+    if (errno == EEXIST) {
+        struct stat st;
+        /* Check that the named file actually is a directory. */
+        if (stat(path, &st)) {
+            ELOG("stat(%s) failed: %s\n", path, strerror(errno));
+            return false;
+        }
+        if (!S_ISDIR(st.st_mode)) {
+            ELOG("mkdir(%s) failed: %s\n", path, strerror(ENOTDIR));
+            return false;
+        }
+        return true;
+    } else if (errno != ENOENT) {
         ELOG("mkdir(%s) failed: %s\n", path, strerror(errno));
         return false;
     }