diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2016-06-30 00:26:37 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2016-06-30 00:26:37 +0200 |
commit | 5b36f6443a1186d482ae1044b826c9fd67624c31 (patch) | |
tree | 9b93ee34b76bd2e5eac7aabcb7217c6533cd1a78 /nx-X11/lib/X11/XlibInt.c | |
parent | 3314c24a786e8e8bfad3c9ebfdf272839cb4e7e1 (diff) | |
parent | bd2650ca0b17c8a8fc2bc278a998e10893d8147c (diff) | |
download | nx-libs-5b36f6443a1186d482ae1044b826c9fd67624c31.tar.gz nx-libs-5b36f6443a1186d482ae1044b826c9fd67624c31.tar.bz2 nx-libs-5b36f6443a1186d482ae1044b826c9fd67624c31.zip |
Merge branch 'sunweaver-pr/backport-xgetrequest-and-xeatdatawords' into 3.6.x
Attributes GH PR #170: https://github.com/ArcticaProject/nx-libs/pull/170
Diffstat (limited to 'nx-X11/lib/X11/XlibInt.c')
-rw-r--r-- | nx-X11/lib/X11/XlibInt.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/nx-X11/lib/X11/XlibInt.c b/nx-X11/lib/X11/XlibInt.c index 49535fe18..175f5b92f 100644 --- a/nx-X11/lib/X11/XlibInt.c +++ b/nx-X11/lib/X11/XlibInt.c @@ -2751,6 +2751,30 @@ void _XEatData( #undef SCRATCHSIZE } +/* + Port from libXfixes commit + b031e3b60fa1af9e49449f23d4a84395868be3ab We need this here to + enable linking of current libXrender against libNX_X11 instead of + the system's libX11 + + The original implementation of this function (libX11 commit + 9f5d83706543696fc944c1835a403938c06f2cc5) uses xcb stuff which we + do not have in libNX_X11. So we take a workaround from another + lib. This workaround had been implemented temporarily in a couple + of X libs, see e.g. https://lists.x.org/archives/xorg-devel/2013-July/036763.html. +*/ +#include <X11/Xmd.h> /* for LONG64 on 64-bit platforms */ +#include <limits.h> + +void _XEatDataWords(Display *dpy, unsigned long n) +{ +#ifndef LONG64 + if (n >= (ULONG_MAX >> 2)) + _XIOError(dpy); +#endif + _XEatData (dpy, n << 2); +} + /* * _XEnq - Place event packets on the display's queue. @@ -3732,6 +3756,36 @@ Screen *_XScreenOfWindow (dpy, w) return NULL; } +/* + * WARNING: This implementation's pre-conditions and post-conditions + * must remain compatible with the old macro-based implementations of + * GetReq, GetReqExtra, GetResReq, and GetEmptyReq. The portions of the + * Display structure affected by those macros are part of libX11's + * ABI. + */ +void *_XGetRequest(Display *dpy, CARD8 type, size_t len) +{ + xReq *req; + + WORD64ALIGN + + if (dpy->bufptr + len > dpy->bufmax) + _XFlush(dpy); + + if (len % 4) + fprintf(stderr, + "Xlib: request %d length %zd not a multiple of 4.\n", + type, len); + + dpy->last_req = dpy->bufptr; + + req = (xReq*)dpy->bufptr; + req->reqType = type; + req->length = len / 4; + dpy->bufptr += len; + dpy->request++; + return req; +} #if defined(WIN32) |