config-parser: Honor XDG_CONFIG_DIRS.
[profile/ivi/weston.git] / src / compositor.c
index 0e0835f..a1d7761 100644 (file)
@@ -2807,7 +2807,7 @@ weston_compositor_init(struct weston_compositor *ec,
                       struct wl_display *display,
                       int argc,
                       char *argv[],
-                      const char *config_file)
+                      int config_fd)
 {
        struct wl_event_loop *loop;
        struct xkb_rule_names xkb_names;
@@ -2824,7 +2824,9 @@ weston_compositor_init(struct weston_compositor *ec,
        };
 
        memset(&xkb_names, 0, sizeof(xkb_names));
-       parse_config_file(config_file, cs, ARRAY_LENGTH(cs), ec);
+
+       ec->config_fd = config_fd;
+       parse_config_file(config_fd, cs, ARRAY_LENGTH(cs), ec);
 
        ec->wl_display = display;
        wl_signal_init(&ec->destroy_signal);
@@ -2907,6 +2909,8 @@ weston_compositor_shutdown(struct weston_compositor *ec)
        wl_array_release(&ec->vtxcnt);
 
        wl_event_loop_destroy(ec->input_loop);
+
+       close(ec->config_fd);
 }
 
 WL_EXPORT void
@@ -3185,8 +3189,8 @@ int main(int argc, char *argv[])
        struct sigaction segv_action;
        struct weston_compositor
                *(*backend_init)(struct wl_display *display,
-                                int argc, char *argv[], const char *config_file);
-       int i;
+                                int argc, char *argv[], int config_fd);
+       int i, config_fd;
        char *backend = NULL;
        const char *modules = "desktop-shell.so", *option_modules = NULL;
        char *log = NULL;
@@ -3194,7 +3198,6 @@ int main(int argc, char *argv[])
        int32_t help = 0;
        char *socket_name = "wayland-0";
        int32_t version = 0;
-       char *config_file;
 
        const struct config_key core_config_keys[] = {
                { "modules", CONFIG_KEY_STRING, &modules },
@@ -3261,14 +3264,14 @@ int main(int argc, char *argv[])
                        backend = "drm-backend.so";
        }
 
-       config_file = config_file_path("weston.ini");
-       parse_config_file(config_file, cs, ARRAY_LENGTH(cs), NULL);
+       config_fd = open_config_file("weston.ini");
+       parse_config_file(config_fd, cs, ARRAY_LENGTH(cs), NULL);
 
        backend_init = load_module(backend, "backend_init");
        if (!backend_init)
                exit(EXIT_FAILURE);
 
-       ec = backend_init(display, argc, argv, config_file);
+       ec = backend_init(display, argc, argv, config_fd);
        if (ec == NULL) {
                weston_log("fatal: failed to create compositor\n");
                exit(EXIT_FAILURE);
@@ -3287,8 +3290,6 @@ int main(int argc, char *argv[])
                goto out;
        }
 
-       free(config_file);
-
        ec->option_idle_time = idle_time;
        ec->idle_time = idle_time;