failf() now only overwrites the error buffer the first time it gets called
authorDaniel Stenberg <daniel@haxx.se>
Fri, 2 Nov 2001 22:30:34 +0000 (22:30 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 2 Nov 2001 22:30:34 +0000 (22:30 +0000)
for each *_perform(). It makes things a lot easier, as the first one that
detects the error get to write the final error reason...

lib/sendf.c
lib/transfer.c
lib/urldata.h

index 99e3f65f8274f020f1577a720d2ab4ab28957a45..fd58220d9d40855fc762e6eb281c5437daff49a8 100644 (file)
@@ -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);
 }
 
index 28fbf702dfacf710bd30786648ff9dc5848e2a49..449b2e6eb26572f852b2ea7406c01e2292b7c5a2 100644 (file)
@@ -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" */
 
index 1ccead51943cbcab689d54b3372e3e551387d289..a8f1ebe7828116ee7a06b6bbea4af2dd963f6719 100644 (file)
@@ -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. */
 };