From 03f412a9ed8bdb1ba57242cb7874a2efc90094cb Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Mon, 06 Nov 2017 16:38:49 -0500 Subject: mq_profiles_insert(): Make sure directory can be created --- (limited to 'src/config/profiles.c') diff --git a/src/config/profiles.c b/src/config/profiles.c index f80a6a7..c458c97 100644 --- a/src/config/profiles.c +++ b/src/config/profiles.c @@ -27,8 +27,10 @@ #include #include +#include struct _MqProfiles { + gchar *config_dir; gchar *file_name; GKeyFile *key_file; gchar *current; @@ -51,7 +53,9 @@ create(MqProfiles *profiles) default_profile = mq_profiles_insert(profiles, "Default", "#0000ff"); private_profile = mq_profiles_insert(profiles, "Private", "#6060a0"); - mq_profiles_set_default(profiles, default_profile); + if (default_profile) { + mq_profiles_set_default(profiles, default_profile); + } g_free(default_profile); g_free(private_profile); mq_profiles_save(profiles); @@ -73,13 +77,12 @@ MqProfiles * mq_profiles_new(void) { MqProfiles *profiles; - gchar *config_dir; profiles = g_new0(MqProfiles, 1); - config_dir = g_build_filename(g_get_user_config_dir(), PACKAGE, NULL); - g_mkdir_with_parents(config_dir, 0700); - g_free(config_dir); + profiles->config_dir = g_build_filename(g_get_user_config_dir(), + PACKAGE, NULL); + g_mkdir_with_parents(profiles->config_dir, 0700); profiles->file_name = g_build_filename(g_get_user_config_dir(), PACKAGE, "profiles", NULL); @@ -205,6 +208,14 @@ mq_profiles_insert(MqProfiles *profiles, const gchar *name, const gchar *color) " \t\n\f\r", /* HTML5 "space characters" */ '_'); + /* Make sure the profile directory can be created and doesn't already + * exist (or, on a case-insensitive file system, a directory by the same + * name but in a different case doesn't exist). */ + if (g_mkdir(profiles->config_dir, 0700) != 0) { + g_free(id); + return NULL; + } + mq_profiles_set_name(profiles, id, name); mq_profiles_set_color(profiles, id, color); -- cgit v0.9.1