[Xcb] [PATCH 2/2] If protocol is "unix", use a Unix domain socket, not TCP

Alan Coopersmith alan.coopersmith at oracle.com
Tue Apr 5 18:29:31 PDT 2011


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 at oracle.com>
---
 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..6167e3b 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
-- 
1.7.3.2



More information about the Xcb mailing list