aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2007-09-11 22:21:39 +0000
committerDaniel Stenberg <daniel@haxx.se>2007-09-11 22:21:39 +0000
commit1ce732e9d6342d09f1cafaa7b956da3bd00b6aaf (patch)
tree4eb4613ea3bbd3436a96bf2b7ada38f8350093c2 /lib
parentcc618e761c4f009b11834383204b54bc1d0e1c5d (diff)
- I noticed while writing test 541 that the FTP code wrongly did a CWD on the
second transfer as it didn't store and remember the "" path from the previous transfer so it would instead CWD to the entry path as stored. This worked, but did a superfluous command. Thus, test case 541 now also verifies this fix.
Diffstat (limited to 'lib')
-rw-r--r--lib/ftp.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index a282282aa..cf5e590db 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2972,7 +2972,8 @@ CURLcode Curl_ftp_connect(struct connectdata *conn,
*
* Input argument is already checked for validity.
*/
-CURLcode Curl_ftp_done(struct connectdata *conn, CURLcode status, bool premature)
+CURLcode Curl_ftp_done(struct connectdata *conn, CURLcode status,
+ bool premature)
{
struct SessionHandle *data = conn->data;
struct FTP *ftp = data->reqdata.proto.ftp;
@@ -3034,12 +3035,19 @@ CURLcode Curl_ftp_done(struct connectdata *conn, CURLcode status, bool premature
} else {
size_t flen = ftp->file?strlen(ftp->file):0; /* file is "raw" already */
size_t dlen = strlen(path)-flen;
- if(dlen && !ftpc->cwdfail) {
- ftpc->prevpath = path;
- if(flen)
- /* if 'path' is not the whole string */
- ftpc->prevpath[dlen]=0; /* terminate */
- infof(data, "Remembering we are in dir %s\n", ftpc->prevpath);
+ if(!ftpc->cwdfail) {
+ if(dlen) {
+ ftpc->prevpath = path;
+ if(flen)
+ /* if 'path' is not the whole string */
+ ftpc->prevpath[dlen]=0; /* terminate */
+ }
+ else {
+ /* we never changed dir */
+ ftpc->prevpath=strdup("");
+ free(path);
+ }
+ infof(data, "Remembering we are in dir \"%s\"\n", ftpc->prevpath);
}
else {
ftpc->prevpath = NULL; /* no path */