This union ipbox thingy in ftp.c makes a bunch of assumptions of wordsize and endianness, it does not work on my platform Solaris 8 in 64bit mode. Proposed patch, this should be as portable as possible since s_addr and sin_port must be in network byte order: diff -ur php-4.0.6/ext/ftp/ftp.c php-4.0.6.new/ext/ftp/ftp.c --- php-4.0.6/ext/ftp/ftp.c Fri Nov 3 22:53:24 2000 +++ php-4.0.6.new/ext/ftp/ftp.c Thu Jul 26 18:05:19 2001 @@ -101,14 +101,6 @@ static char** ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path); -/* IP and port conversion box */ -union ipbox { - unsigned long l[2]; - unsigned short s[4]; - unsigned char c[8]; -}; - - ftpbuf_t* ftp_open(const char *host, short port) { @@ -454,8 +446,7 @@ ftp_pasv(ftpbuf_t *ftp, int pasv) { char *ptr; - union ipbox ipbox; - unsigned long b[6]; + unsigned long b1,b2,b3,b4,b5,b6; int n; if (ftp == NULL) @@ -476,17 +467,14 @@ /* parse out the IP and port */ for (ptr = ftp->inbuf; *ptr && !isdigit(*ptr); ptr++); n = sscanf(ptr, "%lu,%lu,%lu,%lu,%lu,%lu", - &b[0], &b[1], &b[2], &b[3], &b[4], &b[5]); + &b1, &b2, &b3, &b4, &b5, &b6); if (n != 6) return 0; - for (n=0; n<6; n++) - ipbox.c[n] = (unsigned char) b[n]; - memset(&ftp->pasvaddr, 0, sizeof(ftp->pasvaddr)); - ftp->pasvaddr.sin_family = AF_INET; - ftp->pasvaddr.sin_addr.s_addr = ipbox.l[0]; - ftp->pasvaddr.sin_port = ipbox.s[2]; + ftp->pasvaddr.sin_family = AF_INET; + ftp->pasvaddr.sin_addr.s_addr = b1 << 24 | b2 << 16 | b3 << 8 | b4; + ftp->pasvaddr.sin_port = b5 << 8 | b6; ftp->pasv = 2; @@ -990,7 +978,6 @@ databuf_t *data; struct sockaddr_in addr; int size; - union ipbox ipbox; char arg[sizeof("255,255,255,255,255,255")]; @@ -1062,11 +1049,13 @@ data->listener = fd; /* send the PORT */ - ipbox.l[0] = ftp->localaddr.s_addr; - ipbox.s[2] = addr.sin_port; sprintf(arg, "%u,%u,%u,%u,%u,%u", - ipbox.c[0], ipbox.c[1], ipbox.c[2], ipbox.c[3], - ipbox.c[4], ipbox.c[5]); + ftp->localaddr.s_addr >> 24 & 0xff, + ftp->localaddr.s_addr >> 16 & 0xff, + ftp->localaddr.s_addr >> 8 & 0xff, + ftp->localaddr.s_addr >> 0 & 0xff, + addr.sin_port >> 8 & 0xff, + addr.sin_port >> 0 & 0xff); if (!ftp_putcmd(ftp, "PORT", arg)) goto bail; -- - Terje [EMAIL PROTECTED] -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]