[Libguestfs] [nbdkit PATCH] curl: use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T when available

Richard W.M. Jones rjones at redhat.com
Thu Jan 9 13:08:16 UTC 2020


[Adrian - ignore what I said in the previous email.
As you can see there's a patch submitted which does
the right thing aleady.]


On Wed, Jan 08, 2020 at 03:20:48PM +0100, Pino Toscano wrote:
> Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T for curl_easy_getinfo() (added in
> curl 7.55.0) to get the length of a remote file, instead of the old
> CURLINFO_CONTENT_LENGTH_DOWNLOAD. This way the size is already a 64-bit
> integer value, as opposed to a double (the old information).
> ---
>  plugins/curl/curl.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/plugins/curl/curl.c b/plugins/curl/curl.c
> index 1b0d2b9..e0449b7 100644
> --- a/plugins/curl/curl.c
> +++ b/plugins/curl/curl.c
> @@ -70,6 +70,10 @@ static long protocols = CURLPROTO_ALL;
>  /* Use '-D curl.verbose=1' to set. */
>  int curl_debug_verbose = 0;
>  
> +#if CURL_AT_LEAST_VERSION(7, 55, 0)
> +#define HAVE_CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
> +#endif
> +
>  static void
>  curl_load (void)
>  {
> @@ -290,6 +294,9 @@ curl_open (int readonly)
>    struct curl_handle *h;
>    CURLcode r;
>    double d;
> +#ifdef HAVE_CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
> +  curl_off_t o;
> +#endif
>  
>    h = calloc (1, sizeof *h);
>    if (h == NULL) {
> @@ -377,6 +384,21 @@ curl_open (int readonly)
>      goto err;
>    }
>  
> +#ifdef HAVE_CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
> +  r = curl_easy_getinfo (h->c, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &o);
> +  if (r != CURLE_OK) {
> +    display_curl_error (h, r, "could not get length of remote file [%s]", url);
> +    goto err;
> +  }
> +
> +  if (o == -1) {
> +    nbdkit_error ("could not get length of remote file [%s], "
> +                  "is the URL correct?", url);
> +    goto err;
> +  }
> +
> +  h->exportsize = o;
> +#else
>    r = curl_easy_getinfo (h->c, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d);
>    if (r != CURLE_OK) {
>      display_curl_error (h, r, "could not get length of remote file [%s]", url);
> @@ -390,6 +412,7 @@ curl_open (int readonly)
>    }
>  
>    h->exportsize = (size_t) d;
> +#endif
>    nbdkit_debug ("content length: %" PRIi64, h->exportsize);
>  
>    if (strncasecmp (url, "http://", strlen ("http://")) == 0 ||
> -- 

ACK.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list