diff options
author | Daniel Stenberg <daniel@haxx.se> | 2002-01-04 09:03:11 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2002-01-04 09:03:11 +0000 |
commit | 4fc76afef41ae040491460ea243bae2105396ad5 (patch) | |
tree | 91216a8ff116740ce41e564c6ac1b3ce120b9931 /lib | |
parent | a31155a72aea0ba44b998548e4bcda123f7fb89e (diff) |
The FTP response lines are now passed to the function callback registered for
headers.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ftp.c | 22 |
1 files changed, 18 insertions, 4 deletions
@@ -192,9 +192,12 @@ int Curl_GetFTPResponse(char *buf, char *line_start; int code=0; /* default "error code" to return */ -#define SELECT_OK 0 -#define SELECT_ERROR 1 -#define SELECT_TIMEOUT 2 +#define SELECT_OK 0 +#define SELECT_ERROR 1 /* select() problems */ +#define SELECT_TIMEOUT 2 /* took too long */ +#define SELECT_MEMORY 3 /* no available memory */ +#define SELECT_CALLBACK 4 /* aborted by callback */ + int error = SELECT_OK; struct FTP *ftp = conn->proto.ftp; @@ -283,6 +286,7 @@ int Curl_GetFTPResponse(char *buf, if(*ptr=='\n') { /* a newline is CRLF in ftp-talk, so the CR is ignored as the line isn't really terminated until the LF comes */ + CURLcode result; /* output debug output if that is requested */ if(data->set.verbose) { @@ -291,6 +295,16 @@ int Curl_GetFTPResponse(char *buf, /* no need to output LF here, it is part of the data */ } + /* + * We pass all response-lines to the callback function registered + * for "headers". The response lines can be seen as a kind of + * headers. + */ + result = Curl_client_write(data, CLIENTWRITE_HEADER, + line_start, perline); + if(result) + return -SELECT_CALLBACK; + #define lastline(line) (isdigit((int)line[0]) && isdigit((int)line[1]) && \ isdigit((int)line[2]) && (' ' == line[3])) @@ -324,7 +338,7 @@ int Curl_GetFTPResponse(char *buf, if(ftp->cache) memcpy(ftp->cache, line_start, ftp->cache_size); else - return CURLE_OUT_OF_MEMORY; /**BANG**/ + return -SELECT_MEMORY; /**BANG**/ } } /* there was data */ } /* if(no error) */ |