[PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls

Richard W.M. Jones posted 1 patch 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20251009141026.4042021-2-rjones@redhat.com
Maintainers: Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>, Viktor Prutyanov <viktor.prutyanov@phystech.edu>, Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
block/curl.c               | 10 +++++-----
contrib/elf2dmp/download.c |  4 ++--
2 files changed, 7 insertions(+), 7 deletions(-)
[PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls
Posted by Richard W.M. Jones 1 month ago
curl_easy_setopt takes a variable argument that depends on what
CURLOPT you are setting.  Some require a long constant.  Passing a
plain int constant is potentially wrong on some platforms.

With warnings enabled, multiple warnings like this were printed:

../block/curl.c: In function ‘curl_init_state’:
../block/curl.c:474:13: warning: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument [-Wattribute-warning]
  474 |             curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
      |             ^

Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Chenxi Mao <maochenxi@bosc.ac.cn>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
 block/curl.c               | 10 +++++-----
 contrib/elf2dmp/download.c |  4 ++--
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/block/curl.c b/block/curl.c
index e0f98e035a..68cf83ce55 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -471,11 +471,11 @@ static int curl_init_state(BDRVCURLState *s, CURLState *state)
                              (void *)curl_read_cb) ||
             curl_easy_setopt(state->curl, CURLOPT_WRITEDATA, (void *)state) ||
             curl_easy_setopt(state->curl, CURLOPT_PRIVATE, (void *)state) ||
-            curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
-            curl_easy_setopt(state->curl, CURLOPT_FOLLOWLOCATION, 1) ||
-            curl_easy_setopt(state->curl, CURLOPT_NOSIGNAL, 1) ||
+            curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1L) ||
+            curl_easy_setopt(state->curl, CURLOPT_FOLLOWLOCATION, 1L) ||
+            curl_easy_setopt(state->curl, CURLOPT_NOSIGNAL, 1L) ||
             curl_easy_setopt(state->curl, CURLOPT_ERRORBUFFER, state->errmsg) ||
-            curl_easy_setopt(state->curl, CURLOPT_FAILONERROR, 1)) {
+            curl_easy_setopt(state->curl, CURLOPT_FAILONERROR, 1L)) {
             goto err;
         }
         if (s->username) {
@@ -800,7 +800,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
     }
 
     s->accept_range = false;
-    if (curl_easy_setopt(state->curl, CURLOPT_NOBODY, 1) ||
+    if (curl_easy_setopt(state->curl, CURLOPT_NOBODY, 1L) ||
         curl_easy_setopt(state->curl, CURLOPT_HEADERFUNCTION, curl_header_cb) ||
         curl_easy_setopt(state->curl, CURLOPT_HEADERDATA, s)) {
         pstrcpy(state->errmsg, CURL_ERROR_SIZE,
diff --git a/contrib/elf2dmp/download.c b/contrib/elf2dmp/download.c
index 21306b3fd4..fa8da0f9a2 100644
--- a/contrib/elf2dmp/download.c
+++ b/contrib/elf2dmp/download.c
@@ -27,8 +27,8 @@ bool download_url(const char *name, const char *url)
     if (curl_easy_setopt(curl, CURLOPT_URL, url) != CURLE_OK
             || curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL) != CURLE_OK
             || curl_easy_setopt(curl, CURLOPT_WRITEDATA, file) != CURLE_OK
-            || curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1) != CURLE_OK
-            || curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0) != CURLE_OK
+            || curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L) != CURLE_OK
+            || curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L) != CURLE_OK
             || curl_easy_perform(curl) != CURLE_OK) {
         unlink(name);
         fclose(file);
-- 
2.50.1


Re: [PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls
Posted by Kevin Wolf 1 month ago
Am 09.10.2025 um 16:08 hat Richard W.M. Jones geschrieben:
> curl_easy_setopt takes a variable argument that depends on what
> CURLOPT you are setting.  Some require a long constant.  Passing a
> plain int constant is potentially wrong on some platforms.
> 
> With warnings enabled, multiple warnings like this were printed:
> 
> ../block/curl.c: In function ‘curl_init_state’:
> ../block/curl.c:474:13: warning: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument [-Wattribute-warning]
>   474 |             curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
>       |             ^
> 
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> Signed-off-by: Chenxi Mao <maochenxi@bosc.ac.cn>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>

CURLOPT_VERBOSE takes a long, too.

It's hidden behind an #ifdef DEBUG_VERBOSE, so we won't see it in normal
builds, but would be nice to fix it, too.

Kevin


Re: [PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls
Posted by Richard Henderson 1 month ago
On 10/9/25 07:08, Richard W.M. Jones wrote:
> curl_easy_setopt takes a variable argument that depends on what
> CURLOPT you are setting.  Some require a long constant.  Passing a
> plain int constant is potentially wrong on some platforms.
> 
> With warnings enabled, multiple warnings like this were printed:
> 
> ../block/curl.c: In function ‘curl_init_state’:
> ../block/curl.c:474:13: warning: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument [-Wattribute-warning]
>    474 |             curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
>        |             ^
> 
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> Signed-off-by: Chenxi Mao <maochenxi@bosc.ac.cn>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>   block/curl.c               | 10 +++++-----
>   contrib/elf2dmp/download.c |  4 ++--
>   2 files changed, 7 insertions(+), 7 deletions(-)

Thanks.  I directly applied this to master during the last PR batch.


r~

Re: [PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls
Posted by Kevin Wolf 1 month ago
[Restored the original Cc: list]

Am 10.10.2025 um 21:03 hat Richard Henderson geschrieben:
> On 10/9/25 07:08, Richard W.M. Jones wrote:
> > curl_easy_setopt takes a variable argument that depends on what
> > CURLOPT you are setting.  Some require a long constant.  Passing a
> > plain int constant is potentially wrong on some platforms.
> > 
> > With warnings enabled, multiple warnings like this were printed:
> > 
> > ../block/curl.c: In function ‘curl_init_state’:
> > ../block/curl.c:474:13: warning: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument [-Wattribute-warning]
> >    474 |             curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
> >        |             ^

It would have been good to mention on which platforms/compilers/curl
versions you get the warning (and why only now), because I don't see
this warning even after reverting the commit.

It's too late for the commit message now, but maybe we can at least have
it here, in the mailing list thread associated with the Message-ID in
the commit?

> > Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> > Signed-off-by: Chenxi Mao <maochenxi@bosc.ac.cn>
> > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> >   block/curl.c               | 10 +++++-----
> >   contrib/elf2dmp/download.c |  4 ++--
> >   2 files changed, 7 insertions(+), 7 deletions(-)
> 
> Thanks.  I directly applied this to master during the last PR batch.

Please don't drop CCs in replies. This is true in general, but even more
so if it's CCs for the maintainers you're bypassing.

Kevin


Re: [PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls
Posted by Thomas Huth 1 month ago
On 09/10/2025 16.08, Richard W.M. Jones wrote:
> curl_easy_setopt takes a variable argument that depends on what
> CURLOPT you are setting.  Some require a long constant.  Passing a
> plain int constant is potentially wrong on some platforms.
> 
> With warnings enabled, multiple warnings like this were printed:
> 
> ../block/curl.c: In function ‘curl_init_state’:
> ../block/curl.c:474:13: warning: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument [-Wattribute-warning]
>    474 |             curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
>        |             ^
> 
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> Signed-off-by: Chenxi Mao <maochenxi@bosc.ac.cn>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>   block/curl.c               | 10 +++++-----
>   contrib/elf2dmp/download.c |  4 ++--
>   2 files changed, 7 insertions(+), 7 deletions(-)

Thanks, this seems to fix the broken freebsd job in our gitlab CI!

Reviewed-by: Thomas Huth <thuth@redhat.com>


Re: [PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls
Posted by Akihiko Odaki 1 month ago
On 2025/10/09 23:08, Richard W.M. Jones wrote:
> curl_easy_setopt takes a variable argument that depends on what
> CURLOPT you are setting.  Some require a long constant.  Passing a
> plain int constant is potentially wrong on some platforms.
> 
> With warnings enabled, multiple warnings like this were printed:
> 
> ../block/curl.c: In function ‘curl_init_state’:
> ../block/curl.c:474:13: warning: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument [-Wattribute-warning]
>    474 |             curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
>        |             ^
> 
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> Signed-off-by: Chenxi Mao <maochenxi@bosc.ac.cn>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>

Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>

Re: [PATCH v2] block/curl.c: Use explicit long constants in curl_easy_setopt calls
Posted by Richard Henderson 1 month ago
On 10/9/25 07:08, Richard W.M. Jones wrote:
> curl_easy_setopt takes a variable argument that depends on what
> CURLOPT you are setting.  Some require a long constant.  Passing a
> plain int constant is potentially wrong on some platforms.
> 
> With warnings enabled, multiple warnings like this were printed:
> 
> ../block/curl.c: In function ‘curl_init_state’:
> ../block/curl.c:474:13: warning: call to ‘_curl_easy_setopt_err_long’ declared with attribute warning: curl_easy_setopt expects a long argument [-Wattribute-warning]
>    474 |             curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1) ||
>        |             ^
> 
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> Signed-off-by: Chenxi Mao <maochenxi@bosc.ac.cn>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>   block/curl.c               | 10 +++++-----
>   contrib/elf2dmp/download.c |  4 ++--
>   2 files changed, 7 insertions(+), 7 deletions(-)


Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~