[pacman-dev] [PATCH] Replace CURLOPT_PROGRESSFUNCTION with CURLOPT_XFERINFOFUNCTION

Dave Reisner d at falconindy.com
Tue Aug 30 20:06:32 UTC 2016


On Tue, Aug 30, 2016 at 02:54:31PM -0500, ivy.foster at gmail.com wrote:
> From: Ivy Foster <ivy.foster at gmail.com>
> 
> Curl 7.32.0 added CURLOPT_XFERINFOFUNCTION, which deprecates
> CURLOPT_PROGRESSFUNCTION and means less casting doubles to size_ts for
> alpm. This change has no user-facing nor frontend-facing effects.

Making this change would require that you update configure.ac to bump
the minimum version for libcurl (which is currently 7.19.4). FWIW 7.32.0
was released in August 2013.

> Signed-off-by: Ivy Foster <ivy.foster at gmail.com>
> ---
>  lib/libalpm/dload.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
> index f4e6a27..dc57c92 100644
> --- a/lib/libalpm/dload.c
> +++ b/lib/libalpm/dload.c
> @@ -90,8 +90,8 @@ static void inthandler(int UNUSED signum)
>  	dload_interrupted = ABORT_SIGINT;
>  }
>  
> -static int dload_progress_cb(void *file, double dltotal, double dlnow,
> -		double UNUSED ultotal, double UNUSED ulnow)
> +static int dload_progress_cb(void *file, curl_off_t dltotal, curl_off_t dlnow,
> +		curl_off_t UNUSED ultotal, curl_off_t UNUSED ulnow)
>  {
>  	struct dload_payload *payload = (struct dload_payload *)file;
>  	off_t current_size, total_size;
> @@ -106,7 +106,7 @@ static int dload_progress_cb(void *file, double dltotal, double dlnow,
>  		return 1;
>  	}
>  
> -	current_size = payload->initial_size + (off_t)dlnow;
> +	current_size = payload->initial_size + dlnow;
>  
>  	/* is our filesize still under any set limit? */
>  	if(payload->max_size && current_size > payload->max_size) {
> @@ -119,9 +119,9 @@ static int dload_progress_cb(void *file, double dltotal, double dlnow,
>  		return 0;
>  	}
>  
> -	total_size = payload->initial_size + (off_t)dltotal;
> +	total_size = payload->initial_size + dltotal;
>  
> -	if(DOUBLE_EQ(dltotal, 0.0) || payload->prevprogress == total_size) {
> +	if(dltotal == 0 || payload->prevprogress == total_size) {
>  		return 0;
>  	}
>  
> @@ -134,7 +134,7 @@ static int dload_progress_cb(void *file, double dltotal, double dlnow,
>  	 * x {x>0}, x: download complete
>  	 * x {x>0, x<y}, y {y > 0}: download progress, expected total is known */
>  	if(current_size == total_size) {
> -		payload->handle->dlcb(payload->remote_name, (off_t)dlnow, (off_t)dltotal);
> +		payload->handle->dlcb(payload->remote_name, dlnow, dltotal);
>  	} else if(!payload->prevprogress) {
>  		payload->handle->dlcb(payload->remote_name, 0, -1);
>  	} else if(payload->prevprogress == current_size) {
> @@ -142,7 +142,7 @@ static int dload_progress_cb(void *file, double dltotal, double dlnow,
>  	} else {
>  	/* do NOT include initial_size since it wasn't part of the package's
>  	 * download_size (nor included in the total download size callback) */
> -		payload->handle->dlcb(payload->remote_name, (off_t)dlnow, (off_t)dltotal);
> +		payload->handle->dlcb(payload->remote_name, dlnow, dltotal);
>  	}
>  
>  	payload->prevprogress = current_size;
> @@ -303,8 +303,8 @@ static void curl_set_handle_opts(struct dload_payload *payload,
>  	curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
>  	curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
>  	curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
> -	curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, dload_progress_cb);
> -	curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, (void *)payload);
> +	curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, dload_progress_cb);
> +	curl_easy_setopt(curl, CURLOPT_XFERINFODATA, (void *)payload);
>  	curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1L);
>  	curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 10L);
>  	curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, dload_parseheader_cb);
> -- 
> 2.9.3


More information about the pacman-dev mailing list