Commit | Line | Data |
---|---|---|
2e88e089 AK |
1 | Description: Correct 64 Architecture implementation of 32 bit data |
2 | Author: Chris Donoghue <cdonoghu@gmail.com> | |
3 | Bug-Debian: http://bugs.debian.org/362068 | |
4 | ||
5 | --- wmctrl-1.07.orig/main.c | |
6 | +++ wmctrl-1.07/main.c | |
7 | @@ -1425,6 +1425,16 @@ static gchar *get_property (Display *dis | |
8 | * | |
9 | * long_length = Specifies the length in 32-bit multiples of the | |
10 | * data to be retrieved. | |
11 | + * | |
12 | + * NOTE: see | |
13 | + * http://mail.gnome.org/archives/wm-spec-list/2003-March/msg00067.html | |
14 | + * In particular: | |
15 | + * | |
16 | + * When the X window system was ported to 64-bit architectures, a | |
17 | + * rather peculiar design decision was made. 32-bit quantities such | |
18 | + * as Window IDs, atoms, etc, were kept as longs in the client side | |
19 | + * APIs, even when long was changed to 64 bits. | |
20 | + * | |
21 | */ | |
22 | if (XGetWindowProperty(disp, win, xa_prop_name, 0, MAX_PROPERTY_VALUE_LEN / 4, False, | |
23 | xa_prop_type, &xa_ret_type, &ret_format, | |
24 | @@ -1441,6 +1451,8 @@ static gchar *get_property (Display *dis | |
25 | ||
26 | /* null terminate the result to make string handling easier */ | |
27 | tmp_size = (ret_format / 8) * ret_nitems; | |
28 | + /* Correct 64 Architecture implementation of 32 bit data */ | |
29 | + if(ret_format==32) tmp_size *= sizeof(long)/4; | |
30 | ret = g_malloc(tmp_size + 1); | |
31 | memcpy(ret, ret_prop, tmp_size); | |
32 | ret[tmp_size] = '\0'; |