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