From 5444424562781a0a40559db40dfe9b97286dc9da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?RALOVICH=2C=20Krist=C3=B3f?= Date: Sat, 18 Oct 2008 16:53:08 +0200 Subject: glx: implement __glXQueryServerString using XCB --- src/glx/x11/glx_query.c | 31 +++++++++++++++++++++++++++++++ src/glx/x11/glxclient.h | 4 ++++ 2 files changed, 35 insertions(+) diff --git a/src/glx/x11/glx_query.c b/src/glx/x11/glx_query.c index 56f3495186..ef33f7c403 100644 --- a/src/glx/x11/glx_query.c +++ b/src/glx/x11/glx_query.c @@ -31,6 +31,12 @@ #include "glxclient.h" +#if defined(USE_XCB) +# include +# include +# include +#endif + /** * GLX protocol structure for the ficticious "GXLGenericGetString" request. * @@ -101,3 +107,28 @@ __glXGetStringFromServer(Display * dpy, int opcode, CARD32 glxCode, return buf; } + +#ifdef USE_XCB +char * +__glXQueryServerString(Display* dpy, + CARD32 screen, + CARD32 name) +{ + xcb_connection_t *c = XGetXCBConnection(dpy); + xcb_glx_query_server_string_reply_t* reply = + xcb_glx_query_server_string_reply(c, + xcb_glx_query_server_string(c, + screen, + name), + NULL); + + /* The spec doesn't mention this, but the Xorg server replies with + * a string already terminated with '\0'. */ + uint32_t len = xcb_glx_query_server_string_string_length(reply); + char* buf = Xmalloc(len); + memcpy(buf, xcb_glx_query_server_string_string(reply), len); + free(reply); + + return buf; +} +#endif /* USE_XCB */ diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h index 02e8750c97..8f1e69154a 100644 --- a/src/glx/x11/glxclient.h +++ b/src/glx/x11/glxclient.h @@ -742,6 +742,10 @@ extern void __glXInitializeVisualConfigFromTags( __GLcontextModes *config, extern char * __glXGetStringFromServer( Display * dpy, int opcode, CARD32 glxCode, CARD32 for_whom, CARD32 name ); +#ifdef USE_XCB +extern char * __glXQueryServerString(Display* dpy, CARD32 screen, CARD32 name); +#endif + extern char *__glXstrdup(const char *str); -- cgit v1.2.3