From 6ac5f01cc94b2a6f7b6406ddd151e7b4d8fb1d7d Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Wed, 14 Dec 2016 19:40:05 -0800 Subject: [PATCH] mkdir -p: Fail if argument exists, but is not a directory If it is a directory, we can just return straightaway. --- libutil/mkdirp.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libutil/mkdirp.c b/libutil/mkdirp.c index 7796e24..2ef94a3 100644 --- a/libutil/mkdirp.c +++ b/libutil/mkdirp.c @@ -10,6 +10,15 @@ int mkdirp(const char *path) { char tmp[PATH_MAX], *p; + struct stat st; + + if (stat(path, &st) == 0) { + if (S_ISDIR(st.st_mode)) + return 0; + errno = ENOTDIR; + weprintf("%s:", path); + return -1; + } estrlcpy(tmp, path, sizeof(tmp)); for (p = tmp + (tmp[0] == '/'); *p; p++) {