From: Daniel Stenberg Date: Fri, 10 Nov 2000 13:42:45 +0000 (+0000) Subject: set type before checking --head size, as the type may cause the server X-Git-Tag: upstream/7.37.1~17493 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4035543763136642dfdbe9e63c98018b9711de34;p=platform%2Fupstream%2Fcurl.git set type before checking --head size, as the type may cause the server to return different sizes --- diff --git a/lib/ftp.c b/lib/ftp.c index 88e7faf..4224c53 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);