curl/curl.h: replace recursive macros with C++-friendly method to enforce 3 args
No binary (build failed)
—
(log yok)
| @@ -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 | |
| @@ -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 */ | |
| @@ -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 | |