--- nanoftp.c.org 2004-04-14 17:30:44.000000000 -0500 +++ nanoftp.c 2004-04-14 17:35:09.000000000 -0500 @@ -105,6 +105,9 @@ #endif #endif +#ifdef SUPPORT_IP6 +#define is_storage_ipv6(addr) ((addr).__ss_family == AF_INET6) +#endif #define FTP_COMMAND_OK 200 #define FTP_SYNTAX_ERROR 500 @@ -1555,7 +1558,7 @@ memset (&dataAddr, 0, sizeof(dataAddr)); #ifdef SUPPORT_IP6 - if ((ctxt->ftpAddr).ss_family == AF_INET6) { + if (is_storage_ipv6(ctxt->ftpAddr)) { ctxt->dataFd = socket (AF_INET6, SOCK_STREAM, IPPROTO_TCP); ((struct sockaddr_in6 *)&dataAddr)->sin6_family = AF_INET6; dataAddrLen = sizeof(struct sockaddr_in6); @@ -1574,7 +1577,7 @@ if (ctxt->passive) { #ifdef SUPPORT_IP6 - if ((ctxt->ftpAddr).ss_family == AF_INET6) + if (is_storage_ipv6(ctxt->ftpAddr)) snprintf (buf, sizeof(buf), "EPSV\r\n"); else #endif @@ -1605,7 +1608,7 @@ cur = &ctxt->controlBuf[ctxt->controlBufAnswer]; while (((*cur < '0') || (*cur > '9')) && *cur != '\0') cur++; #ifdef SUPPORT_IP6 - if ((ctxt->ftpAddr).ss_family == AF_INET6) { + if (is_storage_ipv6(ctxt->ftpAddr)) { if (sscanf (cur, "%u", &temp[0]) != 1) { __xmlIOErr(XML_FROM_FTP, XML_FTP_EPSV_ANSWER, "Invalid answer to EPSV\n"); @@ -1642,7 +1645,7 @@ } else { getsockname(ctxt->dataFd, (struct sockaddr *) &dataAddr, &dataAddrLen); #ifdef SUPPORT_IP6 - if ((ctxt->ftpAddr).ss_family == AF_INET6) + if (is_storage_ipv6(ctxt->ftpAddr)) ((struct sockaddr_in6 *)&dataAddr)->sin6_port = 0; else #endif @@ -1661,7 +1664,7 @@ return (-1); } #ifdef SUPPORT_IP6 - if ((ctxt->ftpAddr).ss_family == AF_INET6) { + if (is_storage_ipv6(ctxt->ftpAddr)) { char buf6[INET6_ADDRSTRLEN]; inet_ntop (AF_INET6, &((struct sockaddr_in6 *)&dataAddr)->sin6_addr, buf6, INET6_ADDRSTRLEN);