]> err.no Git - systemd/commitdiff
create_path: don't fail if something else created the directory
authorKay Sievers <kay.sievers@vrfy.org>
Thu, 12 Apr 2007 16:55:59 +0000 (18:55 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Thu, 12 Apr 2007 16:55:59 +0000 (18:55 +0200)
Thanks to Jeremy for the patch.

udev_utils_file.c

index e4d5802ff899824b6960a7369e150108c6d66dd9..ba70b6b395f95d42b43a05401751a0be157b14f2 100644 (file)
@@ -36,14 +36,13 @@ int create_path(const char *path)
        char *pos;
        struct stat stats;
 
-       strcpy (p, path);
+       strlcpy(p, path, sizeof(p));
        pos = strrchr(p, '/');
        if (pos == p || pos == NULL)
                return 0;
 
        while (pos[-1] == '/')
                pos--;
-
        pos[0] = '\0';
 
        dbg("stat '%s'\n", p);
@@ -54,7 +53,12 @@ int create_path(const char *path)
                return -1;
 
        dbg("mkdir '%s'\n", p);
-       return mkdir(p, 0755);
+       if (mkdir(p, 0755) == 0)
+               return 0;
+       if (errno == EEXIST)
+               if (stat(p, &stats) == 0 && (stats.st_mode & S_IFMT) == S_IFDIR)
+                       return 0;
+       return -1;
 }
 
 int delete_path(const char *path)