about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/common.c29
-rw-r--r--src/common.h1
-rw-r--r--src/profanity.c1
3 files changed, 31 insertions, 0 deletions
diff --git a/src/common.c b/src/common.c
index a015514d..ba4127f9 100644
--- a/src/common.c
+++ b/src/common.c
@@ -20,10 +20,39 @@
  *
  */
 
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+
 #include <glib.h>
 
+static void _create_dir(char *name);
+
 void p_slist_free_full(GSList *items, GDestroyNotify free_func)
 {
   g_slist_foreach (items, (GFunc) free_func, NULL);
   g_slist_free (items);
 }
+
+void create_config_directory()
+{
+    GString *dir = g_string_new(getenv("HOME"));
+    g_string_append(dir, "/.config");
+    _create_dir(dir->str);
+
+    g_string_append(dir, "/profanity");
+    _create_dir(dir->str);
+}
+
+void _create_dir(char *name)
+{
+    int e;
+    struct stat sb;
+
+    e = stat(name, &sb);
+    if (e != 0)
+        if (errno == ENOENT)
+            e = mkdir(name, S_IRWXU);
+}
diff --git a/src/common.h b/src/common.h
index 043e2925..1408aaa3 100644
--- a/src/common.h
+++ b/src/common.h
@@ -50,5 +50,6 @@ typedef enum {
 #endif
 
 void p_slist_free_full(GSList *items, GDestroyNotify free_func);
+void create_config_directory();
 
 #endif
diff --git a/src/profanity.c b/src/profanity.c
index bba4ebb6..047cc080 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -65,6 +65,7 @@ void profanity_run(void)
 
 void profanity_init(const int disable_tls)
 {
+    create_config_directory();
     log_init();
     prefs_load();
     gui_init();