ecore-drm2: Iterate plane formats properly
authorChris Michael <cp.michael@samsung.com>
Wed, 19 Apr 2017 18:56:27 +0000 (14:56 -0400)
committerChris Michael <cp.michael@samsung.com>
Wed, 19 Apr 2017 18:58:11 +0000 (14:58 -0400)
This patch addresses an issue where plane formats were not being
properly copied into our Plane State structure and causing any usage
of our atomic code paths to crash and burn

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
src/lib/ecore_drm2/ecore_drm2_device.c
src/lib/ecore_drm2/ecore_drm2_private.h

index 74284c4502849f6daeba6179932f7ad59e7e9ea0..a771091a523674032b06a5ee6503635a980b993e 100644 (file)
@@ -527,6 +527,8 @@ _drm2_atomic_state_fill(Ecore_Drm2_Atomic_State *state, int fd)
    state->plane_states = calloc(state->planes, sizeof(Ecore_Drm2_Plane_State));
    if (state->plane_states)
      {
+        unsigned int f = 0;
+
         for (i = 0; i < state->planes; i++)
           {
              drmModePlanePtr plane;
@@ -539,8 +541,11 @@ _drm2_atomic_state_fill(Ecore_Drm2_Atomic_State *state, int fd)
              pstate->obj_id = pres->planes[i];
              pstate->mask = plane->possible_crtcs;
              pstate->num_formats = plane->count_formats;
-             memcpy(pstate->formats, plane->formats,
-                    plane->count_formats * sizeof(plane->formats[0]));
+
+             pstate->formats = calloc(plane->count_formats, sizeof(uint32_t));
+
+             for (f = 0; f < plane->count_formats; f++)
+               pstate->formats[f] = plane->formats[f];
 
              sym_drmModeFreePlane(plane);
 
index 7bc69bf460af8fed822f59c6f90501a3a084128a..73e61f2431b158d21565e9398efa9e8f75c63d7c 100644 (file)
@@ -649,7 +649,7 @@ typedef struct _Ecore_Drm2_Plane_State
    uint32_t supported_rotations;
 
    uint32_t num_formats;
-   uint32_t formats[];
+   uint32_t *formats;
 } Ecore_Drm2_Plane_State;
 
 struct _Ecore_Drm2_Atomic_State