diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2011-04-04 21:36:47 -0700 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@oracle.com> | 2011-04-12 13:01:03 -0700 |
commit | b64cd0df884e7901ff13def0272df74962035920 (patch) | |
tree | e6dc8347cbd6623090c26590cd7e25db0998fb8f | |
parent | b027922ebf1931885e00629c20e26f14f184998d (diff) |
If protocol is "unix", use a Unix domain socket, not TCP
Fixes fallback to local connections from Xlib's XOpenDisplay(), which
will try with protocol "unix" if a hostname is specified and tcp fails
(as it usually will now that most OS'es ship with -nolisten tcp enabled).
Also fixes explicitly specifying DISPLAY as "unix/foo:0", which Xlib
previously accepted for Unix domain sockets.
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r-- | src/xcb_util.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/xcb_util.c b/src/xcb_util.c index 818746b..fde4f85 100644 --- a/src/xcb_util.c +++ b/src/xcb_util.c @@ -178,15 +178,13 @@ static int _xcb_open(const char *host, char *protocol, const int display) } #endif - if(*host || protocol) + /* If protocol or host is "unix", fall through to Unix socket code below */ + if ((!protocol || (strcmp("unix",protocol) != 0)) && + (*host != '\0') && (strcmp("unix",host) != 0)) { - if (protocol - || strcmp("unix",host)) { /* follow the old unix: rule */ - - /* display specifies TCP */ - unsigned short port = X_TCP_PORT + display; - return _xcb_open_tcp(host, protocol, port); - } + /* display specifies TCP */ + unsigned short port = X_TCP_PORT + display; + return _xcb_open_tcp(host, protocol, port); } #ifndef _WIN32 |