summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@oracle.com>2011-04-04 21:36:47 -0700
committerAlan Coopersmith <alan.coopersmith@oracle.com>2011-04-12 13:01:03 -0700
commitb64cd0df884e7901ff13def0272df74962035920 (patch)
treee6dc8347cbd6623090c26590cd7e25db0998fb8f
parentb027922ebf1931885e00629c20e26f14f184998d (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.c14
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