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 74284c4..a771091 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 7bc69bf..73e61f2 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