X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_utils_file.c;h=ba70b6b395f95d42b43a05401751a0be157b14f2;hp=e4d5802ff899824b6960a7369e150108c6d66dd9;hb=a7e2961c0f6dfb50bed2c66f30c4be16cadfa088;hpb=27d4bf1817259873b0a1e118d03978f0d2f2595e diff --git a/udev_utils_file.c b/udev_utils_file.c index e4d5802ff..ba70b6b39 100644 --- a/udev_utils_file.c +++ b/udev_utils_file.c @@ -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)