]> git.ipfire.org Git - thirdparty/git.git/commitdiff
curl: pass `long` values where expected
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 6 Jun 2025 09:29:24 +0000 (09:29 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 6 Jun 2025 15:12:24 +0000 (08:12 -0700)
As of Homebrew's update to cURL v8.14.0, there are new compile errors to
be observed in the `osx-gcc` job of Git's CI builds:

  In file included from http.h:8,
                   from imap-send.c:36:
  In function 'setup_curl',
      inlined from 'curl_append_msgs_to_imap' at imap-send.c:1460:9,
      inlined from 'cmd_main' at imap-send.c:1581:9:
  /usr/local/Cellar/curl/8.14.0/include/curl/typecheck-gcc.h:50:15: error: call to '_curl_easy_setopt_err_long' declared with attribute warning: curl_easy_setopt expects a long argument [-Werror=attribute-warning]
     50 |               _curl_easy_setopt_err_long();                             \
        |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /usr/local/Cellar/curl/8.14.0/include/curl/curl.h:54:7: note: in definition of macro 'CURL_IGNORE_DEPRECATION'
     54 |       statements \
        |       ^~~~~~~~~~
  imap-send.c:1423:9: note: in expansion of macro 'curl_easy_setopt'
   1423 |         curl_easy_setopt(curl, CURLOPT_PORT, srvc->port);
        |         ^~~~~~~~~~~~~~~~
  [... many more instances of nearly identical warnings...]

See for example this CI workflow run:
https://github.com/git/git/actions/runs/15454602308/job/43504278284#step:4:307

The most likely explanation is the entry "typecheck-gcc.h: fix the
typechecks" in cURL's release notes (https://curl.se/ch/8.14.0.html).

Nearly identical compile errors afflicted recently-updated Debian
setups, which have been addressed by `jk/curl-easy-setopt-typefix`.

However, on macOS Git is built with different build options, which
uncovered more instances of `int` values that need to be cast to
constants, which were not covered by 6f11c42e8edc (curl: fix integer
constant typechecks with curl_easy_setopt(), 2025-06-04). Let's
explicitly convert even those remaining `int` constants in
`curl_easy_setopt()` calls to `long` parameters.

In addition to looking at the compile errors of the `osx-gcc` job, I
verified that there are no other instances of the same issue that need
to be handled in this manner (and that might not be caught by our CI
builds because of yet other build options that might skip those code
parts), I ran the following command and inspected all 23 results
manually to ensure that the fix is now actually complete:

  git grep -n curl_easy_setopt |
  grep -ve ',.*, *[A-Za-z_"&]' \
    -e ',.*, *[-0-9]*L)' \
    -e ',.*,.* (long)'

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http-push.c
http.c
remote-curl.c

index 591e46ab260d57f20425790668c74070267f01da..f5a92529a8406b5cce2d60e1dddb518a84ed2394 100644 (file)
@@ -205,7 +205,7 @@ static void curl_setup_http(CURL *curl, const char *url,
                const char *custom_req, struct buffer *buffer,
                curl_write_callback write_fn)
 {
-       curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
+       curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_INFILE, buffer);
        curl_easy_setopt(curl, CURLOPT_INFILESIZE, buffer->buf.len);
@@ -213,9 +213,9 @@ static void curl_setup_http(CURL *curl, const char *url,
        curl_easy_setopt(curl, CURLOPT_SEEKFUNCTION, seek_buffer);
        curl_easy_setopt(curl, CURLOPT_SEEKDATA, buffer);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_fn);
-       curl_easy_setopt(curl, CURLOPT_NOBODY, 0);
+       curl_easy_setopt(curl, CURLOPT_NOBODY, 0L);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req);
-       curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
+       curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 }
 
 static struct curl_slist *get_dav_token_headers(struct remote_lock *lock, enum dav_header_flag options)
diff --git a/http.c b/http.c
index ecbc47ea4b3f27e03607fdb982f392ace3b209ae..d88e79fbde9c4c707c6f14aeffe6e0ac312224bf 100644 (file)
--- a/http.c
+++ b/http.c
@@ -1540,9 +1540,9 @@ struct active_request_slot *get_active_slot(void)
        curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, NULL);
        curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDS, NULL);
        curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDSIZE, -1L);
-       curl_easy_setopt(slot->curl, CURLOPT_UPLOAD, 0);
-       curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
-       curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 1);
+       curl_easy_setopt(slot->curl, CURLOPT_UPLOAD, 0L);
+       curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1L);
+       curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 1L);
        curl_easy_setopt(slot->curl, CURLOPT_RANGE, NULL);
 
        /*
@@ -1551,9 +1551,9 @@ struct active_request_slot *get_active_slot(void)
         * HTTP_FOLLOW_* cases themselves.
         */
        if (http_follow_config == HTTP_FOLLOW_ALWAYS)
-               curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1);
+               curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1L);
        else
-               curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0);
+               curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0L);
 
        curl_easy_setopt(slot->curl, CURLOPT_IPRESOLVE, git_curl_ipresolve);
        curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
@@ -2120,12 +2120,12 @@ static int http_request(const char *url,
        int ret;
 
        slot = get_active_slot();
-       curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
+       curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1L);
 
        if (!result) {
-               curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1);
+               curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1L);
        } else {
-               curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
+               curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0L);
                curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, result);
 
                if (target == HTTP_REQUEST_FILE) {
@@ -2151,7 +2151,7 @@ static int http_request(const char *url,
                strbuf_addstr(&buf, " no-cache");
        if (options && options->initial_request &&
            http_follow_config == HTTP_FOLLOW_INITIAL)
-               curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1);
+               curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1L);
 
        headers = curl_slist_append(headers, buf.buf);
 
@@ -2170,7 +2170,7 @@ static int http_request(const char *url,
        curl_easy_setopt(slot->curl, CURLOPT_URL, url);
        curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
-       curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0);
+       curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0L);
 
        ret = run_one_slot(slot, &results);
 
@@ -2750,7 +2750,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
        freq->headers = object_request_headers();
 
        curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEDATA, freq);
-       curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0);
+       curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0L);
        curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
        curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
        curl_easy_setopt(freq->slot->curl, CURLOPT_URL, freq->url);
index 6183772191f2145e1dd76bd20dcf6f5cb27b983a..b8bc3a80cf4142ce03c357f3c4d28ef0822c95a6 100644 (file)
@@ -970,8 +970,8 @@ retry:
 
        slot = get_active_slot();
 
-       curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
-       curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
+       curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0L);
+       curl_easy_setopt(slot->curl, CURLOPT_POST, 1L);
        curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
        curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
 
@@ -1058,7 +1058,7 @@ retry:
        rpc_in_data.check_pktline = stateless_connect;
        memset(&rpc_in_data.pktline_state, 0, sizeof(rpc_in_data.pktline_state));
        curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &rpc_in_data);
-       curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0);
+       curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0L);
 
 
        rpc->any_written = 0;