summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xcb_conn.c4
-rw-r--r--src/xcb_util.c13
2 files changed, 16 insertions, 1 deletions
diff --git a/src/xcb_conn.c b/src/xcb_conn.c
index f79de33..725502a 100644
--- a/src/xcb_conn.c
+++ b/src/xcb_conn.c
@@ -315,6 +315,10 @@ void xcb_disconnect(xcb_connection_t *c)
_xcb_xid_destroy(c);
free(c);
+
+#ifdef _WIN32
+ WSACleanup();
+#endif
}
/* Private interface */
diff --git a/src/xcb_util.c b/src/xcb_util.c
index 64a1f6d..9329b81 100644
--- a/src/xcb_util.c
+++ b/src/xcb_util.c
@@ -426,11 +426,22 @@ xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname,
if(!parsed) {
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_connection_t *) &error_connection;
+ goto out;
+ }
+#endif
fd = _xcb_open(host, protocol, display);
+ }
if(fd == -1) {
c = _xcb_conn_ret_error(XCB_CONN_ERROR);
+#ifdef _WIN32
+ WSACleanup();
+#endif
goto out;
}