From 5eb1147cc32d59c2f3490d38918e386676eac94b Mon Sep 17 00:00:00 2001 From: Kusanagi Kouichi Date: Wed, 14 Dec 2011 02:17:55 -0500 Subject: XQueryColors: Split a request into multiple requests if necessary https://bugs.freedesktop.org/show_bug.cgi?id=9160 Signed-off-by: Kusanagi Kouichi Signed-off-by: James Cloos Backported-to-NX-by: Ulrich Sibiller --- nx-X11/lib/X11/QuColors.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'nx-X11/lib') diff --git a/nx-X11/lib/X11/QuColors.c b/nx-X11/lib/X11/QuColors.c index a8bc8837b..7937f5e5a 100644 --- a/nx-X11/lib/X11/QuColors.c +++ b/nx-X11/lib/X11/QuColors.c @@ -29,8 +29,8 @@ in this Software without prior written authorization from The Open Group. #endif #include "Xlibint.h" -int -XQueryColors( +static void +_XQueryColors( register Display *dpy, Colormap cmap, XColor *defs, /* RETURN */ @@ -40,11 +40,10 @@ XQueryColors( xQueryColorsReply rep; register xQueryColorsReq *req; - LockDisplay(dpy); GetReq(QueryColors, req); req->cmap = cmap; - req->length += ncolors; /* each pixel is a CARD32 */ + SetReqLen(req, ncolors, ncolors); /* each pixel is a CARD32 */ for (i = 0; i < ncolors; i++) Data32 (dpy, (long *)&defs[i].pixel, 4L); @@ -70,6 +69,30 @@ XQueryColors( else _XEatDataWords(dpy, rep.length); } +} + +int +XQueryColors( + register Display * const dpy, + const Colormap cmap, + XColor *defs, /* RETURN */ + int ncolors) +{ + int n; + + if (dpy->bigreq_size > 0) + n = dpy->bigreq_size - (sizeof (xQueryColorsReq) >> 2) - 1; + else + n = dpy->max_request_size - (sizeof (xQueryColorsReq) >> 2); + + LockDisplay(dpy); + while (ncolors >= n) { + _XQueryColors(dpy, cmap, defs, n); + defs += n; + ncolors -= n; + } + if (ncolors > 0) + _XQueryColors(dpy, cmap, defs, ncolors); UnlockDisplay(dpy); SyncHandle(); return 1; -- cgit v1.2.3