Hi,

this is a minimal patch to fix the most visible issues on 64 bits architectures (problems caused by the weird XGetProperty() API).

There are more similar problems in the code, but my previous attempt (for Windowmaker 0.91) to fix them all at once by more or less brute force introduced some bugs. This patch is pretty straightforward and is enoiugh to have Windowmaker work for some time without crashing on my amd64.

--
                                        Matthieu
? log
Index: patches/patch-src_wmspec_c
===================================================================
RCS file: patches/patch-src_wmspec_c
diff -N patches/patch-src_wmspec_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_wmspec_c  5 Nov 2005 11:13:52 -0000
@@ -0,0 +1,77 @@
+$OpenBSD$
+--- src/wmspec.c~      Sun May 15 18:41:09 2005
++++ src/wmspec.c       Sat Nov  5 11:35:59 2005
+@@ -322,14 +322,14 @@
+ void
+ wNETWMUpdateDesktop(WScreen *scr)
+ {
+-    CARD32 *views, sizes[2];
++    long *views, sizes[2];
+     int count, i;
+ 
+     if (scr->workspace_count==0)
+         return;
+ 
+     count = scr->workspace_count * 2;
+-    views = wmalloc(sizeof(CARD32) * count);
++    views = wmalloc(sizeof(long) * count);
+     /*memset(views, 0, sizeof(CARD32) * count);*/
+ 
+ #ifdef VIRTUAL_DESKTOP
+@@ -487,7 +487,7 @@
+ static void
+ updateShowDesktop(WScreen * scr, Bool show)
+ {
+-    CARD32 foo;
++    long foo;
+ 
+     foo = (show == True);
+     XChangeProperty(dpy, scr->root_win, net_showing_desktop, XA_CARDINAL, 32,
+@@ -660,7 +660,7 @@
+ void
+ wNETWMUpdateWorkarea(WScreen *scr, WArea usableArea)
+ {
+-    CARD32 *area;
++    long *area;
+     int count, i;
+ 
+     /* XXX: not Xinerama compatible,
+@@ -670,9 +670,9 @@
+         return;
+ 
+     count = scr->workspace_count * 4;
+-    area = wmalloc(sizeof(CARD32) * count);
++    area = wmalloc(sizeof(long) * count);
+     for (i=0; i<scr->workspace_count; i++) {
+-        area[4*i + 0] = usableArea.x1;
++      area[4*i + 0] = usableArea.x1;
+         area[4*i + 1] = usableArea.y1;
+         area[4*i + 2] = usableArea.x2 - usableArea.x1;
+         area[4*i + 3] = usableArea.y2 - usableArea.y1;
+@@ -793,7 +793,7 @@
+ static void
+ updateWorkspaceCount(WScreen *scr) /* changeable */
+ {
+-    CARD32 count;
++    long count;
+ 
+     count = scr->workspace_count;
+ 
+@@ -805,7 +805,7 @@
+ static void
+ updateCurrentWorkspace(WScreen *scr) /* changeable */
+ {
+-    CARD32 count;
++    long count;
+ 
+     count = scr->current_workspace;
+ 
+@@ -852,7 +852,7 @@
+ static void
+ updateWorkspaceHint(WWindow *wwin, Bool fake, Bool del)
+ {
+-    CARD32 l;
++    long l;
+ 
+     if (del) {
+         XDeleteProperty(dpy, wwin->client_win, net_wm_desktop);

Reply via email to