diff options
Diffstat (limited to 'nanoftp.c')
-rw-r--r-- | nanoftp.c | 215 |
1 files changed, 108 insertions, 107 deletions
@@ -78,7 +78,9 @@ #if defined(__MINGW32__) || defined(_WIN32_WCE) +#ifndef _WINSOCKAPI_ #define _WINSOCKAPI_ +#endif #include <wsockcompat.h> #include <winsock2.h> #undef XML_SOCKLEN_T @@ -92,7 +94,6 @@ #if !defined(__BEOS__) || defined(__HAIKU__) #define closesocket(s) close(s) #endif -#define SOCKET int #endif #ifdef __BEOS__ @@ -484,7 +485,7 @@ xmlNanoFTPNewCtxt(const char *URL) { ret->returnValue = 0; ret->controlBufIndex = 0; ret->controlBufUsed = 0; - ret->controlFd = -1; + ret->controlFd = INVALID_SOCKET; unescaped = xmlURIUnescapeString(URL, 0, NULL); if (unescaped != NULL) { @@ -511,8 +512,8 @@ xmlNanoFTPFreeCtxt(void * ctx) { if (ctxt->protocol != NULL) xmlFree(ctxt->protocol); if (ctxt->path != NULL) xmlFree(ctxt->path); ctxt->passive = 1; - if (ctxt->controlFd >= 0) closesocket(ctxt->controlFd); - ctxt->controlFd = -1; + if (ctxt->controlFd != INVALID_SOCKET) closesocket(ctxt->controlFd); + ctxt->controlFd = INVALID_SOCKET; ctxt->controlBufIndex = -1; ctxt->controlBufUsed = -1; xmlFree(ctxt); @@ -567,7 +568,7 @@ xmlNanoFTPGetMore(void *ctx) { int len; int size; - if ((ctxt == NULL) || (ctxt->controlFd < 0)) return(-1); + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); if ((ctxt->controlBufIndex < 0) || (ctxt->controlBufIndex > FTP_BUF_SIZE)) { #ifdef DEBUG_FTP @@ -619,8 +620,8 @@ xmlNanoFTPGetMore(void *ctx) { if ((len = recv(ctxt->controlFd, &ctxt->controlBuf[ctxt->controlBufIndex], size, 0)) < 0) { __xmlIOErr(XML_FROM_FTP, 0, "recv failed"); - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } #ifdef DEBUG_FTP @@ -648,7 +649,7 @@ xmlNanoFTPReadResponse(void *ctx) { int len; int res = -1, cur = -1; - if ((ctxt == NULL) || (ctxt->controlFd < 0)) return(-1); + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); get_more: /* @@ -737,7 +738,7 @@ xmlNanoFTPCheckResponse(void *ctx) { fd_set rfd; struct timeval tv; - if ((ctxt == NULL) || (ctxt->controlFd < 0)) return(-1); + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&rfd); @@ -826,7 +827,7 @@ xmlNanoFTPQuit(void *ctx) { char buf[200]; int len, res; - if ((ctxt == NULL) || (ctxt->controlFd < 0)) return(-1); + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); snprintf(buf, sizeof(buf), "QUIT\r\n"); len = strlen(buf); @@ -951,7 +952,7 @@ xmlNanoFTPConnect(void *ctx) { addrlen = sizeof (struct sockaddr_in); } - if (ctxt->controlFd < 0) { + if (ctxt->controlFd == INVALID_SOCKET) { __xmlIOErr(XML_FROM_FTP, 0, "socket failed"); return(-1); } @@ -962,8 +963,8 @@ xmlNanoFTPConnect(void *ctx) { if (connect(ctxt->controlFd, (struct sockaddr *) &ctxt->ftpAddr, addrlen) < 0) { __xmlIOErr(XML_FROM_FTP, 0, "Failed to create a connection"); - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } @@ -972,8 +973,8 @@ xmlNanoFTPConnect(void *ctx) { */ res = xmlNanoFTPGetResponse(ctxt); if (res != 2) { - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } @@ -1030,7 +1031,7 @@ xmlNanoFTPConnect(void *ctx) { if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); closesocket(ctxt->controlFd); - ctxt->controlFd = -1; + ctxt->controlFd = INVALID_SOCKET; return(res); } res = xmlNanoFTPGetResponse(ctxt); @@ -1052,13 +1053,13 @@ xmlNanoFTPConnect(void *ctx) { if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); closesocket(ctxt->controlFd); - ctxt->controlFd = -1; + ctxt->controlFd = INVALID_SOCKET; return(res); } res = xmlNanoFTPGetResponse(ctxt); if (res > 3) { closesocket(ctxt->controlFd); - ctxt->controlFd = -1; + ctxt->controlFd = INVALID_SOCKET; return(-1); } break; @@ -1069,7 +1070,7 @@ xmlNanoFTPConnect(void *ctx) { case -1: default: closesocket(ctxt->controlFd); - ctxt->controlFd = -1; + ctxt->controlFd = INVALID_SOCKET; return(-1); } } @@ -1092,8 +1093,8 @@ xmlNanoFTPConnect(void *ctx) { res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(res); } res = xmlNanoFTPGetResponse(ctxt); @@ -1103,8 +1104,8 @@ xmlNanoFTPConnect(void *ctx) { break; } if (proxyType == 1) { - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } case 2: @@ -1123,8 +1124,8 @@ xmlNanoFTPConnect(void *ctx) { res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(res); } res = xmlNanoFTPGetResponse(ctxt); @@ -1145,8 +1146,8 @@ xmlNanoFTPConnect(void *ctx) { res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(res); } res = xmlNanoFTPGetResponse(ctxt); @@ -1156,8 +1157,8 @@ xmlNanoFTPConnect(void *ctx) { return(0); } if (proxyType == 2) { - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } case 3: @@ -1166,8 +1167,8 @@ xmlNanoFTPConnect(void *ctx) { * send the code or at least the sequence in use. */ default: - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } } @@ -1176,8 +1177,8 @@ xmlNanoFTPConnect(void *ctx) { */ res = xmlNanoFTPSendUser(ctxt); if (res < 0) { - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } res = xmlNanoFTPGetResponse(ctxt); @@ -1191,14 +1192,14 @@ xmlNanoFTPConnect(void *ctx) { case 5: case -1: default: - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } res = xmlNanoFTPSendPasswd(ctxt); if (res < 0) { - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } res = xmlNanoFTPGetResponse(ctxt); @@ -1213,8 +1214,8 @@ xmlNanoFTPConnect(void *ctx) { case 5: case -1: default: - closesocket(ctxt->controlFd); ctxt->controlFd = -1; - ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; return(-1); } @@ -1270,7 +1271,7 @@ xmlNanoFTPCwd(void *ctx, const char *directory) { int len; int res; - if ((ctxt == NULL) || (ctxt->controlFd < 0)) return(-1); + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); if (directory == NULL) return 0; /* @@ -1319,7 +1320,7 @@ xmlNanoFTPDele(void *ctx, const char *file) { int len; int res; - if ((ctxt == NULL) || (ctxt->controlFd < 0) || (file == NULL)) return(-1); + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET) || (file == NULL)) return(-1); if (file == NULL) return (0); /* @@ -1362,7 +1363,7 @@ xmlNanoFTPDele(void *ctx, const char *file) { * Returns -1 incase of error, 0 otherwise */ -int +SOCKET xmlNanoFTPGetConnection(void *ctx) { xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx; char buf[200], *cur; @@ -1377,7 +1378,7 @@ xmlNanoFTPGetConnection(void *ctx) { #endif XML_SOCKLEN_T dataAddrLen; - if (ctxt == NULL) return(-1); + if (ctxt == NULL) return INVALID_SOCKET; memset (&dataAddr, 0, sizeof(dataAddr)); #ifdef SUPPORT_IP6 @@ -1393,9 +1394,9 @@ xmlNanoFTPGetConnection(void *ctx) { dataAddrLen = sizeof (struct sockaddr_in); } - if (ctxt->dataFd < 0) { + if (ctxt->dataFd == INVALID_SOCKET) { __xmlIOErr(XML_FROM_FTP, 0, "socket failed"); - return (-1); + return INVALID_SOCKET; } if (ctxt->passive) { @@ -1412,19 +1413,19 @@ xmlNanoFTPGetConnection(void *ctx) { res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(res); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } res = xmlNanoFTPReadResponse(ctx); if (res != 2) { if (res == 5) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(-1); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } else { /* * retry with an active connection */ - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; ctxt->passive = 0; } } @@ -1435,10 +1436,10 @@ xmlNanoFTPGetConnection(void *ctx) { if (sscanf (cur, "%u", &temp[0]) != 1) { __xmlIOErr(XML_FROM_FTP, XML_FTP_EPSV_ANSWER, "Invalid answer to EPSV\n"); - if (ctxt->dataFd != -1) { - closesocket (ctxt->dataFd); ctxt->dataFd = -1; + if (ctxt->dataFd != INVALID_SOCKET) { + closesocket (ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; } - return (-1); + return INVALID_SOCKET; } memcpy (&((struct sockaddr_in6 *)&dataAddr)->sin6_addr, &((struct sockaddr_in6 *)&ctxt->ftpAddr)->sin6_addr, sizeof(struct in6_addr)); ((struct sockaddr_in6 *)&dataAddr)->sin6_port = htons (temp[0]); @@ -1450,10 +1451,10 @@ xmlNanoFTPGetConnection(void *ctx) { &temp[3], &temp[4], &temp[5]) != 6) { __xmlIOErr(XML_FROM_FTP, XML_FTP_PASV_ANSWER, "Invalid answer to PASV\n"); - if (ctxt->dataFd != -1) { - closesocket (ctxt->dataFd); ctxt->dataFd = -1; + if (ctxt->dataFd != INVALID_SOCKET) { + closesocket (ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; } - return (-1); + return INVALID_SOCKET; } for (i=0; i<6; i++) ad[i] = (unsigned char) (temp[i] & 0xff); memcpy (&((struct sockaddr_in *)&dataAddr)->sin_addr, &ad[0], 4); @@ -1462,8 +1463,8 @@ xmlNanoFTPGetConnection(void *ctx) { if (connect(ctxt->dataFd, (struct sockaddr *) &dataAddr, dataAddrLen) < 0) { __xmlIOErr(XML_FROM_FTP, 0, "Failed to create a data connection"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return (-1); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } } else { getsockname(ctxt->dataFd, (struct sockaddr *) &dataAddr, &dataAddrLen); @@ -1476,15 +1477,15 @@ xmlNanoFTPGetConnection(void *ctx) { if (bind(ctxt->dataFd, (struct sockaddr *) &dataAddr, dataAddrLen) < 0) { __xmlIOErr(XML_FROM_FTP, 0, "bind failed"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return (-1); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } getsockname(ctxt->dataFd, (struct sockaddr *) &dataAddr, &dataAddrLen); if (listen(ctxt->dataFd, 1) < 0) { __xmlIOErr(XML_FROM_FTP, 0, "listen failed"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return (-1); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } #ifdef SUPPORT_IP6 if ((ctxt->ftpAddr).ss_family == AF_INET6) { @@ -1513,13 +1514,13 @@ xmlNanoFTPGetConnection(void *ctx) { res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(res); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } res = xmlNanoFTPGetResponse(ctxt); if (res != 2) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(-1); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } } return(ctxt->dataFd); @@ -1542,9 +1543,9 @@ xmlNanoFTPCloseConnection(void *ctx) { fd_set rfd, efd; struct timeval tv; - if ((ctxt == NULL) || (ctxt->controlFd < 0)) return(-1); + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; tv.tv_sec = 15; tv.tv_usec = 0; FD_ZERO(&rfd); @@ -1556,7 +1557,7 @@ xmlNanoFTPCloseConnection(void *ctx) { #ifdef DEBUG_FTP perror("select"); #endif - closesocket(ctxt->controlFd); ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; return(-1); } if (res == 0) { @@ -1564,11 +1565,11 @@ xmlNanoFTPCloseConnection(void *ctx) { xmlGenericError(xmlGenericErrorContext, "xmlNanoFTPCloseConnection: timeout\n"); #endif - closesocket(ctxt->controlFd); ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; } else { res = xmlNanoFTPGetResponse(ctxt); if (res != 2) { - closesocket(ctxt->controlFd); ctxt->controlFd = -1; + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; return(-1); } } @@ -1729,7 +1730,7 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData, if (xmlNanoFTPCwd(ctxt, ctxt->path) < 1) return(-1); ctxt->dataFd = xmlNanoFTPGetConnection(ctxt); - if (ctxt->dataFd == -1) + if (ctxt->dataFd == INVALID_SOCKET) return(-1); snprintf(buf, sizeof(buf), "LIST -L\r\n"); } else { @@ -1738,7 +1739,7 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData, return(-1); } ctxt->dataFd = xmlNanoFTPGetConnection(ctxt); - if (ctxt->dataFd == -1) + if (ctxt->dataFd == INVALID_SOCKET) return(-1); snprintf(buf, sizeof(buf), "LIST -L %s\r\n", filename); } @@ -1750,12 +1751,12 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData, res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; return(res); } res = xmlNanoFTPReadResponse(ctxt); if (res != 1) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; return(-res); } @@ -1771,18 +1772,18 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData, #ifdef DEBUG_FTP perror("select"); #endif - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; return(-1); } if (res == 0) { res = xmlNanoFTPCheckResponse(ctxt); if (res < 0) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + ctxt->dataFd = INVALID_SOCKET; return(-1); } if (res == 2) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; return(0); } @@ -1791,8 +1792,8 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData, if ((len = recv(ctxt->dataFd, &buf[indx], sizeof(buf) - (indx + 1), 0)) < 0) { __xmlIOErr(XML_FROM_FTP, 0, "recv"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + ctxt->dataFd = INVALID_SOCKET; return(-1); } #ifdef DEBUG_FTP @@ -1824,18 +1825,18 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData, */ -int +SOCKET xmlNanoFTPGetSocket(void *ctx, const char *filename) { xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx; char buf[300]; int res, len; if (ctx == NULL) - return(-1); + return INVALID_SOCKET; if ((filename == NULL) && (ctxt->path == NULL)) - return(-1); + return INVALID_SOCKET; ctxt->dataFd = xmlNanoFTPGetConnection(ctxt); - if (ctxt->dataFd == -1) - return(-1); + if (ctxt->dataFd == INVALID_SOCKET) + return INVALID_SOCKET; snprintf(buf, sizeof(buf), "TYPE I\r\n"); len = strlen(buf); @@ -1845,13 +1846,13 @@ xmlNanoFTPGetSocket(void *ctx, const char *filename) { res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(res); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } res = xmlNanoFTPReadResponse(ctxt); if (res != 2) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(-res); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } if (filename == NULL) snprintf(buf, sizeof(buf), "RETR %s\r\n", ctxt->path); @@ -1865,13 +1866,13 @@ xmlNanoFTPGetSocket(void *ctx, const char *filename) { res = send(ctxt->controlFd, buf, len, 0); if (res < 0) { __xmlIOErr(XML_FROM_FTP, 0, "send failed"); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(res); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } res = xmlNanoFTPReadResponse(ctxt); if (res != 1) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - return(-res); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; } return(ctxt->dataFd); } @@ -1903,7 +1904,7 @@ xmlNanoFTPGet(void *ctx, ftpDataCallback callback, void *userData, return(-1); if (callback == NULL) return(-1); - if (xmlNanoFTPGetSocket(ctxt, filename) < 0) + if (xmlNanoFTPGetSocket(ctxt, filename) == INVALID_SOCKET) return(-1); do { @@ -1916,18 +1917,18 @@ xmlNanoFTPGet(void *ctx, ftpDataCallback callback, void *userData, #ifdef DEBUG_FTP perror("select"); #endif - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; return(-1); } if (res == 0) { res = xmlNanoFTPCheckResponse(ctxt); if (res < 0) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; - ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + ctxt->dataFd = INVALID_SOCKET; return(-1); } if (res == 2) { - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; return(0); } @@ -1936,7 +1937,7 @@ xmlNanoFTPGet(void *ctx, ftpDataCallback callback, void *userData, if ((len = recv(ctxt->dataFd, buf, sizeof(buf), 0)) < 0) { __xmlIOErr(XML_FROM_FTP, 0, "recv failed"); callback(userData, buf, len); - closesocket(ctxt->dataFd); ctxt->dataFd = -1; + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; return(-1); } callback(userData, buf, len); @@ -1962,7 +1963,7 @@ xmlNanoFTPRead(void *ctx, void *dest, int len) { xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx; if (ctx == NULL) return(-1); - if (ctxt->dataFd < 0) return(0); + if (ctxt->dataFd == INVALID_SOCKET) return(0); if (dest == NULL) return(-1); if (len <= 0) return(0); @@ -1990,7 +1991,7 @@ xmlNanoFTPRead(void *ctx, void *dest, int len) { void* xmlNanoFTPOpen(const char *URL) { xmlNanoFTPCtxtPtr ctxt; - int sock; + SOCKET sock; xmlNanoFTPInit(); if (URL == NULL) return(NULL); @@ -2003,7 +2004,7 @@ xmlNanoFTPOpen(const char *URL) { return(NULL); } sock = xmlNanoFTPGetSocket(ctxt, ctxt->path); - if (sock < 0) { + if (sock == INVALID_SOCKET) { xmlNanoFTPFreeCtxt(ctxt); return(NULL); } @@ -2026,14 +2027,14 @@ xmlNanoFTPClose(void *ctx) { if (ctxt == NULL) return(-1); - if (ctxt->dataFd >= 0) { + if (ctxt->dataFd != INVALID_SOCKET) { closesocket(ctxt->dataFd); - ctxt->dataFd = -1; + ctxt->dataFd = INVALID_SOCKET; } - if (ctxt->controlFd >= 0) { + if (ctxt->controlFd != INVALID_SOCKET) { xmlNanoFTPQuit(ctxt); closesocket(ctxt->controlFd); - ctxt->controlFd = -1; + ctxt->controlFd = INVALID_SOCKET; } xmlNanoFTPFreeCtxt(ctxt); return(0); |