diff options
author | marha <marha@users.sourceforge.net> | 2009-06-28 22:07:26 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-06-28 22:07:26 +0000 |
commit | 3562e78743202e43aec8727005182a2558117eca (patch) | |
tree | 8f9113a77d12470c5c851a2a8e4cb02e89df7d43 /libX11/src/xcb_disp.c | |
download | vcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.gz vcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.bz2 vcxsrv-3562e78743202e43aec8727005182a2558117eca.zip |
Checked in the following released items:
xkeyboard-config-1.4.tar.gz
ttf-bitstream-vera-1.10.tar.gz
font-alias-1.0.1.tar.gz
font-sun-misc-1.0.0.tar.gz
font-sun-misc-1.0.0.tar.gz
font-sony-misc-1.0.0.tar.gz
font-schumacher-misc-1.0.0.tar.gz
font-mutt-misc-1.0.0.tar.gz
font-misc-misc-1.0.0.tar.gz
font-misc-meltho-1.0.0.tar.gz
font-micro-misc-1.0.0.tar.gz
font-jis-misc-1.0.0.tar.gz
font-isas-misc-1.0.0.tar.gz
font-dec-misc-1.0.0.tar.gz
font-daewoo-misc-1.0.0.tar.gz
font-cursor-misc-1.0.0.tar.gz
font-arabic-misc-1.0.0.tar.gz
font-winitzki-cyrillic-1.0.0.tar.gz
font-misc-cyrillic-1.0.0.tar.gz
font-cronyx-cyrillic-1.0.0.tar.gz
font-screen-cyrillic-1.0.1.tar.gz
font-xfree86-type1-1.0.1.tar.gz
font-adobe-utopia-type1-1.0.1.tar.gz
font-ibm-type1-1.0.0.tar.gz
font-bitstream-type1-1.0.0.tar.gz
font-bitstream-speedo-1.0.0.tar.gz
font-bh-ttf-1.0.0.tar.gz
font-bh-type1-1.0.0.tar.gz
font-bitstream-100dpi-1.0.0.tar.gz
font-bh-lucidatypewriter-100dpi-1.0.0.tar.gz
font-bh-100dpi-1.0.0.tar.gz
font-adobe-utopia-100dpi-1.0.1.tar.gz
font-adobe-100dpi-1.0.0.tar.gz
font-util-1.0.1.tar.gz
font-bitstream-75dpi-1.0.0.tar.gz
font-bh-lucidatypewriter-75dpi-1.0.0.tar.gz
font-adobe-utopia-75dpi-1.0.1.tar.gz
font-bh-75dpi-1.0.0.tar.gz
bdftopcf-1.0.1.tar.gz
font-adobe-75dpi-1.0.0.tar.gz
mkfontscale-1.0.6.tar.gz
openssl-0.9.8k.tar.gz
bigreqsproto-1.0.2.tar.gz
xtrans-1.2.2.tar.gz
resourceproto-1.0.2.tar.gz
inputproto-1.4.4.tar.gz
compositeproto-0.4.tar.gz
damageproto-1.1.0.tar.gz
zlib-1.2.3.tar.gz
xkbcomp-1.0.5.tar.gz
freetype-2.3.9.tar.gz
pthreads-w32-2-8-0-release.tar.gz
pixman-0.12.0.tar.gz
kbproto-1.0.3.tar.gz
evieext-1.0.2.tar.gz
fixesproto-4.0.tar.gz
recordproto-1.13.2.tar.gz
randrproto-1.2.2.tar.gz
scrnsaverproto-1.1.0.tar.gz
renderproto-0.9.3.tar.gz
xcmiscproto-1.1.2.tar.gz
fontsproto-2.0.2.tar.gz
xextproto-7.0.3.tar.gz
xproto-7.0.14.tar.gz
libXdmcp-1.0.2.tar.gz
libxkbfile-1.0.5.tar.gz
libfontenc-1.0.4.tar.gz
libXfont-1.3.4.tar.gz
libX11-1.1.5.tar.gz
libXau-1.0.4.tar.gz
libxcb-1.1.tar.gz
xorg-server-1.5.3.tar.gz
Diffstat (limited to 'libX11/src/xcb_disp.c')
-rw-r--r-- | libX11/src/xcb_disp.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/libX11/src/xcb_disp.c b/libX11/src/xcb_disp.c new file mode 100644 index 000000000..079c87ffa --- /dev/null +++ b/libX11/src/xcb_disp.c @@ -0,0 +1,110 @@ +/* Copyright (C) 2003-2006 Jamey Sharp, Josh Triplett + * This file is licensed under the MIT license. See the file COPYING. */ + +#include "Xlibint.h" +#include "Xxcbint.h" +#include <xcb/xcbext.h> +#include <X11/Xatom.h> +#include <X11/Xresource.h> +#include <stdio.h> + +static xcb_auth_info_t xauth; + +static void *alloc_copy(const void *src, int *dstn, size_t n) +{ + void *dst; + if(n <= 0) + { + *dstn = 0; + return 0; + } + dst = Xmalloc(n); + if(!dst) + return 0; + memcpy(dst, src, n); + *dstn = n; + return dst; +} + +void XSetAuthorization(char *name, int namelen, char *data, int datalen) +{ + _XLockMutex(_Xglobal_lock); + Xfree(xauth.name); + Xfree(xauth.data); + + /* if either of these allocs fail, _XConnectXCB won't use this auth + * data, so we don't need to check it here. */ + xauth.name = alloc_copy(name, &xauth.namelen, namelen); + xauth.data = alloc_copy(data, &xauth.datalen, datalen); + +#if 0 /* but, for the paranoid among us: */ + if((namelen > 0 && !xauth.name) || (datalen > 0 && !xauth.data)) + { + Xfree(xauth.name); + Xfree(xauth.data); + xauth.name = xauth.data = 0; + xauth.namelen = xauth.datalen = 0; + } +#endif + + _XUnlockMutex(_Xglobal_lock); +} + +int _XConnectXCB(Display *dpy, _Xconst char *display, char **fullnamep, int *screenp) +{ + char *host; + int n = 0; + int len; + xcb_connection_t *c; + + dpy->fd = -1; + + dpy->xcb = Xcalloc(1, sizeof(_X11XCBPrivate)); + if(!dpy->xcb) + return 0; + +#ifdef HAVE_LAUNCHD + if(!display || !*display) display = getenv("DISPLAY"); + + if(display && strlen(display)>11 && !strncmp(display, "/tmp/launch", 11)) { + /* do nothing -- the magic happens inside of xcb_connect */ + } else +#endif + { + if(!xcb_parse_display(display, &host, &n, screenp)) + return 0; + + len = strlen(host) + (1 + 20 + 1 + 20 + 1); + *fullnamep = Xmalloc(len); + snprintf(*fullnamep, len, "%s:%d.%d", host, n, *screenp); + free(host); + } + + _XLockMutex(_Xglobal_lock); + if(xauth.name && xauth.data) + c = xcb_connect_to_display_with_auth_info(display, &xauth, 0); + else + c = xcb_connect(display, 0); + _XUnlockMutex(_Xglobal_lock); + + dpy->fd = xcb_get_file_descriptor(c); + + dpy->xcb->connection = c; + dpy->xcb->pending_requests_tail = &dpy->xcb->pending_requests; + dpy->xcb->next_xid = xcb_generate_id(dpy->xcb->connection); + + return !xcb_connection_has_error(c); +} + +void _XFreeX11XCBStructure(Display *dpy) +{ + /* reply_data was allocated by system malloc, not Xmalloc */ + free(dpy->xcb->reply_data); + while(dpy->xcb->pending_requests) + { + PendingRequest *tmp = dpy->xcb->pending_requests; + dpy->xcb->pending_requests = tmp->next; + free(tmp); + } + Xfree(dpy->xcb); +} |