aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sendf.c4
-rw-r--r--lib/transfer.c3
-rw-r--r--lib/urldata.h3
3 files changed, 8 insertions, 2 deletions
diff --git a/lib/sendf.c b/lib/sendf.c
index 99e3f65f8..fd58220d9 100644
--- a/lib/sendf.c
+++ b/lib/sendf.c
@@ -140,8 +140,10 @@ void Curl_failf(struct SessionHandle *data, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- if(data->set.errorbuffer)
+ if(data->set.errorbuffer && !data->state.errorbuf) {
vsnprintf(data->set.errorbuffer, CURL_ERROR_SIZE, fmt, ap);
+ data->state.errorbuf = TRUE; /* wrote error string */
+ }
va_end(ap);
}
diff --git a/lib/transfer.c b/lib/transfer.c
index 28fbf702d..449b2e6eb 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -863,7 +863,7 @@ Transfer(struct connectdata *c_conn)
}
if (data->set.timeout &&
- ((Curl_tvdiff(now, start)/1000) > data->set.timeout)) {
+ ((Curl_tvdiff(now, start)/1000) >= data->set.timeout)) {
failf (data, "Operation timed out with %d out of %d bytes received",
bytecount, conn->size);
return CURLE_OPERATION_TIMEOUTED;
@@ -914,6 +914,7 @@ CURLcode Curl_perform(struct SessionHandle *data)
data->set.followlocation=0; /* reset the location-follow counter */
data->state.this_is_a_follow = FALSE; /* reset this */
+ data->state.errorbuf = FALSE; /* no error has occurred */
Curl_initinfo(data); /* reset session-specific information "variables" */
diff --git a/lib/urldata.h b/lib/urldata.h
index 1ccead519..a8f1ebe78 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -446,6 +446,9 @@ struct UrlState {
long sessionage; /* number of the most recent session */
char scratch[BUFSIZE*2]; /* huge buffer when doing upload CRLF replacing */
+ bool errorbuf; /* Set to TRUE if the error buffer is already filled in.
+ This must be set to FALSE every time _easy_perform() is
+ called. */
};