summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2013-05-26 21:48:14 -0400
committerKristian Høgsberg <krh@bitplanet.net>2013-05-26 21:48:14 -0400
commit14e438c8a2bc7342489d248a3d66b9123245d552 (patch)
treefe1d3774c4e00f9030f6a78481d1a49472178bea
parent115b0f729c99d6b9f7ffa004209249094fe871f0 (diff)
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.
-rw-r--r--src/compositor-drm.c9
-rw-r--r--src/compositor-fbdev.c10
-rw-r--r--src/compositor-headless.c12
-rw-r--r--src/compositor-rdp.c9
-rw-r--r--src/compositor-rpi.c9
-rw-r--r--src/compositor-wayland.c9
-rw-r--r--src/compositor-x11.c10
-rw-r--r--src/compositor.c33
-rw-r--r--src/compositor.h6
-rw-r--r--src/shell.c4
10 files changed, 54 insertions, 57 deletions
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index c9529be7..44351627 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -2442,7 +2442,8 @@ planes_binding(struct weston_seat *seat, uint32_t time, uint32_t key, void *data
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 @@ drm_compositor_create(struct wl_display *display,
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 @@ err_base:
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 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
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 c643c236..898933fb 100644
--- a/src/compositor-fbdev.c
+++ b/src/compositor-fbdev.c
@@ -836,7 +836,8 @@ switch_vt_binding(struct weston_seat *seat, uint32_t time, uint32_t key, void *d
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 @@ fbdev_compositor_create(struct wl_display *display, int *argc, char *argv[],
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 @@ out_free:
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 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
parse_options(fbdev_options, ARRAY_LENGTH(fbdev_options), argc, argv);
- return fbdev_compositor_create(display, argc, argv, config_fd,
- &param);
+ return fbdev_compositor_create(display, argc, argv, config, &param);
}
diff --git a/src/compositor-headless.c b/src/compositor-headless.c
index e4bd1bea..e250b989 100644
--- a/src/compositor-headless.c
+++ b/src/compositor-headless.c
@@ -157,8 +157,9 @@ headless_destroy(struct weston_compositor *ec)
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 @@ headless_compositor_create(struct wl_display *display,
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 @@ err_free:
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 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
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 ae6e8e05..1711fdd0 100644
--- a/src/compositor-rdp.c
+++ b/src/compositor-rdp.c
@@ -965,7 +965,7 @@ rdp_incoming_peer(freerdp_listener *instance, freerdp_peer *client)
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 @@ rdp_compositor_create(struct wl_display *display,
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 @@ err_free:
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 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
};
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 5a6d8faa..3d95d303 100644
--- a/src/compositor-rpi.c
+++ b/src/compositor-rpi.c
@@ -734,7 +734,8 @@ struct rpi_parameters {
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 @@ rpi_compositor_create(struct wl_display *display, int *argc, char *argv[],
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 @@ out_free:
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 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
else
param.output_transform = ret;
- return rpi_compositor_create(display, argc, argv, config_fd, &param);
+ return rpi_compositor_create(display, argc, argv, config, &param);
}
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index 511a12da..d253d87a 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -721,7 +721,8 @@ wayland_destroy(struct weston_compositor *ec)
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 @@ wayland_compositor_create(struct wl_display *display,
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 @@ err_free:
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 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
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 be7b13ec..279f1b34 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -1508,7 +1508,8 @@ x11_compositor_create(struct wl_display *display,
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 @@ x11_compositor_create(struct wl_display *display,
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 @@ err_free:
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 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
fullscreen,
no_input,
use_pixman,
- argc, argv, config_fd);
+ argc, argv, config);
}
diff --git a/src/compositor.c b/src/compositor.c
index 4322fb81..f9bdb090 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2771,15 +2771,13 @@ WL_EXPORT int
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 @@ weston_compositor_shutdown(struct weston_compositor *ec)
wl_event_loop_destroy(ec->input_loop);
- close(ec->config_fd);
+ weston_config_destroy(ec->config);
}
WL_EXPORT void
@@ -3208,24 +3206,18 @@ int main(int argc, char *argv[])
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 @@ int main(int argc, char *argv[])
}
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 b871fe4e..e3a798ea 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -556,8 +556,6 @@ struct weston_compositor {
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 @@ weston_compositor_get_time(void);
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 @@ noop_renderer_init(struct weston_compositor *ec);
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 0e18db22..14433288 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -379,7 +379,7 @@ get_animation_type(char *animation)
}
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 @@ module_init(struct weston_compositor *ec,
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);