compositor-wayland: add versionning to config structure
authorBenoit Gschwind <gschwind@gnu-log.net>
Tue, 10 May 2016 20:47:48 +0000 (22:47 +0200)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Wed, 11 May 2016 09:26:08 +0000 (12:26 +0300)
The patch use temporary code that prepare the patch:
"compositor-wayland: move configuration parsing to weston main.c"

Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
src/compositor-wayland.c
src/compositor-wayland.h

index 3357c56..c8e8797 100644 (file)
@@ -2363,7 +2363,7 @@ load_wayland_backend_config(struct weston_compositor *compositor, int *argc,
                            char *argv[], struct weston_config *config,
                            struct weston_wayland_backend_config *out_config)
 {
-       struct weston_wayland_backend_config new_config = { 0, };
+       struct weston_wayland_backend_config new_config = {{ 0, }};
        struct weston_config_section *section;
        struct weston_wayland_backend_output_config *oc;
        int count, width, height, scale;
@@ -2394,6 +2394,8 @@ load_wayland_backend_config(struct weston_compositor *compositor, int *argc,
 
        new_config.cursor_size = 32;
        new_config.cursor_theme = NULL;
+       new_config.base.struct_size = sizeof(struct weston_wayland_backend_config);
+       new_config.base.struct_version = WESTON_WAYLAND_BACKEND_CONFIG_VERSION;
 
        section = weston_config_get_section(config, "shell", NULL, NULL);
        weston_config_section_get_string(section, "cursor-theme",
@@ -2476,6 +2478,11 @@ err_outputs:
        return -1;
 }
 
+static void
+config_init_to_defaults(struct weston_wayland_backend_config *config)
+{
+}
+
 WL_EXPORT int
 backend_init(struct weston_compositor *compositor, int *argc, char *argv[],
             struct weston_config *config,
@@ -2485,14 +2492,30 @@ backend_init(struct weston_compositor *compositor, int *argc, char *argv[],
        struct wayland_output *output;
        struct wayland_parent_output *poutput;
        struct weston_wayland_backend_config new_config;
+       struct weston_wayland_backend_config foreign_config = {{ 0, }};
        int x, count;
 
        if (load_wayland_backend_config(compositor, argc, argv, config,
-                                       &new_config) < 0) {
-               wayland_backend_config_release(&new_config);
+                                       &foreign_config) < 0) {
+               wayland_backend_config_release(&foreign_config);
                return -1;
        }
 
+       /* temporary assign to prepare the following patch:
+        * "compositor-wayland: move configuration parsing to weston" */
+       config_base = &foreign_config.base;
+
+       if (config_base == NULL ||
+           config_base->struct_version != WESTON_WAYLAND_BACKEND_CONFIG_VERSION ||
+           config_base->struct_size > sizeof(struct weston_wayland_backend_config)) {
+               weston_log("wayland backend config structure is invalid\n");
+               wayland_backend_config_release(&foreign_config);
+               return -1;
+       }
+
+       config_init_to_defaults(&new_config);
+       memcpy(&new_config, config_base, config_base->struct_size);
+
        b = wayland_backend_create(compositor, &new_config, argc, argv, config);
 
        if (!b)
index 5af5ea7..de69b98 100644 (file)
@@ -32,6 +32,8 @@
 extern "C" {
 #endif
 
+#define WESTON_WAYLAND_BACKEND_CONFIG_VERSION 1
+
 struct weston_wayland_backend_output_config {
        int width;
        int height;
@@ -41,6 +43,7 @@ struct weston_wayland_backend_output_config {
 };
 
 struct weston_wayland_backend_config {
+       struct weston_backend_config base;
        int use_pixman;
        int sprawl;
        char *display_name;