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);