From 28a87a0717f52e757f1a7ed9353f1d4e57e25743 Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Dec 08 2011 18:42:21 +0000 Subject: ensure that our directories exist when we look them up --- diff --git a/src/env-session.c b/src/env-session.c index 98d2d36..68a8016 100644 --- a/src/env-session.c +++ b/src/env-session.c @@ -18,6 +18,8 @@ #include "config.h" #include +#include +#include #include #include #include @@ -76,16 +78,37 @@ cm_env_homedir(const char *subdir, const char *subfile) return ret; } +static void +cm_env_ensure_dir(char *path) +{ + char *p, *q; + struct stat st; + + p = path + strlen(path); + for (q = path + 1; q < p; q++) { + if (*q == '/') { + *q = '\0'; + if ((stat(path, &st) == -1) && + (errno == ENOENT)) { + mkdir(path, S_IRWXU); + } + *q = '/'; + } + } +} + char * cm_env_config_dir(void) { static char *ret = NULL; + if (ret == NULL) { ret = getenv(CM_STORE_CONFIG_DIRECTORY_ENV); if (ret == NULL) { ret = cm_env_homedir(CM_STORE_SESSION_CONFIG_DIRECTORY, NULL); } + cm_env_ensure_dir(ret); } return ret; } @@ -100,6 +123,7 @@ cm_env_request_dir(void) ret = cm_env_homedir(CM_STORE_SESSION_REQUESTS_DIRECTORY, NULL); } + cm_env_ensure_dir(ret); } return ret; } @@ -114,6 +138,7 @@ cm_env_ca_dir(void) ret = cm_env_homedir(CM_STORE_SESSION_CAS_DIRECTORY, NULL); } + cm_env_ensure_dir(ret); } return ret; } @@ -128,6 +153,7 @@ cm_env_tmp_dir(void) if ((ret == NULL) || (strlen(ret) == 0)) { ret = _PATH_VARTMP; } + cm_env_ensure_dir(ret); } return ret; }