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 <[email protected]>
---

Only lightly tested, since I'm not a normal twm user.

 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,  
-- 
1.7.3.2

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to