From 7ece2cb220e4fe2c9a8c4c62361522a45adf22c1 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Sat, 5 Sep 2009 14:03:19 -0700 Subject: XQuartz: pbproxy: 64bit fixes: Properly process an array of Atoms (cherry picked from commit 1b659cda1af02762a31cc7875e457b08c8dc68b5) --- hw/xquartz/pbproxy/x-selection.h | 1 + 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) { -- cgit v1.2.3