summaryrefslogtreecommitdiff
path: root/xf86drmMode.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-12-28 22:06:51 -0800
committerKenneth Graunke <kenneth@whitecape.org>2014-01-20 10:58:06 -0800
commit734de7093db296912da0027e4fa1094f60787c11 (patch)
tree81548f2353d24b0a90cd5da7f4dedcfbc7d2be08 /xf86drmMode.c
parentcb4bc8ead63cb213a26bcc8d14b2b44d9fb967da (diff)
drm: Initialize or valgrind-clear modesetting ioctl arguments.
Fixes valgrind complaints in the modesetting driver. I tried to follow each ioctl's pattern for whether it was initializing just the in values, or both in and out values. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'xf86drmMode.c')
-rw-r--r--xf86drmMode.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/xf86drmMode.c b/xf86drmMode.c
index 6b60c35e..dd7966ef 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -41,6 +41,10 @@
#include <sys/ioctl.h>
#include <stdio.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include "xf86drmMode.h"
#include "xf86drm.h"
#include <drm.h>
@@ -49,6 +53,16 @@
#include <unistd.h>
#include <errno.h>
+#ifdef HAVE_VALGRIND
+#include <valgrind.h>
+#include <memcheck.h>
+#define VG(x) x
+#else
+#define VG(x)
+#endif
+
+#define VG_CLEAR(s) VG(memset(&s, 0, sizeof(s)))
+
#define U642VOID(x) ((void *)(unsigned long)(x))
#define VOID2U64(x) ((uint64_t)(unsigned long)(x))
@@ -245,6 +259,7 @@ int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
struct drm_mode_fb_cmd f;
int ret;
+ VG_CLEAR(f);
f.width = width;
f.height = height;
f.pitch = pitch;
@@ -335,6 +350,7 @@ drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId)
struct drm_mode_crtc crtc;
drmModeCrtcPtr r;
+ VG_CLEAR(crtc);
crtc.crtc_id = crtcId;
if (drmIoctl(fd, DRM_IOCTL_MODE_GETCRTC, &crtc))
@@ -368,6 +384,7 @@ int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId,
{
struct drm_mode_crtc crtc;
+ VG_CLEAR(crtc);
crtc.x = x;
crtc.y = y;
crtc.crtc_id = crtcId;
@@ -436,6 +453,7 @@ drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id)
drmModeEncoderPtr r = NULL;
enc.encoder_id = encoder_id;
+ enc.crtc_id = 0;
enc.encoder_type = 0;
enc.possible_crtcs = 0;
enc.possible_clones = 0;
@@ -580,6 +598,7 @@ drmModePropertyPtr drmModeGetProperty(int fd, uint32_t property_id)
struct drm_mode_get_property prop;
drmModePropertyPtr r;
+ VG_CLEAR(prop);
prop.prop_id = property_id;
prop.count_enum_blobs = 0;
prop.count_values = 0;