diff options
Diffstat (limited to 'src/common/util.c')
-rw-r--r-- | src/common/util.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/common/util.c b/src/common/util.c index 292b7cfd5b..8311f95be5 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -701,9 +701,11 @@ file_status_t file_status(const char *fname) } /** Check whether dirname exists and is private. If yes return 0. If - * it does not exist, and create is set, try to create it and return 0 - * on success. Else return -1. */ -int check_private_dir(const char *dirname, int create) + * it does not exist, and check==CPD_CREATE is set, try to create it + * and return 0 on success. If it does not exist, and + * check==CPD_CHECK, and we think we can create it, return 0. Else + * return -1. */ +int check_private_dir(const char *dirname, cpd_check_t check) { int r; struct stat st; @@ -714,23 +716,26 @@ int check_private_dir(const char *dirname, int create) strerror(errno)); return -1; } - if (!create) { + if (check == CPD_NONE) { log(LOG_WARN, "Directory %s does not exist.", dirname); return -1; - } - log(LOG_INFO, "Creating directory %s", dirname); + } else if (check == CPD_CREATE) { + log(LOG_INFO, "Creating directory %s", dirname); #ifdef MS_WINDOWS - r = mkdir(dirname); + r = mkdir(dirname); #else - r = mkdir(dirname, 0700); + r = mkdir(dirname, 0700); #endif - if (r) { - log(LOG_WARN, "Error creating directory %s: %s", dirname, - strerror(errno)); - return -1; - } else { - return 0; + if (r) { + log(LOG_WARN, "Error creating directory %s: %s", dirname, + strerror(errno)); + return -1; + } } + + /* XXXX In the case where check==CPD_CHECK, we should look at the + * parent directory a little harder. */ + return 0; } if (!(st.st_mode & S_IFDIR)) { log(LOG_WARN, "%s is not a directory", dirname); |