Feng Tu reported that curl -w did wrong on TFTP transfers in

bug report #1715394 (http://curl.haxx.se/bug/view.cgi?id=1715394), and the
transfer-related info "variables" were indeed overwritten with zeroes wrongly
and have now been adjusted. The upload size still isn't accurate.
This commit is contained in:
Daniel Stenberg 2007-05-18 10:32:48 +00:00
parent ed4936fd30
commit 250f9670b7
4 changed files with 20 additions and 7 deletions

View file

@ -415,8 +415,6 @@ static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event)
return CURLE_TFTP_ILLEGAL; /* not really the perfect return code for
this */
}
Curl_pgrsSetDownloadCounter(data,
(curl_off_t) state->block*TFTP_BLOCKSIZE);
return CURLE_OK;
}
@ -485,6 +483,7 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
/* Check all sbytes were sent */
if(sbytes<0) {
failf(data, "%s\n", Curl_strerror(state->conn, SOCKERRNO));
return CURLE_SEND_ERROR;
}
break;
@ -497,7 +496,8 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
if(state->retries > state->retry_max) {
state->error = TFTP_ERR_TIMEOUT;
state->state = TFTP_STATE_FIN;
} else {
}
else {
/* Re-send the data packet */
sbytes = sendto(state->sockfd, (void *)&state->spacket,
4+state->sbytes, SEND_4TH_ARG,
@ -506,6 +506,7 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
/* Check all sbytes were sent */
if(sbytes<0) {
failf(data, "%s\n", Curl_strerror(state->conn, SOCKERRNO));
return CURLE_SEND_ERROR;
}
}
break;
@ -738,6 +739,8 @@ CURLcode Curl_tftp(struct connectdata *conn, bool *done)
state->rbytes-4);
if(code)
return code;
Curl_pgrsSetDownloadCounter(data,
(curl_off_t) state->rbytes-4);
}
break;
case TFTP_EVENT_ERROR:

View file

@ -1792,9 +1792,11 @@ Transfer(struct connectdata *conn)
struct Curl_transfer_keeper *k = &data->reqdata.keep;
bool done=FALSE;
if(!(conn->protocol & PROT_FILE)) {
/* Only do this if we are not transferring FILE:, since the file: treatment
is different*/
if(!(conn->protocol & (PROT_FILE|PROT_TFTP))) {
/* Only do this if we are not transferring FILE or TFTP, since those
transfers are treated differently. They do their entire transfers in
the DO function and just returns from this. That is ugly indeed.
*/
Curl_readwrite_init(conn);
Curl_pre_readwrite(conn);
}