diff options
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | src/XRes.c | 16 |
2 files changed, 20 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index 90205cc..f68b689 100644 --- a/configure.ac +++ b/configure.ac @@ -50,6 +50,12 @@ XORG_CHECK_MALLOC_ZERO # Obtain compiler/linker options for depedencies PKG_CHECK_MODULES(XRES, x11 xext xextproto [resourceproto >= 1.2.0]) +# Check for _XEatDataWords function that may be patched into older Xlib release +SAVE_LIBS="$LIBS" +LIBS="$XRES_LIBS" +AC_CHECK_FUNCS([_XEatDataWords]) +LIBS="$SAVE_LIBS" + AC_CONFIG_FILES([Makefile src/Makefile man/Makefile @@ -13,6 +13,18 @@ #include <X11/extensions/XResproto.h> #include <X11/extensions/XRes.h> #include <assert.h> +#include <limits.h> + +#ifndef HAVE__XEATDATAWORDS +static inline void _XEatDataWords(Display *dpy, unsigned long n) +{ +# ifndef LONG64 + if (n >= (ULONG_MAX >> 2)) + _XIOError(dpy); +# endif + _XEatData (dpy, n << 2); +} +#endif static XExtensionInfo _xres_ext_info_data; static XExtensionInfo *xres_ext_info = &_xres_ext_info_data; @@ -131,7 +143,7 @@ Status XResQueryClients ( *num_clients = rep.num_clients; result = 1; } else { - _XEatData(dpy, rep.length << 2); + _XEatDataWords(dpy, rep.length); } } @@ -183,7 +195,7 @@ Status XResQueryClientResources ( *num_types = rep.num_types; result = 1; } else { - _XEatData(dpy, rep.length << 2); + _XEatDataWords(dpy, rep.length); } } |