wayland-egl: rework and simplify wl_egl_window initialization
authorEmil Velikov <emil.velikov@collabora.com>
Thu, 28 Sep 2017 17:38:13 +0000 (18:38 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Mon, 2 Oct 2017 15:29:38 +0000 (16:29 +0100)
Use calloc instead of malloc + explicitly zeroing the different fields.
We need special handling for the version field which is of type
const intptr_t.

As we're here document why keeping the constness is a good idea.

The wl_egl_window_resize() call is replaced with an explicit set of the
width/height.

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Miguel A. Vico <mvicomoya@nvidia.com>
src/egl/wayland/wayland-egl/wayland-egl.c

index 4501c6dc9564308539c8daa04dc6112a85940084..e7cea895ece160b29a4e513e3b10c9d5a03f34ce 100644 (file)
@@ -61,26 +61,32 @@ WL_EGL_EXPORT struct wl_egl_window *
 wl_egl_window_create(struct wl_surface *surface,
                     int width, int height)
 {
-       struct wl_egl_window _INIT_ = { .version = WL_EGL_WINDOW_VERSION };
        struct wl_egl_window *egl_window;
 
        if (width <= 0 || height <= 0)
                return NULL;
 
-       egl_window = malloc(sizeof *egl_window);
+       egl_window = calloc(1, sizeof *egl_window);
        if (!egl_window)
                return NULL;
 
-       memcpy(egl_window, &_INIT_, sizeof *egl_window);
+       /* Cast away the constness to set the version number.
+        *
+        * We want the const notation since it gives an explicit
+        * feedback to the backend implementation, should it try to
+        * change it.
+        *
+        * The latter in itself is not too surprising as these days APIs
+        * tend to provide bidirectional version field.
+        */
+       intptr_t *version = (intptr_t *)&egl_window->version;
+       *version = WL_EGL_WINDOW_VERSION;
 
        egl_window->surface = surface;
-       egl_window->private = NULL;
-       egl_window->resize_callback = NULL;
-       egl_window->destroy_window_callback = NULL;
-       wl_egl_window_resize(egl_window, width, height, 0, 0);
-       egl_window->attached_width  = 0;
-       egl_window->attached_height = 0;
-       
+
+       egl_window->width  = width;
+       egl_window->height = height;
+
        return egl_window;
 }