summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Pavlik <rpavlik@iastate.edu>2012-01-11 18:06:50 +0100
committerJulien Danjou <julien@danjou.info>2012-01-11 18:07:12 +0100
commit31b57676e8d7ab6048dbfb145187833fac5e478c (patch)
treeed63d3cbea86581cff154f9e226200b8281f394f
parent0e9246def562be97cc816f824f702233a826ec56 (diff)
downloadxcb-libxcb-31b57676e8d7ab6048dbfb145187833fac5e478c.tar.gz
Use WSAStartup()/WSACleanup() on WIN32
The alternative is to use these in every WIN32 application which uses xcb. Doing it this way should be safe, as, according to MSDN, "There must be a call to WSACleanup for each successful call to WSAStartup. Only the final WSACleanup function call performs the actual cleanup. The preceding calls simply decrement an internal reference count" (We should probably also include ws2_32 in Libs.private for libxcb, as anything which links with libxcb will also need that, but there seems to be some pkg-config issues to resolve first...) v2: Check for errors so WSAStartup()/WSACleanup() uses are balanced v3: Use same indentation style as surrounding code Reviewed-by: Peter Harris <pharris@opentext.com> Signed-off-by: Julien Danjou <julien@danjou.info>
-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;
}