return 1;
}
+static bool mkdir_if_needed(const char *dir)
+{
+ mrp_debug("creating directory '%s'", dir);
+
+ if (mkdir(dir, 0700) == -1) {
+ struct stat buf;
+
+ if (errno != EEXIST) {
+ mrp_log_error("failed to create directory '%s'", dir);
+ goto error;
+ }
+
+ /* there already is a directory or a file of that name */
+
+ if (stat(dir, &buf) == -1) {
+ mrp_log_error("failed to stat directory '%s'", dir);
+ goto error;
+ }
+
+ if (!S_ISDIR(buf.st_mode)) {
+ mrp_log_error("file '%s' exists and isn't a directory", dir);
+ goto error;
+ }
+ }
+ return TRUE;
+
+error:
+ return FALSE;
+}
+
+
static bool verify_appid(const char *appid)
{
/* check if appid contains illegal elements, since it's being used in
char user_dir_path[user_dir_path_len + 1];
struct stat buf;
+ mrp_debug("create user home directory: %s, %s", dir_path, name);
+
if (stat(dir_path, &buf) == -1) {
if (errno != ENOENT) {
return NULL;
}
- if (mkdir(dir_path, 0700) == -1) {
+ if (!mkdir_if_needed(dir_path)) {
mrp_log_error("could not create user data directory '%s'", dir_path);
return NULL;
}
return NULL;
}
- if (mkdir(user_dir_path, 0700) == -1) {
+ if (!mkdir_if_needed(user_dir_path)) {
mrp_log_error("could not create private user data directory '%s'",
user_dir_path);
return NULL;
/* create tmp dir for flag file */
- if (mkdir("/tmp/ico", 0700) == -1) {
- mrp_log_error("failed to create /tmp/ico directory");
+ if (!mkdir_if_needed("/tmp/ico")) {
goto error;
}