--- 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);
