summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorPatrick McDermott <pj@pehjota.net>2017-11-06 16:38:49 (EST)
committer Patrick McDermott <pj@pehjota.net>2017-11-06 16:40:32 (EST)
commit03f412a9ed8bdb1ba57242cb7874a2efc90094cb (patch)
treeccbb7ce69298aa5cea29fe7f61d34e09bea7eaeb /src/config
parent1f12d146cedbd513456b563ec288ac56a986d8ca (diff)
downloadmarquee-03f412a9ed8bdb1ba57242cb7874a2efc90094cb.zip
marquee-03f412a9ed8bdb1ba57242cb7874a2efc90094cb.tar.gz
marquee-03f412a9ed8bdb1ba57242cb7874a2efc90094cb.tar.bz2
mq_profiles_insert(): Make sure directory can be created
Diffstat (limited to 'src/config')
-rw-r--r--src/config/profiles.c21
1 files changed, 16 insertions, 5 deletions
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 <gio/gio.h>
#include <glib.h>
+#include <glib/gstdio.h>
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);