From 611f20e896aa533f0f3e5cd6c8fdd7c381963c95 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Wed, 5 Jan 2011 16:12:42 -0800 Subject: Fix many gcc strict-aliasing warnings menus.c:518: warning: dereferencing type-punned pointer will break strict-aliasing rules and many more of the same message at different lines Signed-off-by: Alan Coopersmith --- src/events.c | 99 ++++++++++++++++++++++++++++++++++++++++++------------------ src/menus.c | 21 ++++++++----- src/parse.c | 11 ++++--- 3 files changed, 91 insertions(+), 40 deletions(-) diff --git a/src/events.c b/src/events.c index 7df232a..87d1ac7 100644 --- a/src/events.c +++ b/src/events.c @@ -271,14 +271,18 @@ Window WindowOfEvent (XEvent *e) Bool DispatchEvent2 () { Window w = Event.xany.window; + XPointer context_data; StashEventTime (&Event); - if (XFindContext (dpy, w, TwmContext, (caddr_t *) &Tmp_win) == XCNOENT) - Tmp_win = NULL; + if (XFindContext (dpy, w, TwmContext, &context_data) == 0) + Tmp_win = (TwmWindow *) context_data; + else + Tmp_win = NULL; - if (XFindContext (dpy, w, ScreenContext, (caddr_t *)&Scr) == XCNOENT) { + if (XFindContext (dpy, w, ScreenContext, &context_data) == 0) + Scr = (struct ScreenInfo *) context_data; + else Scr = FindScreenInfo (WindowOfEvent (&Event)); - } if (!Scr) return False; @@ -298,14 +302,18 @@ Bool DispatchEvent2 () Bool DispatchEvent () { Window w = Event.xany.window; + XPointer context_data; StashEventTime (&Event); - if (XFindContext (dpy, w, TwmContext, (caddr_t *) &Tmp_win) == XCNOENT) - Tmp_win = NULL; + if (XFindContext (dpy, w, TwmContext, &context_data) == 0) + Tmp_win = (TwmWindow *) context_data; + else + Tmp_win = NULL; - if (XFindContext (dpy, w, ScreenContext, (caddr_t *)&Scr) == XCNOENT) { + if (XFindContext (dpy, w, ScreenContext, &context_data) == 0) + Scr = (struct ScreenInfo *) context_data; + else Scr = FindScreenInfo (WindowOfEvent (&Event)); - } if (!Scr) return False; @@ -362,18 +370,25 @@ HandleColormapNotify() ColormapWindow *cwin, **cwins; TwmColormap *cmap; int lost, won, n, number_cwins; + XPointer context_data; - if (XFindContext(dpy, cevent->window, ColormapContext, (caddr_t *)&cwin) == XCNOENT) + if (XFindContext(dpy, cevent->window, ColormapContext, &context_data) == 0) + cwin = (ColormapWindow *) context_data; + else return; + cmap = cwin->colormap; if (cevent->new) { if (XFindContext(dpy, cevent->colormap, ColormapContext, - (caddr_t *)&cwin->colormap) == XCNOENT) + &context_data) == XCNOENT) cwin->colormap = CreateTwmColormap(cevent->colormap); else + { + cwin->colormap = (TwmColormap *) context_data; cwin->colormap->refcnt++; + } cmap->refcnt--; @@ -514,8 +529,11 @@ HandleVisibilityNotify() XVisibilityEvent *vevent = (XVisibilityEvent *) &Event; ColormapWindow *cwin; TwmColormap *cmap; + XPointer context_data; - if (XFindContext(dpy, vevent->window, ColormapContext, (caddr_t *)&cwin) == XCNOENT) + if (XFindContext(dpy, vevent->window, ColormapContext, &context_data) == 0) + cwin = (ColormapWindow *) context_data; + else return; /* @@ -1019,9 +1037,11 @@ HandleClientMessage() void HandleExpose() { - MenuRoot *tmp; - if (XFindContext(dpy, Event.xany.window, MenuContext, (caddr_t *)&tmp) == 0) + XPointer context_data; + + if (XFindContext(dpy, Event.xany.window, MenuContext, &context_data) == 0) { + MenuRoot *tmp = (MenuRoot *) context_data; PaintMenu(tmp, &Event); return; } @@ -1260,12 +1280,13 @@ HandleCreateNotify() void HandleMapRequest() { - int stat; + XPointer context_data; int zoom_save; Event.xany.window = Event.xmaprequest.window; - stat = XFindContext(dpy, Event.xany.window, TwmContext, (caddr_t *)&Tmp_win); - if (stat == XCNOENT) + if (XFindContext(dpy, Event.xany.window, TwmContext, &context_data) == 0) + Tmp_win = (TwmWindow *) context_data; + else Tmp_win = NULL; /* If the window has never been mapped before ... */ @@ -1379,6 +1400,7 @@ HandleUnmapNotify() { int dstx, dsty; Window dumwin; + XPointer context_data; /* * The July 27, 1988 ICCCM spec states that a client wishing to switch @@ -1392,7 +1414,9 @@ HandleUnmapNotify() { Event.xany.window = Event.xunmap.window; if (XFindContext(dpy, Event.xany.window, - TwmContext, (caddr_t *)&Tmp_win) == XCNOENT) + TwmContext, &context_data) == 0) + Tmp_win = (TwmWindow *) context_data; + else Tmp_win = NULL; } @@ -1442,6 +1466,8 @@ HandleUnmapNotify() void HandleMotionNotify() { + XPointer context_data; + if (ResizeWindow != (Window) 0) { XQueryPointer( dpy, Event.xany.window, @@ -1456,7 +1482,8 @@ HandleMotionNotify() || abs (Event.xmotion.y - ResizeOrigY) >= Scr->MoveDelta) WindowMoved = TRUE; - XFindContext(dpy, ResizeWindow, TwmContext, (caddr_t *)&Tmp_win); + if (XFindContext(dpy, ResizeWindow, TwmContext, &context_data) == 0) + Tmp_win = (TwmWindow *) context_data; DoResize(Event.xmotion.x_root, Event.xmotion.y_root, Tmp_win); } } @@ -1471,6 +1498,7 @@ HandleButtonRelease() { int xl, xr, yt, yb, w, h; unsigned mask; + XPointer context_data; if (InfoLines) /* delete info box on 2nd button release */ if (Context == C_IDENTIFY) { @@ -1483,7 +1511,8 @@ HandleButtonRelease() { MoveOutline(Scr->Root, 0, 0, 0, 0, 0, 0); - XFindContext(dpy, DragWindow, TwmContext, (caddr_t *)&Tmp_win); + if (XFindContext(dpy, DragWindow, TwmContext, &context_data) == 0) + Tmp_win = (TwmWindow *) context_data; if (DragWindow == Tmp_win->frame) { xl = Event.xbutton.x_root - DragX - Tmp_win->frame_bw; @@ -1833,6 +1862,8 @@ HandleButtonPress() * it was the root. We must check to see if it happened to be * inside of a client that was getting button press events. */ + XPointer context_data; + XTranslateCoordinates(dpy, Scr->Root, Scr->Root, Event.xbutton.x, Event.xbutton.y, @@ -1840,12 +1871,14 @@ HandleButtonPress() if (Event.xany.window == 0 || (XFindContext(dpy, Event.xany.window, TwmContext, - (caddr_t *)&Tmp_win) == XCNOENT)) + &context_data) == XCNOENT)) { RootFunction = 0; Bell(XkbBI_MinorError,0,Event.xany.window); return; } + else + Tmp_win = (TwmWindow *) context_data; XTranslateCoordinates(dpy, Scr->Root, Event.xany.window, Event.xbutton.x, @@ -1956,6 +1989,7 @@ HandleEnterNotify() XEnterWindowEvent *ewp = &Event.xcrossing; HENScanArgs scanArgs; XEvent dummy; + XPointer context_data; /* * Save the id of the window entered. This will be used to remove @@ -2081,7 +2115,10 @@ HandleEnterNotify() /* * Find the menu that we are dealing with now; punt if unknown */ - if (XFindContext (dpy, ewp->window, MenuContext, (caddr_t *)&mr) != XCSUCCESS) return; + if (XFindContext (dpy, ewp->window, MenuContext, &context_data) == 0) + mr = (MenuRoot *) context_data; + else + return; mr->entered = TRUE; if (ActiveMenu && mr == ActiveMenu->prev && RootFunction == 0) { @@ -2216,6 +2253,7 @@ HandleConfigureRequest() int x, y, width, height, bw; int gravx, gravy; XConfigureRequestEvent *cre = &Event.xconfigurerequest; + XPointer context_data; #ifdef DEBUG_EVENTS fprintf(stderr, "ConfigureRequest\n"); @@ -2238,9 +2276,10 @@ HandleConfigureRequest() * be wrong */ Event.xany.window = cre->window; /* mash parent field */ - if (XFindContext (dpy, cre->window, TwmContext, (caddr_t *) &Tmp_win) == - XCNOENT) - Tmp_win = NULL; + if (XFindContext (dpy, cre->window, TwmContext, &context_data) == 0) + Tmp_win = (TwmWindow *) context_data; + else + Tmp_win = NULL; /* @@ -2262,12 +2301,14 @@ HandleConfigureRequest() } if ((cre->value_mask & CWStackMode) && Tmp_win->stackmode) { - TwmWindow *otherwin; + TwmWindow *otherwin = NULL; + + if (cre->value_mask & CWSibling) { + if (XFindContext (dpy, cre->above, TwmContext, &context_data) == 0) + otherwin = (TwmWindow *) context_data; + } - xwc.sibling = (((cre->value_mask & CWSibling) && - (XFindContext (dpy, cre->above, TwmContext, - (caddr_t *) &otherwin) == XCSUCCESS)) - ? otherwin->frame : cre->above); + xwc.sibling = (otherwin != NULL) ? otherwin->frame : cre->above; xwc.stack_mode = cre->detail; XConfigureWindow (dpy, Tmp_win->frame, cre->value_mask & (CWSibling | CWStackMode), &xwc); diff --git a/src/menus.c b/src/menus.c index 26523d7..8d21644 100644 --- a/src/menus.c +++ b/src/menus.c @@ -474,6 +474,7 @@ UpdateMenu() int i, x, y, x_root, y_root, entry; int done; MenuItem *badItem = NULL; + XPointer context_data; fromMenu = TRUE; @@ -515,7 +516,8 @@ UpdateMenu() if (ActiveMenu && !ActiveMenu->entered) continue; - XFindContext(dpy, ActiveMenu->w, ScreenContext, (caddr_t *)&Scr); + if (XFindContext(dpy, ActiveMenu->w, ScreenContext, &context_data) == 0) + Scr = (struct ScreenInfo *) context_data; if (x < 0 || y < 0 || x >= ActiveMenu->width || y >= ActiveMenu->height) @@ -2663,21 +2665,22 @@ GetWMState (Window w, int *statep, Window *iwp) Atom actual_type; int actual_format; unsigned long nitems, bytesafter; - unsigned long *datap = NULL; + unsigned char *prop_return = NULL; Bool retval = False; if (XGetWindowProperty (dpy, w, _XA_WM_STATE, 0L, 2L, False, _XA_WM_STATE, &actual_type, &actual_format, &nitems, &bytesafter, - (unsigned char **) &datap) != Success || !datap) + &prop_return) != Success || !prop_return) return False; if (nitems <= 2) { /* "suggested" by ICCCM version 1 */ + unsigned long *datap = (unsigned long *) prop_return; *statep = (int) datap[0]; *iwp = (Window) datap[1]; retval = True; } - XFree ((char *) datap); + XFree (prop_return); return retval; } @@ -2847,13 +2850,17 @@ WarpAlongRing (XButtonEvent *ev, Bool forward) if (r && r != head) { TwmWindow *p = Scr->RingLeader, *t; + XPointer context_data; Scr->RingLeader = r; WarpToWindow (r); - if (p && p->mapped && - XFindContext (dpy, ev->window, TwmContext, (caddr_t *)&t) == XCSUCCESS && - p == t) { + if (XFindContext (dpy, ev->window, TwmContext, &context_data) == 0) + t = (TwmWindow *) context_data; + else + t = NULL; + + if (p && p->mapped && p == t) { p->ring.cursor_valid = True; p->ring.curs_x = ev->x_root - t->frame_x; p->ring.curs_y = ev->y_root - t->frame_y; diff --git a/src/parse.c b/src/parse.c index 1e2c6cb..1831d39 100644 --- a/src/parse.c +++ b/src/parse.c @@ -949,16 +949,19 @@ put_pixel_on_root(Pixel pixel) Atom pixelAtom, retAtom; int retFormat; unsigned long nPixels, retAfter; - Pixel *retProp; + unsigned char*retProp; + Pixel *pixelProp; pixelAtom = XInternAtom(dpy, "_MIT_PRIORITY_COLORS", True); XGetWindowProperty(dpy, Scr->Root, pixelAtom, 0, 8192, False, XA_CARDINAL, &retAtom, &retFormat, &nPixels, &retAfter, - (unsigned char **)&retProp); + &retProp); + pixelProp = (Pixel *) retProp; for (i=0; i< nPixels; i++) - if (pixel == retProp[i]) addPixel = 0; - + if (pixel == pixelProp[i]) + addPixel = 0; + if (addPixel) XChangeProperty (dpy, Scr->Root, _XA_MIT_PRIORITY_COLORS, XA_CARDINAL, 32, PropModeAppend, -- cgit v1.2.3