From 4035543763136642dfdbe9e63c98018b9711de34 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 10 Nov 2000 13:42:45 +0000 Subject: set type before checking --head size, as the type may cause the server to return different sizes --- lib/ftp.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/ftp.c b/lib/ftp.c index 88e7faf15..4224c533a 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -661,6 +661,23 @@ CURLcode _ftp(struct connectdata *conn) may not support it! It is however the only way we have to get a file's size! */ int filesize; + + /* Some servers return different sizes for different modes, and thus we + must set the proper type before we check the size */ + ftpsendf(data->firstsocket, conn, "TYPE %s", + (data->bits.ftp_ascii)?"A":"I"); + + nread = GetLastResponse(data->firstsocket, buf, conn); + if(nread < 0) + return CURLE_OPERATION_TIMEOUTED; + + if(strncmp(buf, "200", 3)) { + failf(data, "Couldn't set %s mode", + (data->bits.ftp_ascii)?"ASCII":"binary"); + return (data->bits.ftp_ascii)? CURLE_FTP_COULDNT_SET_ASCII: + CURLE_FTP_COULDNT_SET_BINARY; + } + ftpsendf(data->firstsocket, conn, "SIZE %s", ftp->file); nread = GetLastResponse(data->firstsocket, buf, conn); -- cgit v1.2.3