aboutsummaryrefslogtreecommitdiff
path: root/libxcb
diff options
context:
space:
mode:
Diffstat (limited to 'libxcb')
-rw-r--r--libxcb/src/c_client.py3
-rw-r--r--libxcb/src/config.h80
-rw-r--r--libxcb/src/dummyin6.h173
-rw-r--r--libxcb/src/makefile114
-rw-r--r--libxcb/src/xcb.h10
-rw-r--r--libxcb/src/xcb_auth.c13
-rw-r--r--libxcb/src/xcb_conn.c54
-rw-r--r--libxcb/src/xcb_in.c44
-rw-r--r--libxcb/src/xcb_out.c1
-rw-r--r--libxcb/src/xcb_util.c24
-rw-r--r--libxcb/src/xcbext.h2
-rw-r--r--libxcb/src/xcbint.h1
12 files changed, 512 insertions, 7 deletions
diff --git a/libxcb/src/c_client.py b/libxcb/src/c_client.py
index d86d05e24..a18072258 100644
--- a/libxcb/src/c_client.py
+++ b/libxcb/src/c_client.py
@@ -162,6 +162,7 @@ def c_open(self):
_c('#include <assert.h>')
_c('#include "xcbext.h"')
_c('#include "%s.h"', _ns.header)
+ _c('#include <X11/Xtrans/Xtrans.h>')
if _ns.is_ext:
for (n, h) in self.imports:
@@ -1015,7 +1016,7 @@ except getopt.GetoptError, err:
for (opt, arg) in opts:
if opt == '-p':
- sys.path.append(arg)
+ sys.path.insert(0,arg)
# Import the module class
try:
diff --git a/libxcb/src/config.h b/libxcb/src/config.h
new file mode 100644
index 000000000..6c701936c
--- /dev/null
+++ b/libxcb/src/config.h
@@ -0,0 +1,80 @@
+/* src/config.h.in. Generated from configure.ac by autoheader. */
+
+/* Defined if GCC supports the visibility feature */
+#undef GCC_HAS_VISIBILITY
+
+/* Has Wraphelp.c needed for XDM AUTH protocols */
+#undef HASXDMAUTH
+
+/* Define if your platform supports abstract sockets */
+#undef HAVE_ABSTRACT_SOCKETS
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* launchd support available */
+#undef HAVE_LAUNCHD
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Have the sockaddr_un.sun_len member. */
+#undef HAVE_SOCKADDR_SUN_LEN
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* poll() function is available */
+#undef USE_POLL
+
+/* Version number of package */
+#undef VERSION
+
+/* XCB buffer queue size */
+#define XCB_QUEUE_BUFFER_SIZE 4096
diff --git a/libxcb/src/dummyin6.h b/libxcb/src/dummyin6.h
new file mode 100644
index 000000000..90e879baf
--- /dev/null
+++ b/libxcb/src/dummyin6.h
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2001, 2003 Motoyuki Kasahara
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef DUMMYIN6_H
+#define DUMMYIN6_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+
+#ifndef _MSC_VER
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#else
+typedef unsigned short sa_family_t;
+typedef unsigned short in_port_t;
+#endif
+
+#ifndef AF_INET6
+#define AF_INET6 (AF_INET + 1)
+#endif
+
+#ifndef PF_INET6
+#define PF_INET6 (PF_INET + 1)
+#endif
+
+#ifndef AF_UNSPEC
+#define AF_UNSPEC AF_INET
+#endif
+
+#ifndef PF_UNSPEC
+#define PF_UNSPEC PF_INET
+#endif
+
+#ifndef INET6_ADDRSTRLEN
+#define INET6_ADDRSTRLEN 46
+#endif
+
+#ifndef INET_ADDRSTRLEN
+#define INET_ADDRSTRLEN 16
+#endif
+
+#ifndef HAVE_STRUCT_IN6_ADDR
+struct in6_addr {
+ unsigned char s6_addr[16];
+};
+#endif
+
+#ifndef HAVE_STRUCT_SOCKADDR_IN6
+struct sockaddr_in6 {
+ sa_family_t sin6_family;
+ in_port_t sin6_port;
+ unsigned long sin6_flowinfo;
+ struct in6_addr sin6_addr;
+ unsigned long sin6_scope_id;
+};
+#endif
+
+#if !defined(HAVE_STRUCT_SOCKADDR_STORAGE) && !defined(sockaddr_storage)
+#define sockaddr_storage sockaddr_in
+#endif
+
+#ifndef IN6ADDR_ANY_DECLARED
+extern const struct in6_addr in6addr_any;
+#endif
+
+#ifndef IN6ADDR_LOOPBACK_DECLARED
+extern const struct in6_addr in6addr_loopback;
+#endif
+
+#ifndef IN6ADDR_ANY_INIT
+#define IN6ADDR_ANY_INIT \
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}
+#endif
+
+#ifndef IN6ADDR_LOOPBACK_INIT
+#define IN6ADDR_LOOPBACK_INIT \
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}
+#endif
+
+#ifndef IN6_IS_ADDR_UNSPECIFIED
+#define IN6_IS_ADDR_UNSPECIFIED(a) \
+ ( (a)->s6_addr[ 0] == 0 && (a)->s6_addr[ 1] == 0 \
+ && (a)->s6_addr[ 2] == 0 && (a)->s6_addr[ 3] == 0 \
+ && (a)->s6_addr[ 4] == 0 && (a)->s6_addr[ 5] == 0 \
+ && (a)->s6_addr[ 6] == 0 && (a)->s6_addr[ 7] == 0 \
+ && (a)->s6_addr[ 8] == 0 && (a)->s6_addr[ 9] == 0 \
+ && (a)->s6_addr[10] == 0 && (a)->s6_addr[11] == 0 \
+ && (a)->s6_addr[12] == 0 && (a)->s6_addr[13] == 0 \
+ && (a)->s6_addr[14] == 0 && (a)->s6_addr[15] == 0)
+#endif
+
+#ifndef IN6_IS_ADDR_LOOPBACK
+#define IN6_IS_ADDR_LOOPBACK(a) \
+ ( (a)->s6_addr[ 0] == 0 && (a)->s6_addr[ 1] == 0 \
+ && (a)->s6_addr[ 2] == 0 && (a)->s6_addr[ 3] == 0 \
+ && (a)->s6_addr[ 4] == 0 && (a)->s6_addr[ 5] == 0 \
+ && (a)->s6_addr[ 6] == 0 && (a)->s6_addr[ 7] == 0 \
+ && (a)->s6_addr[ 8] == 0 && (a)->s6_addr[ 9] == 0 \
+ && (a)->s6_addr[10] == 0 && (a)->s6_addr[11] == 0 \
+ && (a)->s6_addr[12] == 0 && (a)->s6_addr[13] == 0 \
+ && (a)->s6_addr[14] == 0 && (a)->s6_addr[15] == 1)
+#endif
+
+#ifndef IN6_IS_ADDR_MULTICAST
+#define IN6_IS_ADDR_MULTICAST(a) \
+ ((a)->s6_addr[0] == 0xff)
+#endif
+
+#ifndef IN6_IS_ADDR_LINKLOCAL
+#define IN6_IS_ADDR_LINKLOCAL(a) \
+ (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
+#endif
+
+#ifndef IN6_IS_ADDR_SITELOCAL
+#define IN6_IS_ADDR_SITELOCAL(a) \
+ (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0xc0))
+#endif
+
+#ifndef IN6_IS_ADDR_V4MAPPED
+#define IN6_IS_ADDR_V4MAPPED(a) \
+ ( (a)->s6_addr[ 0] == 0 && (a)->s6_addr[ 1] == 0 \
+ && (a)->s6_addr[ 2] == 0 && (a)->s6_addr[ 3] == 0 \
+ && (a)->s6_addr[ 4] == 0 && (a)->s6_addr[ 5] == 0 \
+ && (a)->s6_addr[ 6] == 0 && (a)->s6_addr[ 7] == 0 \
+ && (a)->s6_addr[ 8] == 0 && (a)->s6_addr[ 9] == 0 \
+ && (a)->s6_addr[10] == 0xff && (a)->s6_addr[11] == 0xff)
+#endif
+
+#ifndef IN6_IS_ADDR_V4COMPAT
+#define IN6_IS_ADDR_V4COMPAT(a) \
+ ( (a)->s6_addr[ 0] == 0 && (a)->s6_addr[ 1] == 0 \
+ && (a)->s6_addr[ 2] == 0 && (a)->s6_addr[ 3] == 0 \
+ && (a)->s6_addr[ 4] == 0 && (a)->s6_addr[ 5] == 0 \
+ && (a)->s6_addr[ 6] == 0 && (a)->s6_addr[ 7] == 0 \
+ && (a)->s6_addr[ 8] == 0 && (a)->s6_addr[ 9] == 0 \
+ && (a)->s6_addr[10] == 0 && (a)->s6_addr[11] == 0 \
+ && ((a)->s6_addr[12] != 0 || (a)->s6_addr[13] != 0 \
+ || (a)->s6_addr[14] != 0 \
+ || ((a)->s6_addr[15] != 0 && (a)->s6_addr[15] != 1)))
+#endif
+
+#endif /* not DUMMYIN6_H */
diff --git a/libxcb/src/makefile b/libxcb/src/makefile
new file mode 100644
index 000000000..fe7b3410e
--- /dev/null
+++ b/libxcb/src/makefile
@@ -0,0 +1,114 @@
+XCBPROTO_XCBPYTHONDIR = ..\xcb-proto
+XCBPROTO_XCBINCLUDEDIR = ..\xcb-proto\src
+
+LIBRARY=libxcb
+
+CSRCS = \
+ xcb_conn.c xcb_out.c xcb_in.c xcb_ext.c xcb_xid.c \
+ xcb_list.c xcb_util.c xcb_auth.c \
+ xproto.c bigreq.c xc_misc.c
+
+# FIXME: find a way to autogenerate this from the XML files.
+
+EXTHEADERS += composite.h
+EXTSOURCES += composite.c
+EXTENSION_XML += composite.xml
+
+EXTHEADERS += damage.h
+EXTSOURCES += damage.c
+EXTENSION_XML += damage.xml
+
+EXTHEADERS += dpms.h
+EXTSOURCES += dpms.c
+EXTENSION_XML += dpms.xml
+
+EXTHEADERS += glx.h
+EXTSOURCES += glx.c
+EXTENSION_XML += glx.xml
+
+EXTHEADERS += randr.h
+EXTSOURCES += randr.c
+EXTENSION_XML += randr.xml
+
+EXTHEADERS += record.h
+EXTSOURCES += record.c
+EXTENSION_XML += record.xml
+
+EXTHEADERS += render.h
+EXTSOURCES += render.c
+EXTENSION_XML += render.xml
+
+EXTHEADERS += res.h
+EXTSOURCES += res.c
+EXTENSION_XML += res.xml
+
+EXTHEADERS += screensaver.h
+EXTSOURCES += screensaver.c
+EXTENSION_XML += screensaver.xml
+
+EXTHEADERS += shape.h
+EXTSOURCES += shape.c
+EXTENSION_XML += shape.xml
+
+EXTHEADERS += shm.h
+EXTSOURCES += shm.c
+EXTENSION_XML += shm.xml
+
+EXTHEADERS += sync.h
+EXTSOURCES += sync.c
+EXTENSION_XML += sync.xml
+
+EXTHEADERS += xevie.h
+EXTSOURCES += xevie.c
+EXTENSION_XML += xevie.xml
+
+EXTHEADERS += xf86dri.h
+EXTSOURCES += xf86dri.c
+EXTENSION_XML += xf86dri.xml
+
+EXTHEADERS += xfixes.h
+EXTSOURCES += xfixes.c
+EXTENSION_XML += xfixes.xml
+
+EXTHEADERS += xinerama.h
+EXTSOURCES += xinerama.c
+EXTENSION_XML += xinerama.xml
+
+EXTHEADERS += xinput.h
+EXTSOURCES += xinput.c
+EXTENSION_XML += xinput.xml
+
+EXTHEADERS += xprint.h
+EXTSOURCES += xprint.c
+EXTENSION_XML += xprint.xml
+
+EXTHEADERS += xselinux.h
+EXTSOURCES += xselinux.c
+EXTENSION_XML += xselinux.xml
+
+EXTHEADERS += xtest.h
+EXTSOURCES += xtest.c
+EXTENSION_XML += xtest.xml
+
+EXTHEADERS += xv.h
+EXTSOURCES += xv.c
+EXTENSION_XML += xv.xml
+
+EXTHEADERS += xvmc.h
+EXTSOURCES += xvmc.c
+EXTENSION_XML += xvmc.xml
+
+DEFINES += PTW32_STATIC_LIB
+
+BUILT_SOURCES = $(EXTSOURCES) $(EXTHEADERS)
+
+CSRCS += $(EXTSOURCES)
+
+$(EXTHEADERS) $(EXTSOURCES): c_client.py
+
+%.h: $(XCBPROTO_XCBINCLUDEDIR)\%.xml
+ python c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $<
+
+%.c: $(XCBPROTO_XCBINCLUDEDIR)\%.xml
+ python c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $<
+
diff --git a/libxcb/src/xcb.h b/libxcb/src/xcb.h
index f95127665..70a44a59d 100644
--- a/libxcb/src/xcb.h
+++ b/libxcb/src/xcb.h
@@ -35,9 +35,19 @@
#include <stdint.h>
#endif
+#ifndef _MSC_VER
#include <sys/uio.h>
+#else
+#define HANDLE void *
+typedef int pid_t;
+#endif
#include <pthread.h>
+#ifdef _MSC_VER
+#undef HANDLE
+typedef unsigned uint32_t;
+typedef int int32_t;
+#endif
#ifdef __cplusplus
extern "C" {
diff --git a/libxcb/src/xcb_auth.c b/libxcb/src/xcb_auth.c
index 104f2f07b..c0ad90267 100644
--- a/libxcb/src/xcb_auth.c
+++ b/libxcb/src/xcb_auth.c
@@ -27,12 +27,19 @@
#include <assert.h>
#include <X11/Xauth.h>
+#include <X11/Xwinsock.h>
+#include <stdlib.h>
+#ifndef _MSC_VER
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <sys/param.h>
#include <unistd.h>
-#include <stdlib.h>
+#else
+typedef unsigned in_addr_t;
+#define MAXPATHLEN 255
+#define snprintf _snprintf
+#endif
#include "xcb.h"
#include "xcbint.h"
@@ -41,6 +48,10 @@
#include <X11/Xdmcp.h>
#endif
+#ifndef HAVE_GETADDRINFO
+#include "dummyin6.h"
+#endif
+
enum auth_protos {
#ifdef HASXDMAUTH
AUTH_XA1,
diff --git a/libxcb/src/xcb_conn.c b/libxcb/src/xcb_conn.c
index 251d62e01..0c5c59c5f 100644
--- a/libxcb/src/xcb_conn.c
+++ b/libxcb/src/xcb_conn.c
@@ -28,9 +28,14 @@
#include <assert.h>
#include <string.h>
#include <stdio.h>
-#include <unistd.h>
#include <stdlib.h>
+#include <unistd.h>
+#ifdef _MSC_VER
+#include <X11/Xwinsock.h>
+#define STDERR_FILENO stderr
+#else
#include <netinet/in.h>
+#endif
#include <fcntl.h>
#include <errno.h>
@@ -42,6 +47,8 @@
#include <sys/select.h>
#endif
+#include <X11/Xtrans/Xtrans.h>
+
typedef struct {
uint8_t status;
uint8_t pad0[5];
@@ -50,8 +57,45 @@ typedef struct {
static const int error_connection = 1;
+#ifdef _MSC_VER
+size_t writev(int fildes, const struct iovec *iov, int iovcnt)
+{
+ int i, r;
+ char *p;
+ size_t l, sum;
+
+ /* We should buffer */
+ sum= 0;
+ for (i= 0; i<iovcnt; i++)
+ {
+ p= iov[i].iov_base;
+ l= iov[i].iov_len;
+ while (l > 0)
+ {
+ r= send(fildes, p, l, 0);
+ if (r <= 0)
+ {
+ errno =WSAGetLastError();
+ if(errno == WSAEWOULDBLOCK)
+ errno = EAGAIN;
+ assert(sum == 0);
+ return r;
+ }
+ p += r;
+ l -= r;
+ sum += r;
+ }
+ }
+ return sum;
+}
+#endif
+
static int set_fd_flags(const int fd)
{
+#ifdef _MSC_VER
+ unsigned long arg = 1;
+ int ret = ioctlsocket (fd, FIONBIO, &arg);
+#else
int flags = fcntl(fd, F_GETFL, 0);
if(flags == -1)
return 0;
@@ -60,6 +104,7 @@ static int set_fd_flags(const int fd)
return 0;
if(fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
return 0;
+#endif
return 1;
}
@@ -306,6 +351,13 @@ int _xcb_conn_wait(xcb_connection_t *c, pthread_cond_t *cond, struct iovec **vec
ret = poll(&fd, 1, -1);
#else
ret = select(c->fd + 1, &rfds, &wfds, 0, 0);
+ if (ret==SOCKET_ERROR)
+ {
+ ret=-1;
+ errno = WSAGetLastError();
+ if (errno == WSAEINTR)
+ errno=EINTR;
+ }
#endif
} while (ret == -1 && errno == EINTR);
if (ret < 0)
diff --git a/libxcb/src/xcb_in.c b/libxcb/src/xcb_in.c
index 26ab3581f..9d893ae64 100644
--- a/libxcb/src/xcb_in.c
+++ b/libxcb/src/xcb_in.c
@@ -30,16 +30,21 @@
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
+#ifdef _MSC_VER
+#include <X11/Xwinsock.h>
+#endif
#include <errno.h>
#include "xcb.h"
#include "xcbext.h"
#include "xcbint.h"
+#ifndef _MSC_VER
#if USE_POLL
#include <poll.h>
#else
#include <sys/select.h>
#endif
+#endif
#define XCB_ERROR 0
#define XCB_REPLY 1
@@ -264,6 +269,37 @@ static void free_reply_list(struct reply_list *head)
static int read_block(const int fd, void *buf, const ssize_t len)
{
+#ifdef _MSC_VER
+ int done = 0;
+ while(done < len)
+ {
+ int Err;
+ int ret = recv(fd, ((char *) buf) + done, len - done,0);
+ if(ret > 0)
+ done += ret;
+ else
+ Err=WSAGetLastError();
+ if(ret < 0 && Err == WSAEWOULDBLOCK)
+ {
+ fd_set fds;
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+ do {
+ ret = select(fd + 1, &fds, 0, 0, 0);
+ if (ret==SOCKET_ERROR)
+ {
+ ret=-1;
+ errno = WSAGetLastError();
+ if (errno == WSAEINTR)
+ errno=EINTR;
+ }
+ } while (ret == -1 && errno == EINTR);
+ }
+ if(ret <= 0)
+ return ret;
+ }
+ return len;
+#else
int done = 0;
while(done < len)
{
@@ -293,6 +329,7 @@ static int read_block(const int fd, void *buf, const ssize_t len)
return ret;
}
return len;
+#endif
}
static int poll_for_reply(xcb_connection_t *c, unsigned int request, void **reply, xcb_generic_error_t **error)
@@ -555,11 +592,16 @@ void _xcb_in_replies_done(xcb_connection_t *c)
int _xcb_in_read(xcb_connection_t *c)
{
- int n = read(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len);
+ int n = recv(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len,0); //MH
if(n > 0)
c->in.queue_len += n;
while(read_packet(c))
/* empty */;
+#ifdef _MSC_VER
+ errno=WSAGetLastError();
+ if (errno==WSAEWOULDBLOCK)
+ errno=EAGAIN;
+#endif
if((n > 0) || (n < 0 && errno == EAGAIN))
return 1;
_xcb_conn_shutdown(c);
diff --git a/libxcb/src/xcb_out.c b/libxcb/src/xcb_out.c
index b3050fe3d..08d19c65c 100644
--- a/libxcb/src/xcb_out.c
+++ b/libxcb/src/xcb_out.c
@@ -29,6 +29,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
+#include <X11/Xtrans/Xtrans.h>
#include "xcb.h"
#include "xcbext.h"
diff --git a/libxcb/src/xcb_util.c b/libxcb/src/xcb_util.c
index 55aadb7ca..577ec3da9 100644
--- a/libxcb/src/xcb_util.c
+++ b/libxcb/src/xcb_util.c
@@ -26,6 +26,10 @@
/* Utility functions implementable using only public APIs. */
#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifndef _MSC_VER
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
@@ -36,17 +40,31 @@
#include <netdnet/dn.h>
#endif
#include <netdb.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
+
+#else
+#include <X11/Xwinsock.h>
+#include <X11\Xos.h>
+#define snprintf _snprintf
+#define HAVE_GETADDRINFO
+#endif
+
#include <string.h>
#include "xcb.h"
#include "xcbext.h"
#include "xcbint.h"
+#ifndef HAVE_GETADDRINFO
+#include "dummyin6.h"
+#include "getaddrinfo.h"
+#else
+#ifdef _MSC_VER
+#include <Ws2tcpip.h>
+#endif
+#endif
+
static const int error_connection = 1;
int xcb_popcount(uint32_t mask)
diff --git a/libxcb/src/xcbext.h b/libxcb/src/xcbext.h
index 2e10ba203..ea5a2d355 100644
--- a/libxcb/src/xcbext.h
+++ b/libxcb/src/xcbext.h
@@ -28,6 +28,8 @@
#ifndef __XCBEXT_H
#define __XCBEXT_H
+#include <unistd.h>
+
#include "xcb.h"
#ifdef __cplusplus
diff --git a/libxcb/src/xcbint.h b/libxcb/src/xcbint.h
index 154cca04a..1a7a44182 100644
--- a/libxcb/src/xcbint.h
+++ b/libxcb/src/xcbint.h
@@ -28,6 +28,7 @@
#ifndef __XCBINT_H
#define __XCBINT_H
+#include <unistd.h>
#include "bigreq.h"
#ifdef HAVE_CONFIG_H