diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-09-05 14:03:19 -0700 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-09-06 14:06:06 -0700 |
commit | 7ece2cb220e4fe2c9a8c4c62361522a45adf22c1 (patch) | |
tree | b1dab057e501bfd7c84af268467b44ef941806cb | |
parent | 1747120043cc5b5d201b7efd06b75ef08b032922 (diff) |
XQuartz: pbproxy: 64bit fixes: Properly process an array of Atoms
(cherry picked from commit 1b659cda1af02762a31cc7875e457b08c8dc68b5)
-rw-r--r-- | hw/xquartz/pbproxy/x-selection.h | 1 | ||||
-rw-r--r-- | hw/xquartz/pbproxy/x-selection.m | 14 |
2 files changed, 8 insertions, 7 deletions
diff --git a/hw/xquartz/pbproxy/x-selection.h b/hw/xquartz/pbproxy/x-selection.h index d5bfcb5e7..fc903d0af 100644 --- a/hw/xquartz/pbproxy/x-selection.h +++ b/hw/xquartz/pbproxy/x-selection.h @@ -41,6 +41,7 @@ struct propdata { unsigned char *data; size_t length; + int format; }; struct atom_list { diff --git a/hw/xquartz/pbproxy/x-selection.m b/hw/xquartz/pbproxy/x-selection.m index cd540be98..4f2d848fb 100644 --- a/hw/xquartz/pbproxy/x-selection.m +++ b/hw/xquartz/pbproxy/x-selection.m @@ -77,7 +77,7 @@ static struct { @implementation x_selection -static struct propdata null_propdata = {NULL, 0}; +static struct propdata null_propdata = {NULL, 0, 0}; #ifdef DEBUG static void @@ -212,6 +212,7 @@ get_property(Window win, Atom property, struct propdata *pdata, Bool delete, Ato pdata->data = buf; pdata->length = buflen; + pdata->format = format; return /*success*/ False; } @@ -223,21 +224,20 @@ get_property(Window win, Atom property, struct propdata *pdata, Bool delete, Ato - (Atom) find_preferred:(struct propdata *)pdata { Atom a = None; - size_t i; + size_t i, step; Bool png = False, jpeg = False, utf8 = False, string = False; TRACE (); - if (pdata->length % sizeof (a)) + if (pdata->format != 32) { - fprintf(stderr, "Atom list is not a multiple of the size of an atom!\n"); + fprintf(stderr, "Atom list is expected to be formatted as an array of 32bit values.\n"); return None; } - for (i = 0; i < pdata->length; i += sizeof (a)) + for (i = 0, step = pdata->format >> 3; i < pdata->length; i += step) { - a = None; - memcpy (&a, pdata->data + i, sizeof (a)); + a = (Atom)*(uint32_t *)(pdata->data + i); if (a == atoms->image_png) { |