X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_util.c;h=f17aa3c8419b31540610c6ed1da5401135e63c3d;hb=cc7fab2d5e912629d4a2a6adfb7666dc2ba45db2;hp=fcb11f0429e6673c0148c52abe504314b34e50b2;hpb=163c47bdc0d32785d831e4c93fea9ab7e023446b;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_util.c b/src/xcb_util.c index fcb11f0..f17aa3c 100644 --- a/src/xcb_util.c +++ b/src/xcb_util.c @@ -34,11 +34,11 @@ #include #include #include -#include #ifdef _WIN32 #include "xcb_windefs.h" #else +#include #include #include #include @@ -235,6 +235,11 @@ static int _xcb_open(const char *host, char *protocol, const int display) fd = _xcb_open_unix(protocol, file); free(file); + if (fd < 0 && !protocol && *host == '\0') { + unsigned short port = X_TCP_PORT + display; + fd = _xcb_open_tcp(host, protocol, port); + } + return fd; #endif /* !_WIN32 */ return -1; /* if control reaches here then something has gone wrong */ @@ -424,13 +429,24 @@ xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname, int parsed = _xcb_parse_display(displayname, &host, &protocol, &display, screenp); if(!parsed) { - c = (xcb_connection_t *) &error_connection; + c = _xcb_conn_ret_error(XCB_CONN_CLOSED_PARSE_ERR); goto out; - } else + } else { +#ifdef _WIN32 + WSADATA wsaData; + if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { + c = _xcb_conn_ret_error(XCB_CONN_ERROR); + goto out; + } +#endif fd = _xcb_open(host, protocol, display); + } if(fd == -1) { - c = (xcb_connection_t *) &error_connection; + c = _xcb_conn_ret_error(XCB_CONN_ERROR); +#ifdef _WIN32 + WSACleanup(); +#endif goto out; }