X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_util.c;h=0e3728a53f08f6acd6a7a57c2e6c712083c45a94;hb=20da10490f8dac75ec9fe1df28cb9e862e171be5;hp=fe1f99ff01f2bb307539ad649f3a2abe9513d2d4;hpb=18718d483e0982c779a61c71176fb0e64f850015;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_util.c b/src/xcb_util.c index fe1f99f..0e3728a 100644 --- a/src/xcb_util.c +++ b/src/xcb_util.c @@ -27,24 +27,29 @@ #include #include -#include #include -#include -#include -#include #ifdef DNETCONN #include #include #endif -#include #include #include #include #include #include -#include #include +#ifdef _WIN32 +#include "xcb_windefs.h" +#else +#include +#include +#include +#include +#include +#include +#endif /* _WIN32 */ + #include "xcb.h" #include "xcbext.h" #include "xcbint.h" @@ -139,7 +144,9 @@ int xcb_parse_display(const char *name, char **host, int *displayp, } static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short port); +#ifndef _WIN32 static int _xcb_open_unix(char *protocol, const char *file); +#endif /* !WIN32 */ #ifdef DNETCONN static int _xcb_open_decnet(const char *host, char *protocol, const unsigned short port); #endif @@ -188,6 +195,7 @@ static int _xcb_open(const char *host, char *protocol, const int display) } } +#ifndef _WIN32 filelen = strlen(base) + 1 + sizeof(display) * 3 + 1; file = malloc(filelen); if(file == NULL) @@ -220,6 +228,8 @@ static int _xcb_open(const char *host, char *protocol, const int display) free(file); return fd; +#endif /* !_WIN32 */ + return -1; /* if control reaches here then something has gone wrong */ } static int _xcb_socket(int family, int type, int proto) @@ -232,8 +242,10 @@ static int _xcb_socket(int family, int type, int proto) #endif { fd = socket(family, type, proto); +#ifndef _WIN32 if (fd >= 0) fcntl(fd, F_SETFD, FD_CLOEXEC); +#endif } return fd; } @@ -340,6 +352,7 @@ static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short return fd; } +#ifndef _WIN32 static int _xcb_open_unix(char *protocol, const char *file) { int fd; @@ -362,6 +375,7 @@ static int _xcb_open_unix(char *protocol, const char *file) } return fd; } +#endif /* !_WIN32 */ #ifdef HAVE_ABSTRACT_SOCKETS static int _xcb_open_abstract(char *protocol, const char *file, size_t filelen) @@ -398,24 +412,28 @@ xcb_connection_t *xcb_connect(const char *displayname, int *screenp) xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname, xcb_auth_info_t *auth, int *screenp) { int fd, display = 0; - char *host; - char *protocol; + char *host = NULL; + char *protocol = NULL; xcb_auth_info_t ourauth; xcb_connection_t *c; int parsed = _xcb_parse_display(displayname, &host, &protocol, &display, screenp); - if(!parsed) - return (xcb_connection_t *) &error_connection; - else + if(!parsed) { + c = (xcb_connection_t *) &error_connection; + goto out; + } else fd = _xcb_open(host, protocol, display); - free(host); - if(fd == -1) - return (xcb_connection_t *) &error_connection; + if(fd == -1) { + c = (xcb_connection_t *) &error_connection; + goto out; + } - if(auth) - return xcb_connect_to_fd(fd, auth); + if(auth) { + c = xcb_connect_to_fd(fd, auth); + goto out; + } if(_xcb_get_auth_info(fd, &ourauth, display)) { @@ -426,5 +444,8 @@ xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname, else c = xcb_connect_to_fd(fd, 0); +out: + free(host); + free(protocol); return c; }