From 2d1849b271fa8697b88d07ba7d78dc83591e1363 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Fri, 5 Nov 2010 08:17:59 +0100 Subject: Import upstream version 2.7.8 --- nanohttp.c | 67 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 33 insertions(+), 34 deletions(-) (limited to 'nanohttp.c') diff --git a/nanohttp.c b/nanohttp.c index 542c4ea..f669457 100644 --- a/nanohttp.c +++ b/nanohttp.c @@ -75,18 +75,18 @@ #ifdef VMS #include #define XML_SOCKLEN_T unsigned int -#define SOCKET int #endif #if defined(__MINGW32__) || defined(_WIN32_WCE) +#ifndef _WINSOCKAPI_ #define _WINSOCKAPI_ +#endif #include #include #undef XML_SOCKLEN_T #define XML_SOCKLEN_T unsigned int #endif - #include #include #include @@ -103,6 +103,7 @@ #define closesocket(s) close(s) #endif #define SOCKET int +#define INVALID_SOCKET (-1) #endif #ifdef __BEOS__ @@ -114,9 +115,6 @@ #ifndef XML_SOCKLEN_T #define XML_SOCKLEN_T unsigned int #endif -#ifndef SOCKET -#define SOCKET int -#endif #ifdef STANDALONE #define DEBUG_HTTP @@ -196,10 +194,10 @@ static int socket_errno(void) { #ifdef SUPPORT_IP6 static int have_ipv6(void) { - int s; + SOCKET s; s = socket (AF_INET6, SOCK_STREAM, 0); - if (s != -1) { + if (s != INVALID_SOCKET) { close (s); return (1); } @@ -393,7 +391,7 @@ xmlNanoHTTPNewCtxt(const char *URL) { memset(ret, 0, sizeof(xmlNanoHTTPCtxt)); ret->port = 80; ret->returnValue = 0; - ret->fd = -1; + ret->fd = INVALID_SOCKET; ret->ContentLength = -1; xmlNanoHTTPScanURL(ret, URL); @@ -430,8 +428,8 @@ xmlNanoHTTPFreeCtxt(xmlNanoHTTPCtxtPtr ctxt) { #endif ctxt->state = XML_NANO_HTTP_NONE; - if (ctxt->fd >= 0) closesocket(ctxt->fd); - ctxt->fd = -1; + if (ctxt->fd != INVALID_SOCKET) closesocket(ctxt->fd); + ctxt->fd = INVALID_SOCKET; xmlFree(ctxt); } @@ -842,7 +840,7 @@ xmlNanoHTTPScanAnswer(xmlNanoHTTPCtxtPtr ctxt, const char *line) { * Returns -1 in case of failure, the file descriptor number otherwise */ -static int +static SOCKET xmlNanoHTTPConnectAttempt(struct sockaddr *addr) { #ifndef HAVE_POLL_H @@ -870,12 +868,12 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); addrlen = sizeof(struct sockaddr_in); } - if (s == -1) { + if (s == INVALID_SOCKET) { #ifdef DEBUG_HTTP perror("socket"); #endif __xmlIOErr(XML_FROM_HTTP, 0, "socket failed\n"); - return (-1); + return INVALID_SOCKET; } #ifdef _WINSOCKAPI_ { @@ -916,7 +914,7 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) #endif __xmlIOErr(XML_FROM_HTTP, 0, "error setting non-blocking IO\n"); closesocket(s); - return (-1); + return INVALID_SOCKET; } #endif /* !__BEOS__ */ #endif /* !VMS */ @@ -931,7 +929,7 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) __xmlIOErr(XML_FROM_HTTP, 0, "error connecting to HTTP server"); closesocket(s); - return (-1); + return INVALID_SOCKET; } } #ifndef HAVE_POLL_H @@ -944,7 +942,7 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) #endif #ifndef _WINSOCKAPI_ if (s > FD_SETSIZE) - return -1; + return INVALID_SOCKET; #endif FD_ZERO(&wfd); FD_SET(s, &wfd); @@ -972,12 +970,12 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) /* Time out */ __xmlIOErr(XML_FROM_HTTP, 0, "Connect attempt timed out"); closesocket(s); - return (-1); + return INVALID_SOCKET; case -1: /* Ermm.. ?? */ __xmlIOErr(XML_FROM_HTTP, 0, "Connect failed"); closesocket(s); - return (-1); + return INVALID_SOCKET; } #ifndef HAVE_POLL_H @@ -998,7 +996,7 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) 0) { /* Solaris error code */ __xmlIOErr(XML_FROM_HTTP, 0, "getsockopt failed\n"); - return (-1); + return INVALID_SOCKET; } #endif if (status) { @@ -1006,13 +1004,13 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) "Error connecting to remote host"); closesocket(s); errno = status; - return (-1); + return INVALID_SOCKET; } } else { /* pbm */ __xmlIOErr(XML_FROM_HTTP, 0, "select failed\n"); closesocket(s); - return (-1); + return INVALID_SOCKET; } return (s); @@ -1029,7 +1027,7 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr) * Returns -1 in case of failure, the file descriptor number otherwise */ -static int +static SOCKET xmlNanoHTTPConnectHost(const char *host, int port) { struct hostent *h; @@ -1042,7 +1040,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) struct sockaddr_in6 sockin6; #endif int i; - int s; + SOCKET s; memset (&sockin, 0, sizeof(sockin)); #ifdef SUPPORT_IP6 @@ -1073,7 +1071,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) status = getaddrinfo (host, NULL, &hints, &result); if (status) { __xmlIOErr(XML_FROM_HTTP, 0, "getaddrinfo failed\n"); - return (-1); + return INVALID_SOCKET; } for (res = result; res; res = res->ai_next) { @@ -1081,7 +1079,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) if (res->ai_addrlen > sizeof(sockin)) { __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); freeaddrinfo (result); - return (-1); + return INVALID_SOCKET; } memcpy (&sockin, res->ai_addr, res->ai_addrlen); sockin.sin_port = htons (port); @@ -1091,7 +1089,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) if (res->ai_addrlen > sizeof(sockin6)) { __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); freeaddrinfo (result); - return (-1); + return INVALID_SOCKET; } memcpy (&sockin6, res->ai_addr, res->ai_addrlen); sockin6.sin6_port = htons (port); @@ -1101,7 +1099,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) continue; /* for */ s = xmlNanoHTTPConnectAttempt (addr); - if (s != -1) { + if (s != INVALID_SOCKET) { freeaddrinfo (result); return (s); } @@ -1155,7 +1153,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) #else __xmlIOErr(XML_FROM_HTTP, 0, "Failed to resolve host"); #endif - return (-1); + return INVALID_SOCKET; } for (i = 0; h->h_addr_list[i]; i++) { @@ -1163,7 +1161,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) /* A records (IPv4) */ if ((unsigned int) h->h_length > sizeof(ia)) { __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); - return (-1); + return INVALID_SOCKET; } memcpy (&ia, h->h_addr_list[i], h->h_length); sockin.sin_family = h->h_addrtype; @@ -1175,7 +1173,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) /* AAAA records (IPv6) */ if ((unsigned int) h->h_length > sizeof(ia6)) { __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); - return (-1); + return INVALID_SOCKET; } memcpy (&ia6, h->h_addr_list[i], h->h_length); sockin6.sin6_family = h->h_addrtype; @@ -1187,7 +1185,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) break; /* for */ s = xmlNanoHTTPConnectAttempt (addr); - if (s != -1) + if (s != INVALID_SOCKET) return (s); } } @@ -1198,7 +1196,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) "xmlNanoHTTPConnectHost: unable to connect to '%s'.\n", host); #endif - return (-1); + return INVALID_SOCKET; } @@ -1342,7 +1340,8 @@ xmlNanoHTTPMethodRedir(const char *URL, const char *method, const char *input, const char *headers, int ilen ) { xmlNanoHTTPCtxtPtr ctxt; char *bp, *p; - int blen, ret; + int blen; + SOCKET ret; int nbRedirects = 0; char *redirURL = NULL; #ifdef DEBUG_HTTP @@ -1386,7 +1385,7 @@ retry: blen = strlen(ctxt->hostname); ret = xmlNanoHTTPConnectHost(ctxt->hostname, ctxt->port); } - if (ret < 0) { + if (ret == INVALID_SOCKET) { xmlNanoHTTPFreeCtxt(ctxt); if (redirURL != NULL) xmlFree(redirURL); return(NULL); -- cgit v1.2.3