window: add a helper for config file paths
authorPekka Paalanen <ppaalanen@gmail.com>
Tue, 15 Nov 2011 09:45:40 +0000 (11:45 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 15 Nov 2011 13:57:01 +0000 (08:57 -0500)
Add a helper function, that constructs a path to a config file from
XDG_CONFIG_HOME environment variable, by the rules of
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

Make desktop-shell find its config file from XDG_CONFIG_HOME. This
allows to have a personal config file without continuously fighting with
git about wayland-desktop-shell.ini.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
clients/config.c
clients/desktop-shell.c
clients/window.h

index f389b69..42acee7 100644 (file)
@@ -135,3 +135,41 @@ parse_config_file(const char *path,
 
        return 0;
 }
+
+char *
+config_file_path(const char *name)
+{
+       const char dotconf[] = "/.config/";
+       const char *config_dir;
+       const char *home_dir;
+       char *path;
+       size_t size;
+
+       config_dir = getenv("XDG_CONFIG_HOME");
+       if (!config_dir) {
+               fprintf(stderr, "XDG_CONFIG_HOME is not set,"
+                               " falling back to $HOME/.config\n");
+
+               home_dir = getenv("HOME");
+               if (!home_dir) {
+                       fprintf(stderr, "HOME is not set, using cwd.\n");
+                       return strdup(name);
+               }
+
+               size = strlen(home_dir) + sizeof dotconf + strlen(name);
+               path = malloc(size);
+               if (!path)
+                       return NULL;
+
+               snprintf(path, size, "%s%s%s", home_dir, dotconf, name);
+               return path;
+       }
+
+       size = strlen(config_dir) + 1 + strlen(name) + 1;
+       path = malloc(size);
+       if (!path)
+               return NULL;
+
+       snprintf(path, size, "%s/%s", config_dir, name);
+       return path;
+}
index 33ea677..89c8a75 100644 (file)
@@ -348,6 +348,7 @@ launcher_section_done(void *data)
 int main(int argc, char *argv[])
 {
        struct desktop desktop;
+       char *config_file;
 
        desktop.display = display_create(&argc, &argv, NULL);
        if (desktop.display == NULL) {
@@ -363,9 +364,11 @@ int main(int argc, char *argv[])
 
        desktop.panel = panel_create(desktop.display);
 
-       parse_config_file("wayland-desktop-shell.ini",
+       config_file = config_file_path("wayland-desktop-shell.ini");
+       parse_config_file(config_file,
                          config_sections, ARRAY_LENGTH(config_sections),
                          &desktop);
+       free(config_file);
 
        printf("panel color: %08x\n", key_panel_color);
 
index 40bf102..bad1e60 100644 (file)
@@ -346,4 +346,7 @@ parse_config_file(const char *path,
                  const struct config_section *sections, int num_sections,
                  void *data);
 
+char *
+config_file_path(const char *name);
+
 #endif