set type before checking --head size, as the type may cause the server
authorDaniel Stenberg <daniel@haxx.se>
Fri, 10 Nov 2000 13:42:45 +0000 (13:42 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 10 Nov 2000 13:42:45 +0000 (13:42 +0000)
to return different sizes

lib/ftp.c

index 88e7faf..4224c53 100644 (file)
--- 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);