mirror of
https://github.com/curl/curl.git
synced 2026-04-11 12:01:42 +08:00
tool: move the error buffer to the per transfer struct
To avoid having to alloc or manage it separately. Closes #18442
This commit is contained in:
parent
54f1ef05d6
commit
84c92f7113
@ -40,9 +40,6 @@
|
||||
|
||||
#define BUFFER_SIZE 102400L
|
||||
|
||||
/* When doing serial transfers, we use a single fixed error area */
|
||||
static char global_errorbuffer[CURL_ERROR_SIZE];
|
||||
|
||||
#ifdef IP_TOS
|
||||
static int get_address_family(curl_socket_t sockfd)
|
||||
{
|
||||
@ -869,10 +866,7 @@ CURLcode config2setopts(struct OperationConfig *config,
|
||||
my_setopt_str(curl, CURLOPT_LOGIN_OPTIONS, config->login_options);
|
||||
my_setopt_str(curl, CURLOPT_USERPWD, config->userpwd);
|
||||
my_setopt_str(curl, CURLOPT_RANGE, config->range);
|
||||
if(!global->parallel) {
|
||||
per->errorbuffer = global_errorbuffer;
|
||||
my_setopt(curl, CURLOPT_ERRORBUFFER, global_errorbuffer);
|
||||
}
|
||||
my_setopt(curl, CURLOPT_ERRORBUFFER, per->errorbuffer);
|
||||
my_setopt_long(curl, CURLOPT_TIMEOUT_MS, config->timeout_ms);
|
||||
|
||||
switch(config->httpreq) {
|
||||
|
||||
@ -582,7 +582,7 @@ static CURLcode post_per_transfer(struct per_transfer *per,
|
||||
(!global->silent || global->showerror)) {
|
||||
const char *msg = per->errorbuffer;
|
||||
fprintf(tool_stderr, "curl: (%d) %s\n", result,
|
||||
(msg && msg[0]) ? msg : curl_easy_strerror(result));
|
||||
msg[0] ? msg : curl_easy_strerror(result));
|
||||
if(result == CURLE_PEER_FAILED_VERIFICATION)
|
||||
fputs(CURL_CA_CERT_ERRORMSG, tool_stderr);
|
||||
}
|
||||
@ -705,8 +705,6 @@ skip:
|
||||
free(per->url);
|
||||
free(per->outfile);
|
||||
free(per->uploadfile);
|
||||
if(global->parallel)
|
||||
free(per->errorbuffer);
|
||||
curl_slist_free_all(per->hdrcbdata.headlist);
|
||||
per->hdrcbdata.headlist = NULL;
|
||||
return result;
|
||||
@ -1346,7 +1344,6 @@ static CURLcode add_parallel_transfers(CURLM *multi, CURLSH *share,
|
||||
CURLcode result = CURLE_OK;
|
||||
CURLMcode mcode;
|
||||
bool sleeping = FALSE;
|
||||
char *errorbuf;
|
||||
curl_off_t nxfers;
|
||||
|
||||
*addedp = FALSE;
|
||||
@ -1381,10 +1378,6 @@ static CURLcode add_parallel_transfers(CURLM *multi, CURLSH *share,
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
errorbuf = malloc(CURL_ERROR_SIZE);
|
||||
if(!errorbuf)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
/* parallel connect means that we do not set PIPEWAIT since pipewait
|
||||
will make libcurl prefer multiplexing */
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_PIPEWAIT,
|
||||
@ -1395,6 +1388,7 @@ static CURLcode add_parallel_transfers(CURLM *multi, CURLSH *share,
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_XFERINFOFUNCTION, xferinfo_cb);
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_XFERINFODATA, per);
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_NOPROGRESS, 0L);
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_ERRORBUFFER, per->errorbuffer);
|
||||
#ifdef DEBUGBUILD
|
||||
if(getenv("CURL_FORBID_REUSE"))
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_FORBID_REUSE, 1L);
|
||||
@ -1415,13 +1409,10 @@ static CURLcode add_parallel_transfers(CURLM *multi, CURLSH *share,
|
||||
break;
|
||||
} while(skipped);
|
||||
}
|
||||
if(result) {
|
||||
free(errorbuf);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
errorbuf[0] = 0;
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_ERRORBUFFER, errorbuf);
|
||||
per->errorbuffer = errorbuf;
|
||||
|
||||
per->errorbuffer[0] = 0;
|
||||
per->added = TRUE;
|
||||
all_added++;
|
||||
*addedp = TRUE;
|
||||
@ -1706,8 +1697,7 @@ static CURLcode check_finished(struct parastate *s)
|
||||
curl_easy_getinfo(easy, CURLINFO_PRIVATE, (void *)&ended);
|
||||
curl_multi_remove_handle(s->multi, easy);
|
||||
|
||||
if(ended->abort && (tres == CURLE_ABORTED_BY_CALLBACK) &&
|
||||
ended->errorbuffer) {
|
||||
if(ended->abort && (tres == CURLE_ABORTED_BY_CALLBACK)) {
|
||||
msnprintf(ended->errorbuffer, CURL_ERROR_SIZE,
|
||||
"Transfer aborted due to critical error "
|
||||
"in another transfer");
|
||||
|
||||
@ -66,8 +66,7 @@ struct per_transfer {
|
||||
|
||||
/* NULL or malloced */
|
||||
char *uploadfile;
|
||||
char *errorbuffer; /* allocated and assigned while this is used for a
|
||||
transfer */
|
||||
char errorbuffer[CURL_ERROR_SIZE];
|
||||
BIT(infdopen); /* TRUE if infd needs closing */
|
||||
BIT(noprogress);
|
||||
BIT(was_last_header_empty);
|
||||
|
||||
@ -361,8 +361,8 @@ static int writeString(FILE *stream, const struct writeoutvar *wovar,
|
||||
break;
|
||||
case VAR_ERRORMSG:
|
||||
if(per_result) {
|
||||
strinfo = (per->errorbuffer && per->errorbuffer[0]) ?
|
||||
per->errorbuffer : curl_easy_strerror(per_result);
|
||||
strinfo = (per->errorbuffer[0]) ? per->errorbuffer :
|
||||
curl_easy_strerror(per_result);
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user