From 2285c462ebb0b5d9a7043719a4f0d684a5dc37c2 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Mon, 9 Jan 2023 10:09:52 +0100 Subject: [PATCH 1/2] import: use CURLINFO_SCHEME instead of CURLINFO_PROTOCOL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CURLINFO_PROTOCOL has been deprecated in curl 7.85.0 causing compilation warnings/errors: ../build/src/import/pull-job.c: In function ‘pull_job_curl_on_finished’: ../build/src/import/pull-job.c:142:9: error: ‘CURLINFO_PROTOCOL’ is deprecated: since 7.85.0. Use CURLINFO_SCHEME [-Werror=deprecated-declarations] 142 | code = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol); | ^~~~ In file included from ../build/src/import/curl-util.h:4, from ../build/src/import/pull-job.h:6, from ../build/src/import/pull-common.h:7, from ../build/src/import/pull-job.c:16: /usr/include/curl/curl.h:2896:3: note: declared here 2896 | CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") | ^~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors Since both CURLINFO_SCHEME and CURLINFO_PROTOCOL were introduced in the same curl version (7.52.0 [0][1]) we don't have to worry about backwards compatibility. [0] https://curl.se/libcurl/c/CURLINFO_SCHEME.html [1] https://curl.se/libcurl/c/CURLINFO_PROTOCOL.html --- src/import/pull-job.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/import/pull-job.c b/src/import/pull-job.c index ce7642e897..d8402f753e 100644 --- a/src/import/pull-job.c +++ b/src/import/pull-job.c @@ -124,8 +124,8 @@ static int pull_job_restart(PullJob *j, const char *new_url) { void pull_job_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result) { PullJob *j = NULL; + char *scheme = NULL; CURLcode code; - long protocol; int r; if (curl_easy_getinfo(curl, CURLINFO_PRIVATE, (char **)&j) != CURLE_OK) @@ -139,13 +139,13 @@ void pull_job_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result) { goto finish; } - code = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol); - if (code != CURLE_OK) { - r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve response code: %s", curl_easy_strerror(code)); + code = curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme); + if (code != CURLE_OK || !scheme) { + r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve URL scheme."); goto finish; } - if (IN_SET(protocol, CURLPROTO_HTTP, CURLPROTO_HTTPS)) { + if (STRCASE_IN_SET(scheme, "HTTP", "HTTPS")) { long status; code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status); From e61a4c0b7c79eabbe4eb50ff2e663734fde769f0 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Mon, 9 Jan 2023 12:44:28 +0100 Subject: [PATCH 2/2] import: use CURLOPT_PROTOCOLS_STR with libcurl >= 7.85.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CURLOPT_PROTOCOLS [0] was deprecated in libcurl 7.85.0 with CURLOPT_PROTOCOLS_STR [1] as a replacement, causing build warnings/errors: ../build/src/import/curl-util.c: In function ‘curl_glue_make’: ../build/src/import/curl-util.c:255:9: error: ‘CURLOPT_PROTOCOLS’ is deprecated: since 7.85.0. Use CURLOPT_PROTOCOLS_STR [-Werror=deprecated-declarations] 255 | if (curl_easy_setopt(c, CURLOPT_PROTOCOLS, CURLPROTO_HTTP|CURLPROTO_HTTPS|CURLPROTO_FILE) != CURLE_OK) | ^~ In file included from ../build/src/import/curl-util.h:4, from ../build/src/import/curl-util.c:6: /usr/include/curl/curl.h:1749:3: note: declared here 1749 | CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, | ^~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors Since there's no grace period between the two symbols, let's resort to a light if-def-ery to resolve this. [0] https://curl.se/libcurl/c/CURLOPT_PROTOCOLS.html [1] https://curl.se/libcurl/c/CURLOPT_PROTOCOLS_STR.html --- src/import/curl-util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/import/curl-util.c b/src/import/curl-util.c index c124c985b9..94f718de17 100644 --- a/src/import/curl-util.c +++ b/src/import/curl-util.c @@ -252,7 +252,11 @@ int curl_glue_make(CURL **ret, const char *url, void *userdata) { if (curl_easy_setopt(c, CURLOPT_LOW_SPEED_LIMIT, 30L) != CURLE_OK) return -EIO; +#if LIBCURL_VERSION_NUM >= 0x075500 /* libcurl 7.85.0 */ + if (curl_easy_setopt(c, CURLOPT_PROTOCOLS_STR, "HTTP,HTTPS,FILE") != CURLE_OK) +#else if (curl_easy_setopt(c, CURLOPT_PROTOCOLS, CURLPROTO_HTTP|CURLPROTO_HTTPS|CURLPROTO_FILE) != CURLE_OK) +#endif return -EIO; *ret = TAKE_PTR(c);