mirror of
https://github.com/curl/curl.git
synced 2026-07-29 22:28:09 +03:00
change new API function to have error return value
This commit is contained in:
parent
b5930cec1a
commit
8867831c31
5 changed files with 41 additions and 18 deletions
|
|
@ -21,7 +21,9 @@ curl_multi_get_offt - extract information from a multi handle
|
|||
~~~c
|
||||
#include <curl/curl.h>
|
||||
|
||||
curl_off_t curl_multi_get_offt(CURLM *multi, CURLMinfo_offt info);
|
||||
CURLMcode curl_multi_get_offt(CURLM *multi_handle,
|
||||
CURLMinfo_offt info,
|
||||
curl_off_t *pvalue);
|
||||
~~~
|
||||
|
||||
# DESCRIPTION
|
||||
|
|
@ -84,7 +86,7 @@ int main(void)
|
|||
/* add the transfer */
|
||||
curl_multi_add_handle(multi, curl);
|
||||
|
||||
n = curl_multi_get_offt(multi, CURLMINFO_XFERS_ADDED);
|
||||
curl_multi_get_offt(multi, CURLMINFO_XFERS_ADDED, &n);
|
||||
/* on successful add, n is 1 */
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -472,11 +472,11 @@ typedef enum {
|
|||
*
|
||||
* Desc: Retrieves a numeric value for the `CURLMINFO_*` enums.
|
||||
*
|
||||
* Returns: the curl_off_t value from a valid multi handle and
|
||||
* supported `info` or -1.
|
||||
* Returns: CULRM_OK or error when value could not be obtained.
|
||||
*/
|
||||
CURL_EXTERN curl_off_t curl_multi_get_offt(CURLM *multi_handle,
|
||||
CURLMinfo_offt info);
|
||||
CURL_EXTERN CURLMcode curl_multi_get_offt(CURLM *multi_handle,
|
||||
CURLMinfo_offt info,
|
||||
curl_off_t *pvalue);
|
||||
|
||||
/*
|
||||
* Name: curl_push_callback
|
||||
|
|
|
|||
26
lib/multi.c
26
lib/multi.c
|
|
@ -3735,30 +3735,40 @@ CURL **curl_multi_get_handles(CURLM *m)
|
|||
return a;
|
||||
}
|
||||
|
||||
CURL_EXTERN curl_off_t curl_multi_get_offt(CURLM *m, CURLMinfo_offt info)
|
||||
CURLMcode curl_multi_get_offt(CURLM *m,
|
||||
CURLMinfo_offt info,
|
||||
curl_off_t *pvalue)
|
||||
{
|
||||
struct Curl_multi *multi = m;
|
||||
|
||||
if(!GOOD_MULTI_HANDLE(multi))
|
||||
return -1;
|
||||
return CURLM_BAD_HANDLE;
|
||||
if(!pvalue)
|
||||
return CURLM_BAD_FUNCTION_ARGUMENT;
|
||||
|
||||
switch(info) {
|
||||
case CURLMINFO_XFERS_CURRENT: {
|
||||
unsigned int n = Curl_uint_tbl_count(&multi->xfers);
|
||||
if(n && multi->admin)
|
||||
--n;
|
||||
return (curl_off_t)n;
|
||||
*pvalue = (curl_off_t)n;
|
||||
return CURLM_OK;
|
||||
}
|
||||
case CURLMINFO_XFERS_RUNNING:
|
||||
return (curl_off_t)Curl_uint_bset_count(&multi->process);
|
||||
*pvalue = (curl_off_t)Curl_uint_bset_count(&multi->process);
|
||||
return CURLM_OK;
|
||||
case CURLMINFO_XFERS_PENDING:
|
||||
return (curl_off_t)Curl_uint_bset_count(&multi->pending);
|
||||
*pvalue = (curl_off_t)Curl_uint_bset_count(&multi->pending);
|
||||
return CURLM_OK;
|
||||
case CURLMINFO_XFERS_DONE:
|
||||
return (curl_off_t)Curl_uint_bset_count(&multi->msgsent);
|
||||
*pvalue = (curl_off_t)Curl_uint_bset_count(&multi->msgsent);
|
||||
return CURLM_OK;
|
||||
case CURLMINFO_XFERS_ADDED:
|
||||
return multi->xfers_total_ever;
|
||||
*pvalue = multi->xfers_total_ever;
|
||||
return CURLM_OK;
|
||||
default:
|
||||
return -1;
|
||||
*pvalue = -1;
|
||||
return CURLM_UNKNOWN_OPTION;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1416,10 +1416,17 @@ static CURLcode add_parallel_transfers(struct GlobalConfig *global,
|
|||
CURLMcode mcode;
|
||||
bool sleeping = FALSE;
|
||||
char *errorbuf;
|
||||
curl_off_t nxfers;
|
||||
|
||||
*addedp = FALSE;
|
||||
*morep = FALSE;
|
||||
if(curl_multi_get_offt(multi, CURLMINFO_XFERS_CURRENT) <
|
||||
(curl_off_t)(global->parallel_max*2)) {
|
||||
mcode = curl_multi_get_offt(multi, CURLMINFO_XFERS_CURRENT, &nxfers);
|
||||
if(mcode) {
|
||||
DEBUGASSERT(0);
|
||||
return CURLE_UNKNOWN_OPTION;
|
||||
}
|
||||
|
||||
if(nxfers < (curl_off_t)(global->parallel_max*2)) {
|
||||
bool skipped = FALSE;
|
||||
do {
|
||||
result = create_transfer(global, share, addedp, &skipped);
|
||||
|
|
|
|||
|
|
@ -181,6 +181,8 @@ bool progress_meter(struct GlobalConfig *global,
|
|||
struct per_transfer *per;
|
||||
curl_off_t all_dlnow = 0;
|
||||
curl_off_t all_ulnow = 0;
|
||||
curl_off_t xfers_added = 0;
|
||||
curl_off_t xfers_running = 0;
|
||||
bool dlknown = TRUE;
|
||||
bool ulknown = TRUE;
|
||||
curl_off_t speed = 0;
|
||||
|
|
@ -270,6 +272,8 @@ bool progress_meter(struct GlobalConfig *global,
|
|||
}
|
||||
time2str(time_spent, spent);
|
||||
|
||||
(void)curl_multi_get_offt(multi, CURLMINFO_XFERS_ADDED, &xfers_added);
|
||||
(void)curl_multi_get_offt(multi, CURLMINFO_XFERS_RUNNING, &xfers_running);
|
||||
fprintf(tool_stderr,
|
||||
"\r"
|
||||
"%-3s " /* percent downloaded */
|
||||
|
|
@ -288,8 +292,8 @@ bool progress_meter(struct GlobalConfig *global,
|
|||
ulpercen, /* 3 letters */
|
||||
max5data(all_dlnow, buffer[0]),
|
||||
max5data(all_ulnow, buffer[1]),
|
||||
curl_multi_get_offt(multi, CURLMINFO_XFERS_ADDED),
|
||||
curl_multi_get_offt(multi, CURLMINFO_XFERS_RUNNING),
|
||||
xfers_added,
|
||||
xfers_running,
|
||||
time_total,
|
||||
time_spent,
|
||||
time_left,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue