Videomode cleanup
[android/external-libkmsxx.git] / libkms++ / helpers.cpp
index 7746bdefdb88989bec597ad7e84862fd5d4e1e25..715e757969cc94d5741245e0b2748e6f75344fc5 100644 (file)
@@ -3,21 +3,70 @@
 #include "helpers.h"
 #include <cstring>
 
+#define CPY(field) dst.field = src.field
+
 namespace kms
 {
 Videomode drm_mode_to_video_mode(const drmModeModeInfo& drmmode)
 {
-       // XXX these are the same at the moment
-       Videomode mode;
-       memcpy(&mode, &drmmode, sizeof(mode));
+       Videomode mode = { };
+
+       auto& src = drmmode;
+       auto& dst = mode;
+
+       CPY(clock);
+
+       CPY(hdisplay);
+       CPY(hsync_start);
+       CPY(hsync_end);
+       CPY(htotal);
+       CPY(hskew);
+
+       CPY(vdisplay);
+       CPY(vsync_start);
+       CPY(vsync_end);
+       CPY(vtotal);
+       CPY(vscan);
+
+       CPY(vrefresh);
+
+       CPY(flags);
+       CPY(type);
+
+       mode.name = drmmode.name;
+
        return mode;
 }
 
 drmModeModeInfo video_mode_to_drm_mode(const Videomode& mode)
 {
-       // XXX these are the same at the moment
-       drmModeModeInfo drmmode;
-       memcpy(&drmmode, &mode, sizeof(drmmode));
+       drmModeModeInfo drmmode = { };
+
+       auto& src = mode;
+       auto& dst = drmmode;
+
+       CPY(clock);
+
+       CPY(hdisplay);
+       CPY(hsync_start);
+       CPY(hsync_end);
+       CPY(htotal);
+       CPY(hskew);
+
+       CPY(vdisplay);
+       CPY(vsync_start);
+       CPY(vsync_end);
+       CPY(vtotal);
+       CPY(vscan);
+
+       CPY(vrefresh);
+
+       CPY(flags);
+       CPY(type);
+
+       strncpy(drmmode.name, mode.name.c_str(), sizeof(drmmode.name));
+       drmmode.name[sizeof(drmmode.name) - 1] = 0;
+
        return drmmode;
 }
 }