From 76f0c864ec5ce51b652d403e9a2f55774c97f455 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 15 Sep 2008 20:47:55 +0000 Subject: [PATCH] Correct fix for Bugzilla #602. --- src/video/Xext/Xxf86vm/XF86VMode.c | 8 +------- src/video/x11/SDL_x11modes.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/video/Xext/Xxf86vm/XF86VMode.c b/src/video/Xext/Xxf86vm/XF86VMode.c index 23860f211..5cb21905a 100644 --- a/src/video/Xext/Xxf86vm/XF86VMode.c +++ b/src/video/Xext/Xxf86vm/XF86VMode.c @@ -214,12 +214,6 @@ SDL_NAME(XF86VidModeGetGamma)(Display *dpy, int screen, SDL_NAME(XF86VidModeGamm return True; } -/* this is to prevent an unaligned memory write on CPUs that need that. */ -static void zap_ptr(char *ptr, size_t size) -{ - memset(ptr, '\0', size); -} - Bool SDL_NAME(XF86VidModeGetModeLine)(dpy, screen, dotclock, modeline) Display* dpy; @@ -290,7 +284,7 @@ SDL_NAME(XF86VidModeGetModeLine)(dpy, screen, dotclock, modeline) } _XRead(dpy, (char*)modeline->private, modeline->privsize * sizeof(INT32)); } else { - zap_ptr((char *)&modeline->private, sizeof(modeline->private)); + modeline->private = NULL; } UnlockDisplay(dpy); SyncHandle(); diff --git a/src/video/x11/SDL_x11modes.c b/src/video/x11/SDL_x11modes.c index 2f7367ffa..f894c7fb2 100644 --- a/src/video/x11/SDL_x11modes.c +++ b/src/video/x11/SDL_x11modes.c @@ -52,8 +52,25 @@ static int cmpmodelist(const void *va, const void *vb) #if SDL_VIDEO_DRIVER_X11_VIDMODE Bool SDL_NAME(XF86VidModeGetModeInfo)(Display *dpy, int scr, SDL_NAME(XF86VidModeModeInfo) *info) { - SDL_NAME(XF86VidModeModeLine) *l = (SDL_NAME(XF86VidModeModeLine)*)((char*)info + sizeof info->dotclock); - return SDL_NAME(XF86VidModeGetModeLine)(dpy, scr, (int*)&info->dotclock, l); + Bool retval; + int dotclock; + SDL_NAME(XF86VidModeModeLine) l; + SDL_memset(&l, 0, sizeof(l)); + retval = SDL_NAME(XF86VidModeGetModeLine)(dpy, scr, &dotclock, &l); + info->dotclock = dotclock; + info->hdisplay = l.hdisplay; + info->hsyncstart = l.hsyncstart; + info->hsyncend = l.hsyncend; + info->htotal = l.htotal; + info->hskew = l.hskew; + info->vdisplay = l.vdisplay; + info->vsyncstart = l.vsyncstart; + info->vsyncend = l.vsyncend; + info->vtotal = l.vtotal; + info->flags = l.flags; + info->privsize = l.privsize; + info->private = l.private; + return retval; } #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */