← Commit list

f45bf74b5a

Viktor Szakats
Viktor Szakats
2026-03-21
SUCCESS Duration: 260s

Subject

curl/curl.h: replace recursive macros with C++-friendly method to enforce 3 args

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

CMake/PickyWarnings.cmake+2 -1
@@ -163,7 +163,8 @@ if(PICKY_COMPILER)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.1)
list(APPEND _picky_enable
-Wno-covered-switch-default # clang 3.1 appleclang 3.1 # Annoying to fix or silence
- -Wno-disabled-macro-expansion # clang 3.1 appleclang 3.1 # Triggered by curl/curl.h, standard headers
+ -Wno-disabled-macro-expansion # clang 3.1 appleclang 3.1 # Triggered by standard headers,
+ # and curl/curl.h (in rare combinations)
)
if(MSVC)
list(APPEND _picky_enable
include/curl/curl.h+9 -8
@@ -3324,18 +3324,19 @@ CURL_EXTERN CURLcode curl_easy_ssls_export(CURL *handle,
#include "typecheck-gcc.h"
#else
#if defined(__STDC__) && (__STDC__ >= 1)
-/* This preprocessor magic that replaces a call with the exact same call is
- only done to make sure application authors pass exactly three arguments
- to these functions. Use recursive macros to allow using these symbols via
- the C++ global namespace '::' or reusing them as method names. */
+/* This preprocessor magic ensures that application authors pass exactly three
+ arguments to these functions. For compatibility with C++ global namespace
+ '::' and reusing these symbols as method names, while also avoiding
+ recursive macros, use a two-stage solution. */
+#define curl_exactly_three_arguments(a, b, c) (a, b, c)
#define curl_easy_setopt(handle, opt, param) \
- curl_easy_setopt(handle, opt, param)
+ curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
#define curl_easy_getinfo(handle, info, arg) \
- curl_easy_getinfo(handle, info, arg)
+ curl_easy_getinfo curl_exactly_three_arguments(handle, info, arg)
#define curl_share_setopt(share, opt, param) \
- curl_share_setopt(share, opt, param)
+ curl_share_setopt curl_exactly_three_arguments(share, opt, param)
#define curl_multi_setopt(handle, opt, param) \
- curl_multi_setopt(handle, opt, param)
+ curl_multi_setopt curl_exactly_three_arguments(handle, opt, param)
#endif /* __STDC__ >= 1 */
#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */
m4/curl-compilers.m4+1 -1
@@ -869,7 +869,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
if test "$compiler_num" -ge "301"; then
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [format-non-iso])
tmp_CFLAGS="$tmp_CFLAGS -Wno-covered-switch-default" # Annoying to fix or silence
- tmp_CFLAGS="$tmp_CFLAGS -Wno-disabled-macro-expansion" # Triggered by curl/curl.h, standard headers
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-disabled-macro-expansion" # Triggered by standard headers, and curl/curl.h (in rare combinations)
fi
#
dnl Only clang 3.2 or later