X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=nanohttp.c;h=9cd2292fdc5417e6c93a1f22ceb5cb0d1f05b02e;hb=8685bcc0d10e727b8daf282102cbd634cc9b3cd4;hp=0533102014b7e237ce6953f7c8c433890c4b3097;hpb=53c8e7ffb7a283bffe140e6337e573a6cdb1b051;p=platform%2Fupstream%2Flibxml2.git diff --git a/nanohttp.c b/nanohttp.c index 0533102..9cd2292 100644 --- a/nanohttp.c +++ b/nanohttp.c @@ -11,7 +11,6 @@ * daniel@veillard.com */ -#define NEED_SOCKETS #define IN_LIBXML #include "libxml.h" @@ -74,14 +73,8 @@ #define XML_SOCKLEN_T unsigned int #endif -#if defined(__MINGW32__) || defined(_WIN32_WCE) -#ifndef _WINSOCKAPI_ -#define _WINSOCKAPI_ -#endif +#if defined(_WIN32) && !defined(__CYGWIN__) #include -#include -#undef XML_SOCKLEN_T -#define XML_SOCKLEN_T unsigned int #endif #include @@ -182,7 +175,21 @@ xmlHTTPErrMemory(const char *extra) */ static int socket_errno(void) { #ifdef _WINSOCKAPI_ - return(WSAGetLastError()); + int err = WSAGetLastError(); + switch(err) { + case WSAECONNRESET: + return(ECONNRESET); + case WSAEINPROGRESS: + return(EINPROGRESS); + case WSAEINTR: + return(EINTR); + case WSAESHUTDOWN: + return(ESHUTDOWN); + case WSAEWOULDBLOCK: + return(EWOULDBLOCK); + default: + return(err); + } #else return(errno); #endif @@ -629,7 +636,7 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) if ((select(ctxt->fd + 1, &rfd, NULL, NULL, &tv) < 1) #if defined(EINTR) - && (errno != EINTR) + && (socket_errno() != EINTR) #endif ) return (0); @@ -1038,16 +1045,13 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) static SOCKET xmlNanoHTTPConnectHost(const char *host, int port) { - struct hostent *h; struct sockaddr *addr = NULL; - struct in_addr ia; struct sockaddr_in sockin; #ifdef SUPPORT_IP6 struct in6_addr ia6; struct sockaddr_in6 sockin6; #endif - int i; SOCKET s; memset (&sockin, 0, sizeof(sockin)); @@ -1084,7 +1088,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) for (res = result; res; res = res->ai_next) { if (res->ai_family == AF_INET) { - if (res->ai_addrlen > sizeof(sockin)) { + if ((size_t)res->ai_addrlen > sizeof(sockin)) { __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); freeaddrinfo (result); return INVALID_SOCKET; @@ -1094,7 +1098,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) addr = (struct sockaddr *)&sockin; #ifdef SUPPORT_IP6 } else if (have_ipv6 () && (res->ai_family == AF_INET6)) { - if (res->ai_addrlen > sizeof(sockin6)) { + if ((size_t)res->ai_addrlen > sizeof(sockin6)) { __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); freeaddrinfo (result); return INVALID_SOCKET; @@ -1122,6 +1126,10 @@ xmlNanoHTTPConnectHost(const char *host, int port) #endif #if !defined(HAVE_GETADDRINFO) || !defined(_WIN32) { + struct hostent *h; + struct in_addr ia; + int i; + h = gethostbyname (GETHOSTBYNAME_ARG_CAST host); if (h == NULL) {