Commit 4163b86c authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

failf() now only overwrites the error buffer the first time it gets called

for each *_perform(). It makes things a lot easier, as the first one that
detects the error get to write the final error reason...
parent 5b948512
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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);
}

+2 −1
Original line number Diff line number Diff line
@@ -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" */

+3 −0
Original line number Diff line number Diff line
@@ -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. */
};