compositor: Parse config file in main(), only keep weston config object
Now that all backends and modules have been converted to the new
config parser API, we don't have to keep the fd around.
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index c9529be..4435162 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -2442,7 +2442,8 @@
static struct weston_compositor *
drm_compositor_create(struct wl_display *display,
int connector, const char *seat, int tty, int pixman,
- int *argc, char *argv[], int config_fd)
+ int *argc, char *argv[],
+ struct weston_config *config)
{
struct drm_compositor *ec;
struct udev_device *drm_device;
@@ -2465,7 +2466,7 @@
ec->use_pixman = pixman;
if (weston_compositor_init(&ec->base, display, argc, argv,
- config_fd) < 0) {
+ config) < 0) {
weston_log("%s failed\n", __func__);
goto err_base;
}
@@ -2602,7 +2603,7 @@
WL_EXPORT struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
int connector = 0, tty = 0, use_pixman = 0;
const char *seat = default_seat;
@@ -2618,5 +2619,5 @@
parse_options(drm_options, ARRAY_LENGTH(drm_options), argc, argv);
return drm_compositor_create(display, connector, seat, tty, use_pixman,
- argc, argv, config_fd);
+ argc, argv, config);
}
diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
index c643c23..898933f 100644
--- a/src/compositor-fbdev.c
+++ b/src/compositor-fbdev.c
@@ -836,7 +836,8 @@
static struct weston_compositor *
fbdev_compositor_create(struct wl_display *display, int *argc, char *argv[],
- int config_fd, struct fbdev_parameters *param)
+ struct weston_config *config,
+ struct fbdev_parameters *param)
{
struct fbdev_compositor *compositor;
const char *seat = default_seat;
@@ -849,7 +850,7 @@
return NULL;
if (weston_compositor_init(&compositor->base, display, argc, argv,
- config_fd) < 0)
+ config) < 0)
goto out_free;
compositor->udev = udev_new();
@@ -907,7 +908,7 @@
WL_EXPORT struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
/* TODO: Ideally, available frame buffers should be enumerated using
* udev, rather than passing a device node in as a parameter. */
@@ -923,6 +924,5 @@
parse_options(fbdev_options, ARRAY_LENGTH(fbdev_options), argc, argv);
- return fbdev_compositor_create(display, argc, argv, config_fd,
- ¶m);
+ return fbdev_compositor_create(display, argc, argv, config, ¶m);
}
diff --git a/src/compositor-headless.c b/src/compositor-headless.c
index e4bd1be..e250b98 100644
--- a/src/compositor-headless.c
+++ b/src/compositor-headless.c
@@ -157,8 +157,9 @@
static struct weston_compositor *
headless_compositor_create(struct wl_display *display,
- int width, int height, const char *display_name,
- int *argc, char *argv[], int config_fd)
+ int width, int height, const char *display_name,
+ int *argc, char *argv[],
+ struct weston_config *config)
{
struct headless_compositor *c;
@@ -168,8 +169,7 @@
memset(c, 0, sizeof *c);
- if (weston_compositor_init(&c->base, display, argc, argv,
- config_fd) < 0)
+ if (weston_compositor_init(&c->base, display, argc, argv, config) < 0)
goto err_free;
weston_seat_init(&c->fake_seat, &c->base);
@@ -194,7 +194,7 @@
WL_EXPORT struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
int width = 1024, height = 640;
char *display_name = NULL;
@@ -208,5 +208,5 @@
ARRAY_LENGTH(headless_options), argc, argv);
return headless_compositor_create(display, width, height, display_name,
- argc, argv, config_fd);
+ argc, argv, config);
}
diff --git a/src/compositor-rdp.c b/src/compositor-rdp.c
index ae6e8e0..1711fdd 100644
--- a/src/compositor-rdp.c
+++ b/src/compositor-rdp.c
@@ -965,7 +965,7 @@
static struct weston_compositor *
rdp_compositor_create(struct wl_display *display,
struct rdp_compositor_config *config,
- int *argc, char *argv[], int config_fd)
+ int *argc, char *argv[], struct weston_config *config)
{
struct rdp_compositor *c;
char *fd_str;
@@ -977,8 +977,7 @@
memset(c, 0, sizeof *c);
- if (weston_compositor_init(&c->base, display, argc, argv,
- config_fd) < 0)
+ if (weston_compositor_init(&c->base, display, argc, argv, config) < 0)
goto err_free;
c->base.destroy = rdp_destroy;
@@ -1047,7 +1046,7 @@
WL_EXPORT struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
struct rdp_compositor_config config;
rdp_compositor_config_init(&config);
@@ -1070,5 +1069,5 @@
};
parse_options(rdp_options, ARRAY_LENGTH(rdp_options), argc, argv);
- return rdp_compositor_create(display, &config, argc, argv, config_fd);
+ return rdp_compositor_create(display, &config, argc, argv, config);
}
diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
index 5a6d8fa..3d95d30 100644
--- a/src/compositor-rpi.c
+++ b/src/compositor-rpi.c
@@ -734,7 +734,8 @@
static struct weston_compositor *
rpi_compositor_create(struct wl_display *display, int *argc, char *argv[],
- int config_fd, struct rpi_parameters *param)
+ struct weston_config *config,
+ struct rpi_parameters *param)
{
struct rpi_compositor *compositor;
const char *seat = default_seat;
@@ -747,7 +748,7 @@
return NULL;
if (weston_compositor_init(&compositor->base, display, argc, argv,
- config_fd) < 0)
+ config) < 0)
goto out_free;
compositor->udev = udev_new();
@@ -817,7 +818,7 @@
WL_EXPORT struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
const char *transform = "normal";
int ret;
@@ -843,5 +844,5 @@
else
param.output_transform = ret;
- return rpi_compositor_create(display, argc, argv, config_fd, ¶m);
+ return rpi_compositor_create(display, argc, argv, config, ¶m);
}
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index 511a12d..d253d87 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -721,7 +721,8 @@
static struct weston_compositor *
wayland_compositor_create(struct wl_display *display,
int width, int height, const char *display_name,
- int *argc, char *argv[], int config_fd)
+ int *argc, char *argv[],
+ struct weston_config *config)
{
struct wayland_compositor *c;
struct wl_event_loop *loop;
@@ -734,7 +735,7 @@
memset(c, 0, sizeof *c);
if (weston_compositor_init(&c->base, display, argc, argv,
- config_fd) < 0)
+ config) < 0)
goto err_free;
c->parent.wl_display = wl_display_connect(display_name);
@@ -797,7 +798,7 @@
WL_EXPORT struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
int width = 1024, height = 640;
char *display_name = NULL;
@@ -812,5 +813,5 @@
ARRAY_LENGTH(wayland_options), argc, argv);
return wayland_compositor_create(display, width, height, display_name,
- argc, argv, config_fd);
+ argc, argv, config);
}
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index be7b13e..279f1b3 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -1508,7 +1508,8 @@
int fullscreen,
int no_input,
int use_pixman,
- int *argc, char *argv[], int config_fd)
+ int *argc, char *argv[],
+ struct weston_config *config)
{
struct x11_compositor *c;
struct x11_output *output;
@@ -1528,8 +1529,7 @@
memset(c, 0, sizeof *c);
- if (weston_compositor_init(&c->base, display, argc, argv,
- config_fd) < 0)
+ if (weston_compositor_init(&c->base, display, argc, argv, config) < 0)
goto err_free;
c->dpy = XOpenDisplay(NULL);
@@ -1654,7 +1654,7 @@
WL_EXPORT struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
int fullscreen = 0;
int no_input = 0;
@@ -1675,5 +1675,5 @@
fullscreen,
no_input,
use_pixman,
- argc, argv, config_fd);
+ argc, argv, config);
}
diff --git a/src/compositor.c b/src/compositor.c
index 4322fb8..f9bdb09 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2771,15 +2771,13 @@
weston_compositor_init(struct weston_compositor *ec,
struct wl_display *display,
int *argc, char *argv[],
- int config_fd)
+ struct weston_config *config)
{
struct wl_event_loop *loop;
struct xkb_rule_names xkb_names;
struct weston_config_section *s;
- ec->config_fd = config_fd;
- ec->config = weston_config_parse(config_fd);
-
+ ec->config = config;
ec->wl_display = display;
wl_signal_init(&ec->destroy_signal);
wl_signal_init(&ec->activate_signal);
@@ -2876,7 +2874,7 @@
wl_event_loop_destroy(ec->input_loop);
- close(ec->config_fd);
+ weston_config_destroy(ec->config);
}
WL_EXPORT void
@@ -3208,24 +3206,18 @@
struct wl_event_loop *loop;
struct weston_compositor
*(*backend_init)(struct wl_display *display,
- int *argc, char *argv[], int config_fd);
+ int *argc, char *argv[],
+ struct weston_config *config);
int i, config_fd;
char *backend = NULL;
- const char *modules = "desktop-shell.so", *option_modules = NULL;
+ char *modules, *option_modules = NULL;
char *log = NULL;
int32_t idle_time = 300;
int32_t help = 0;
char *socket_name = "wayland-0";
int32_t version = 0;
-
- const struct config_key core_config_keys[] = {
- { "modules", CONFIG_KEY_STRING, &modules },
- };
-
- const struct config_section cs[] = {
- { "core",
- core_config_keys, ARRAY_LENGTH(core_config_keys) },
- };
+ struct weston_config *config;
+ struct weston_config_section *section;
const struct weston_option core_options[] = {
{ WESTON_OPTION_STRING, "backend", 'B', &backend },
@@ -3283,13 +3275,18 @@
}
config_fd = open_config_file("weston.ini");
- parse_config_file(config_fd, cs, ARRAY_LENGTH(cs), NULL);
+ config = weston_config_parse(config_fd);
+ close(config_fd);
+
+ section = weston_config_get_section(config, "core", NULL, NULL);
+ weston_config_section_get_string(section, "modules",
+ &modules, "desktop-shell.so");
backend_init = load_module(backend, "backend_init");
if (!backend_init)
exit(EXIT_FAILURE);
- ec = backend_init(display, &argc, argv, config_fd);
+ ec = backend_init(display, &argc, argv, config);
if (ec == NULL) {
weston_log("fatal: failed to create compositor\n");
exit(EXIT_FAILURE);
diff --git a/src/compositor.h b/src/compositor.h
index b871fe4..e3a798e 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -556,8 +556,6 @@
struct xkb_rule_names xkb_names;
struct xkb_context *xkb_context;
struct weston_xkb_info xkb_info;
-
- int config_fd;
};
struct weston_buffer_reference {
@@ -1011,7 +1009,7 @@
int
weston_compositor_init(struct weston_compositor *ec, struct wl_display *display,
- int *argc, char *argv[], int config_fd);
+ int *argc, char *argv[], struct weston_config *config);
void
weston_compositor_shutdown(struct weston_compositor *ec);
void
@@ -1149,7 +1147,7 @@
struct weston_compositor *
backend_init(struct wl_display *display, int *argc, char *argv[],
- int config_fd);
+ struct weston_config *config);
int
module_init(struct weston_compositor *compositor,
diff --git a/src/shell.c b/src/shell.c
index 0e18db2..1443328 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -379,7 +379,7 @@
}
static void
-shell_configuration(struct desktop_shell *shell, int config_fd)
+shell_configuration(struct desktop_shell *shell)
{
struct weston_config_section *section;
int duration;
@@ -4418,7 +4418,7 @@
wl_array_init(&shell->workspaces.array);
wl_list_init(&shell->workspaces.client_list);
- shell_configuration(shell, ec->config_fd);
+ shell_configuration(shell);
for (i = 0; i < shell->workspaces.num; i++) {
pws = wl_array_add(&shell->workspaces.array, sizeof *pws);