diff options
author | Daniel Stenberg <daniel@haxx.se> | 2007-09-11 22:21:39 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2007-09-11 22:21:39 +0000 |
commit | 1ce732e9d6342d09f1cafaa7b956da3bd00b6aaf (patch) | |
tree | 4eb4613ea3bbd3436a96bf2b7ada38f8350093c2 /lib/ftp.c | |
parent | cc618e761c4f009b11834383204b54bc1d0e1c5d (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/ftp.c')
-rw-r--r-- | lib/ftp.c | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -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 */ |