1*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_SETUP_H 2*6236dae4SAndroid Build Coastguard Worker #define HEADER_CURL_SETUP_H 3*6236dae4SAndroid Build Coastguard Worker /*************************************************************************** 4*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _ 5*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| | 6*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | | 7*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___ 8*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____| 9*6236dae4SAndroid Build Coastguard Worker * 10*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al. 11*6236dae4SAndroid Build Coastguard Worker * 12*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which 13*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms 14*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html. 15*6236dae4SAndroid Build Coastguard Worker * 16*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is 18*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file. 19*6236dae4SAndroid Build Coastguard Worker * 20*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied. 22*6236dae4SAndroid Build Coastguard Worker * 23*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl 24*6236dae4SAndroid Build Coastguard Worker * 25*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/ 26*6236dae4SAndroid Build Coastguard Worker 27*6236dae4SAndroid Build Coastguard Worker #if defined(BUILDING_LIBCURL) && !defined(CURL_NO_OLDIES) 28*6236dae4SAndroid Build Coastguard Worker #define CURL_NO_OLDIES 29*6236dae4SAndroid Build Coastguard Worker #endif 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Worker /* Tell "curl/curl.h" not to include "curl/mprintf.h" */ 32*6236dae4SAndroid Build Coastguard Worker #define CURL_SKIP_INCLUDE_MPRINTF 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard Worker /* FIXME: Delete this once the warnings have been fixed. */ 35*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_WARN_SIGN_CONVERSION) 36*6236dae4SAndroid Build Coastguard Worker #if defined(__GNUC__) || defined(__clang__) 37*6236dae4SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wsign-conversion" 38*6236dae4SAndroid Build Coastguard Worker #endif 39*6236dae4SAndroid Build Coastguard Worker #endif 40*6236dae4SAndroid Build Coastguard Worker 41*6236dae4SAndroid Build Coastguard Worker /* Set default _WIN32_WINNT */ 42*6236dae4SAndroid Build Coastguard Worker #ifdef __MINGW32__ 43*6236dae4SAndroid Build Coastguard Worker #include <_mingw.h> 44*6236dae4SAndroid Build Coastguard Worker #endif 45*6236dae4SAndroid Build Coastguard Worker 46*6236dae4SAndroid Build Coastguard Worker /* Workaround for Homebrew gcc 12.4.0, 13.3.0, 14.1.0 and newer (as of 14.1.0) 47*6236dae4SAndroid Build Coastguard Worker that started advertising the `availability` attribute, which then gets used 48*6236dae4SAndroid Build Coastguard Worker by Apple SDK, but, in a way incompatible with gcc, resulting in misc errors 49*6236dae4SAndroid Build Coastguard Worker inside SDK headers, e.g.: 50*6236dae4SAndroid Build Coastguard Worker error: attributes should be specified before the declarator in a function 51*6236dae4SAndroid Build Coastguard Worker definition 52*6236dae4SAndroid Build Coastguard Worker error: expected ',' or '}' before 53*6236dae4SAndroid Build Coastguard Worker Followed by missing declarations. 54*6236dae4SAndroid Build Coastguard Worker Fix it by overriding the built-in feature-check macro used by the headers 55*6236dae4SAndroid Build Coastguard Worker to enable the problematic attributes. This makes the feature check fail. */ 56*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__) && \ 57*6236dae4SAndroid Build Coastguard Worker !defined(__clang__) && \ 58*6236dae4SAndroid Build Coastguard Worker defined(__GNUC__) && __GNUC__ >= 12 && \ 59*6236dae4SAndroid Build Coastguard Worker defined(__has_attribute) 60*6236dae4SAndroid Build Coastguard Worker #define availability curl_pp_attribute_disabled 61*6236dae4SAndroid Build Coastguard Worker #endif 62*6236dae4SAndroid Build Coastguard Worker 63*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__) 64*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h> 65*6236dae4SAndroid Build Coastguard Worker #include <TargetConditionals.h> 66*6236dae4SAndroid Build Coastguard Worker /* Fixup faulty target macro initialization in macOS SDK since v14.4 (as of 67*6236dae4SAndroid Build Coastguard Worker 15.0 beta). The SDK target detection in `TargetConditionals.h` correctly 68*6236dae4SAndroid Build Coastguard Worker detects macOS, but fails to set the macro's old name `TARGET_OS_OSX`, then 69*6236dae4SAndroid Build Coastguard Worker continues to set it to a default value of 0. Other parts of the SDK still 70*6236dae4SAndroid Build Coastguard Worker rely on the old name, and with this inconsistency our builds fail due to 71*6236dae4SAndroid Build Coastguard Worker missing declarations. It happens when using mainline llvm older than v18. 72*6236dae4SAndroid Build Coastguard Worker Later versions fixed it by predefining these target macros, avoiding the 73*6236dae4SAndroid Build Coastguard Worker faulty dynamic detection. gcc is not affected (for now) because it lacks 74*6236dae4SAndroid Build Coastguard Worker the necessary dynamic detection features, so the SDK falls back to 75*6236dae4SAndroid Build Coastguard Worker a codepath that sets both the old and new macro to 1. */ 76*6236dae4SAndroid Build Coastguard Worker #if defined(TARGET_OS_MAC) && TARGET_OS_MAC && \ 77*6236dae4SAndroid Build Coastguard Worker defined(TARGET_OS_OSX) && !TARGET_OS_OSX && \ 78*6236dae4SAndroid Build Coastguard Worker (!defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE) && \ 79*6236dae4SAndroid Build Coastguard Worker (!defined(TARGET_OS_SIMULATOR) || !TARGET_OS_SIMULATOR) 80*6236dae4SAndroid Build Coastguard Worker #undef TARGET_OS_OSX 81*6236dae4SAndroid Build Coastguard Worker #define TARGET_OS_OSX TARGET_OS_MAC 82*6236dae4SAndroid Build Coastguard Worker #endif 83*6236dae4SAndroid Build Coastguard Worker #endif 84*6236dae4SAndroid Build Coastguard Worker 85*6236dae4SAndroid Build Coastguard Worker /* 86*6236dae4SAndroid Build Coastguard Worker * Disable Visual Studio warnings: 87*6236dae4SAndroid Build Coastguard Worker * 4127 "conditional expression is constant" 88*6236dae4SAndroid Build Coastguard Worker */ 89*6236dae4SAndroid Build Coastguard Worker #ifdef _MSC_VER 90*6236dae4SAndroid Build Coastguard Worker #pragma warning(disable:4127) 91*6236dae4SAndroid Build Coastguard Worker #endif 92*6236dae4SAndroid Build Coastguard Worker 93*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32 94*6236dae4SAndroid Build Coastguard Worker /* 95*6236dae4SAndroid Build Coastguard Worker * Do not include unneeded stuff in Windows headers to avoid compiler 96*6236dae4SAndroid Build Coastguard Worker * warnings and macro clashes. 97*6236dae4SAndroid Build Coastguard Worker * Make sure to define this macro before including any Windows headers. 98*6236dae4SAndroid Build Coastguard Worker */ 99*6236dae4SAndroid Build Coastguard Worker # ifndef WIN32_LEAN_AND_MEAN 100*6236dae4SAndroid Build Coastguard Worker # define WIN32_LEAN_AND_MEAN 101*6236dae4SAndroid Build Coastguard Worker # endif 102*6236dae4SAndroid Build Coastguard Worker # ifndef NOGDI 103*6236dae4SAndroid Build Coastguard Worker # define NOGDI 104*6236dae4SAndroid Build Coastguard Worker # endif 105*6236dae4SAndroid Build Coastguard Worker /* Detect Windows App environment which has a restricted access 106*6236dae4SAndroid Build Coastguard Worker * to the Win32 APIs. */ 107*6236dae4SAndroid Build Coastguard Worker # if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)) || \ 108*6236dae4SAndroid Build Coastguard Worker defined(WINAPI_FAMILY) 109*6236dae4SAndroid Build Coastguard Worker # include <winapifamily.h> 110*6236dae4SAndroid Build Coastguard Worker # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \ 111*6236dae4SAndroid Build Coastguard Worker !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 112*6236dae4SAndroid Build Coastguard Worker # define CURL_WINDOWS_UWP 113*6236dae4SAndroid Build Coastguard Worker # endif 114*6236dae4SAndroid Build Coastguard Worker # endif 115*6236dae4SAndroid Build Coastguard Worker #endif 116*6236dae4SAndroid Build Coastguard Worker 117*6236dae4SAndroid Build Coastguard Worker /* Compatibility */ 118*6236dae4SAndroid Build Coastguard Worker #if defined(ENABLE_IPV6) 119*6236dae4SAndroid Build Coastguard Worker # define USE_IPV6 1 120*6236dae4SAndroid Build Coastguard Worker #endif 121*6236dae4SAndroid Build Coastguard Worker 122*6236dae4SAndroid Build Coastguard Worker /* 123*6236dae4SAndroid Build Coastguard Worker * Include configuration script results or hand-crafted 124*6236dae4SAndroid Build Coastguard Worker * configuration file for platforms which lack config tool. 125*6236dae4SAndroid Build Coastguard Worker */ 126*6236dae4SAndroid Build Coastguard Worker 127*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_CONFIG_H 128*6236dae4SAndroid Build Coastguard Worker 129*6236dae4SAndroid Build Coastguard Worker #include "curl_config.h" 130*6236dae4SAndroid Build Coastguard Worker 131*6236dae4SAndroid Build Coastguard Worker #else /* HAVE_CONFIG_H */ 132*6236dae4SAndroid Build Coastguard Worker 133*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32_WCE 134*6236dae4SAndroid Build Coastguard Worker # include "config-win32ce.h" 135*6236dae4SAndroid Build Coastguard Worker #else 136*6236dae4SAndroid Build Coastguard Worker # ifdef _WIN32 137*6236dae4SAndroid Build Coastguard Worker # include "config-win32.h" 138*6236dae4SAndroid Build Coastguard Worker # endif 139*6236dae4SAndroid Build Coastguard Worker #endif 140*6236dae4SAndroid Build Coastguard Worker 141*6236dae4SAndroid Build Coastguard Worker #ifdef macintosh 142*6236dae4SAndroid Build Coastguard Worker # include "config-mac.h" 143*6236dae4SAndroid Build Coastguard Worker #endif 144*6236dae4SAndroid Build Coastguard Worker 145*6236dae4SAndroid Build Coastguard Worker #ifdef __riscos__ 146*6236dae4SAndroid Build Coastguard Worker # include "config-riscos.h" 147*6236dae4SAndroid Build Coastguard Worker #endif 148*6236dae4SAndroid Build Coastguard Worker 149*6236dae4SAndroid Build Coastguard Worker #ifdef __AMIGA__ 150*6236dae4SAndroid Build Coastguard Worker # include "config-amigaos.h" 151*6236dae4SAndroid Build Coastguard Worker #endif 152*6236dae4SAndroid Build Coastguard Worker 153*6236dae4SAndroid Build Coastguard Worker #ifdef __OS400__ 154*6236dae4SAndroid Build Coastguard Worker # include "config-os400.h" 155*6236dae4SAndroid Build Coastguard Worker #endif 156*6236dae4SAndroid Build Coastguard Worker 157*6236dae4SAndroid Build Coastguard Worker #ifdef __PLAN9__ 158*6236dae4SAndroid Build Coastguard Worker # include "config-plan9.h" 159*6236dae4SAndroid Build Coastguard Worker #endif 160*6236dae4SAndroid Build Coastguard Worker 161*6236dae4SAndroid Build Coastguard Worker #ifdef MSDOS 162*6236dae4SAndroid Build Coastguard Worker # include "config-dos.h" 163*6236dae4SAndroid Build Coastguard Worker #endif 164*6236dae4SAndroid Build Coastguard Worker 165*6236dae4SAndroid Build Coastguard Worker #endif /* HAVE_CONFIG_H */ 166*6236dae4SAndroid Build Coastguard Worker 167*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */ 168*6236dae4SAndroid Build Coastguard Worker /* Definition of preprocessor macros/symbols which modify compiler */ 169*6236dae4SAndroid Build Coastguard Worker /* behavior or generated code characteristics must be done here, */ 170*6236dae4SAndroid Build Coastguard Worker /* as appropriate, before any system header file is included. It is */ 171*6236dae4SAndroid Build Coastguard Worker /* also possible to have them defined in the config file included */ 172*6236dae4SAndroid Build Coastguard Worker /* before this point. As a result of all this we frown inclusion of */ 173*6236dae4SAndroid Build Coastguard Worker /* system header files in our config files, avoid this at any cost. */ 174*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */ 175*6236dae4SAndroid Build Coastguard Worker 176*6236dae4SAndroid Build Coastguard Worker /* 177*6236dae4SAndroid Build Coastguard Worker * AIX 4.3 and newer needs _THREAD_SAFE defined to build 178*6236dae4SAndroid Build Coastguard Worker * proper reentrant code. Others may also need it. 179*6236dae4SAndroid Build Coastguard Worker */ 180*6236dae4SAndroid Build Coastguard Worker 181*6236dae4SAndroid Build Coastguard Worker #ifdef NEED_THREAD_SAFE 182*6236dae4SAndroid Build Coastguard Worker # ifndef _THREAD_SAFE 183*6236dae4SAndroid Build Coastguard Worker # define _THREAD_SAFE 184*6236dae4SAndroid Build Coastguard Worker # endif 185*6236dae4SAndroid Build Coastguard Worker #endif 186*6236dae4SAndroid Build Coastguard Worker 187*6236dae4SAndroid Build Coastguard Worker /* 188*6236dae4SAndroid Build Coastguard Worker * Tru64 needs _REENTRANT set for a few function prototypes and 189*6236dae4SAndroid Build Coastguard Worker * things to appear in the system header files. Unixware needs it 190*6236dae4SAndroid Build Coastguard Worker * to build proper reentrant code. Others may also need it. 191*6236dae4SAndroid Build Coastguard Worker */ 192*6236dae4SAndroid Build Coastguard Worker 193*6236dae4SAndroid Build Coastguard Worker #ifdef NEED_REENTRANT 194*6236dae4SAndroid Build Coastguard Worker # ifndef _REENTRANT 195*6236dae4SAndroid Build Coastguard Worker # define _REENTRANT 196*6236dae4SAndroid Build Coastguard Worker # endif 197*6236dae4SAndroid Build Coastguard Worker #endif 198*6236dae4SAndroid Build Coastguard Worker 199*6236dae4SAndroid Build Coastguard Worker /* Solaris needs this to get a POSIX-conformant getpwuid_r */ 200*6236dae4SAndroid Build Coastguard Worker #if defined(sun) || defined(__sun) 201*6236dae4SAndroid Build Coastguard Worker # ifndef _POSIX_PTHREAD_SEMANTICS 202*6236dae4SAndroid Build Coastguard Worker # define _POSIX_PTHREAD_SEMANTICS 1 203*6236dae4SAndroid Build Coastguard Worker # endif 204*6236dae4SAndroid Build Coastguard Worker #endif 205*6236dae4SAndroid Build Coastguard Worker 206*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */ 207*6236dae4SAndroid Build Coastguard Worker /* If you need to include a system header file for your platform, */ 208*6236dae4SAndroid Build Coastguard Worker /* please, do it beyond the point further indicated in this file. */ 209*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */ 210*6236dae4SAndroid Build Coastguard Worker 211*6236dae4SAndroid Build Coastguard Worker /* Give calloc a chance to be dragging in early, so we do not redefine */ 212*6236dae4SAndroid Build Coastguard Worker #if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H) 213*6236dae4SAndroid Build Coastguard Worker # include <pthread.h> 214*6236dae4SAndroid Build Coastguard Worker #endif 215*6236dae4SAndroid Build Coastguard Worker 216*6236dae4SAndroid Build Coastguard Worker /* 217*6236dae4SAndroid Build Coastguard Worker * Disable other protocols when http is the only one desired. 218*6236dae4SAndroid Build Coastguard Worker */ 219*6236dae4SAndroid Build Coastguard Worker 220*6236dae4SAndroid Build Coastguard Worker #ifdef HTTP_ONLY 221*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_DICT 222*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_DICT 223*6236dae4SAndroid Build Coastguard Worker # endif 224*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_FILE 225*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_FILE 226*6236dae4SAndroid Build Coastguard Worker # endif 227*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_FTP 228*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_FTP 229*6236dae4SAndroid Build Coastguard Worker # endif 230*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_GOPHER 231*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_GOPHER 232*6236dae4SAndroid Build Coastguard Worker # endif 233*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_IMAP 234*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_IMAP 235*6236dae4SAndroid Build Coastguard Worker # endif 236*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_LDAP 237*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_LDAP 238*6236dae4SAndroid Build Coastguard Worker # endif 239*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_LDAPS 240*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_LDAPS 241*6236dae4SAndroid Build Coastguard Worker # endif 242*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_MQTT 243*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_MQTT 244*6236dae4SAndroid Build Coastguard Worker # endif 245*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_POP3 246*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_POP3 247*6236dae4SAndroid Build Coastguard Worker # endif 248*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_RTSP 249*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_RTSP 250*6236dae4SAndroid Build Coastguard Worker # endif 251*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_SMB 252*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_SMB 253*6236dae4SAndroid Build Coastguard Worker # endif 254*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_SMTP 255*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_SMTP 256*6236dae4SAndroid Build Coastguard Worker # endif 257*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_TELNET 258*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_TELNET 259*6236dae4SAndroid Build Coastguard Worker # endif 260*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_TFTP 261*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_TFTP 262*6236dae4SAndroid Build Coastguard Worker # endif 263*6236dae4SAndroid Build Coastguard Worker #endif 264*6236dae4SAndroid Build Coastguard Worker 265*6236dae4SAndroid Build Coastguard Worker /* 266*6236dae4SAndroid Build Coastguard Worker * When http is disabled rtsp is not supported. 267*6236dae4SAndroid Build Coastguard Worker */ 268*6236dae4SAndroid Build Coastguard Worker 269*6236dae4SAndroid Build Coastguard Worker #if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP) 270*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_RTSP 271*6236dae4SAndroid Build Coastguard Worker #endif 272*6236dae4SAndroid Build Coastguard Worker 273*6236dae4SAndroid Build Coastguard Worker /* 274*6236dae4SAndroid Build Coastguard Worker * When HTTP is disabled, disable HTTP-only features 275*6236dae4SAndroid Build Coastguard Worker */ 276*6236dae4SAndroid Build Coastguard Worker 277*6236dae4SAndroid Build Coastguard Worker #if defined(CURL_DISABLE_HTTP) 278*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_ALTSVC 1 279*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_COOKIES 1 280*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_BASIC_AUTH 1 281*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_BEARER_AUTH 1 282*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_AWS 1 283*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_DOH 1 284*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_FORM_API 1 285*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_HEADERS_API 1 286*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_HSTS 1 287*6236dae4SAndroid Build Coastguard Worker # define CURL_DISABLE_HTTP_AUTH 1 288*6236dae4SAndroid Build Coastguard Worker #endif 289*6236dae4SAndroid Build Coastguard Worker 290*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */ 291*6236dae4SAndroid Build Coastguard Worker /* No system header file shall be included in this file before this */ 292*6236dae4SAndroid Build Coastguard Worker /* point. */ 293*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */ 294*6236dae4SAndroid Build Coastguard Worker 295*6236dae4SAndroid Build Coastguard Worker /* 296*6236dae4SAndroid Build Coastguard Worker * OS/400 setup file includes some system headers. 297*6236dae4SAndroid Build Coastguard Worker */ 298*6236dae4SAndroid Build Coastguard Worker 299*6236dae4SAndroid Build Coastguard Worker #ifdef __OS400__ 300*6236dae4SAndroid Build Coastguard Worker # include "setup-os400.h" 301*6236dae4SAndroid Build Coastguard Worker #endif 302*6236dae4SAndroid Build Coastguard Worker 303*6236dae4SAndroid Build Coastguard Worker /* 304*6236dae4SAndroid Build Coastguard Worker * VMS setup file includes some system headers. 305*6236dae4SAndroid Build Coastguard Worker */ 306*6236dae4SAndroid Build Coastguard Worker 307*6236dae4SAndroid Build Coastguard Worker #ifdef __VMS 308*6236dae4SAndroid Build Coastguard Worker # include "setup-vms.h" 309*6236dae4SAndroid Build Coastguard Worker #endif 310*6236dae4SAndroid Build Coastguard Worker 311*6236dae4SAndroid Build Coastguard Worker /* 312*6236dae4SAndroid Build Coastguard Worker * Windows setup file includes some system headers. 313*6236dae4SAndroid Build Coastguard Worker */ 314*6236dae4SAndroid Build Coastguard Worker 315*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32 316*6236dae4SAndroid Build Coastguard Worker # include "setup-win32.h" 317*6236dae4SAndroid Build Coastguard Worker #endif 318*6236dae4SAndroid Build Coastguard Worker 319*6236dae4SAndroid Build Coastguard Worker #include <curl/system.h> 320*6236dae4SAndroid Build Coastguard Worker 321*6236dae4SAndroid Build Coastguard Worker /* Helper macro to expand and concatenate two macros. 322*6236dae4SAndroid Build Coastguard Worker * Direct macros concatenation does not work because macros 323*6236dae4SAndroid Build Coastguard Worker * are not expanded before direct concatenation. 324*6236dae4SAndroid Build Coastguard Worker */ 325*6236dae4SAndroid Build Coastguard Worker #define CURL_CONC_MACROS_(A,B) A ## B 326*6236dae4SAndroid Build Coastguard Worker #define CURL_CONC_MACROS(A,B) CURL_CONC_MACROS_(A,B) 327*6236dae4SAndroid Build Coastguard Worker 328*6236dae4SAndroid Build Coastguard Worker /* curl uses its own printf() function internally. It understands the GNU 329*6236dae4SAndroid Build Coastguard Worker * format. Use this format, so that is matches the GNU format attribute we 330*6236dae4SAndroid Build Coastguard Worker * use with the MinGW compiler, allowing it to verify them at compile-time. 331*6236dae4SAndroid Build Coastguard Worker */ 332*6236dae4SAndroid Build Coastguard Worker #ifdef __MINGW32__ 333*6236dae4SAndroid Build Coastguard Worker # undef CURL_FORMAT_CURL_OFF_T 334*6236dae4SAndroid Build Coastguard Worker # undef CURL_FORMAT_CURL_OFF_TU 335*6236dae4SAndroid Build Coastguard Worker # define CURL_FORMAT_CURL_OFF_T "lld" 336*6236dae4SAndroid Build Coastguard Worker # define CURL_FORMAT_CURL_OFF_TU "llu" 337*6236dae4SAndroid Build Coastguard Worker #endif 338*6236dae4SAndroid Build Coastguard Worker 339*6236dae4SAndroid Build Coastguard Worker /* based on logic in "curl/mprintf.h" */ 340*6236dae4SAndroid Build Coastguard Worker 341*6236dae4SAndroid Build Coastguard Worker #if (defined(__GNUC__) || defined(__clang__) || \ 342*6236dae4SAndroid Build Coastguard Worker defined(__IAR_SYSTEMS_ICC__)) && \ 343*6236dae4SAndroid Build Coastguard Worker defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ 344*6236dae4SAndroid Build Coastguard Worker !defined(CURL_NO_FMT_CHECKS) 345*6236dae4SAndroid Build Coastguard Worker #if defined(__MINGW32__) && !defined(__clang__) 346*6236dae4SAndroid Build Coastguard Worker #define CURL_PRINTF(fmt, arg) \ 347*6236dae4SAndroid Build Coastguard Worker __attribute__((format(gnu_printf, fmt, arg))) 348*6236dae4SAndroid Build Coastguard Worker #else 349*6236dae4SAndroid Build Coastguard Worker #define CURL_PRINTF(fmt, arg) \ 350*6236dae4SAndroid Build Coastguard Worker __attribute__((format(__printf__, fmt, arg))) 351*6236dae4SAndroid Build Coastguard Worker #endif 352*6236dae4SAndroid Build Coastguard Worker #else 353*6236dae4SAndroid Build Coastguard Worker #define CURL_PRINTF(fmt, arg) 354*6236dae4SAndroid Build Coastguard Worker #endif 355*6236dae4SAndroid Build Coastguard Worker 356*6236dae4SAndroid Build Coastguard Worker /* Override default printf mask check rules in "curl/mprintf.h" */ 357*6236dae4SAndroid Build Coastguard Worker #define CURL_TEMP_PRINTF CURL_PRINTF 358*6236dae4SAndroid Build Coastguard Worker 359*6236dae4SAndroid Build Coastguard Worker /* Workaround for mainline llvm v16 and earlier missing a built-in macro 360*6236dae4SAndroid Build Coastguard Worker expected by macOS SDK v14 / Xcode v15 (2023) and newer. 361*6236dae4SAndroid Build Coastguard Worker gcc (as of v14) is also missing it. */ 362*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__) && \ 363*6236dae4SAndroid Build Coastguard Worker ((!defined(__apple_build_version__) && \ 364*6236dae4SAndroid Build Coastguard Worker defined(__clang__) && __clang_major__ < 17) || \ 365*6236dae4SAndroid Build Coastguard Worker (defined(__GNUC__) && __GNUC__ <= 14)) && \ 366*6236dae4SAndroid Build Coastguard Worker defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ 367*6236dae4SAndroid Build Coastguard Worker !defined(__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__) 368*6236dae4SAndroid Build Coastguard Worker #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ \ 369*6236dae4SAndroid Build Coastguard Worker __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ 370*6236dae4SAndroid Build Coastguard Worker #endif 371*6236dae4SAndroid Build Coastguard Worker 372*6236dae4SAndroid Build Coastguard Worker /* 373*6236dae4SAndroid Build Coastguard Worker * Use getaddrinfo to resolve the IPv4 address literal. If the current network 374*6236dae4SAndroid Build Coastguard Worker * interface does not support IPv4, but supports IPv6, NAT64, and DNS64, 375*6236dae4SAndroid Build Coastguard Worker * performing this task will result in a synthesized IPv6 address. 376*6236dae4SAndroid Build Coastguard Worker */ 377*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__) && !defined(USE_ARES) 378*6236dae4SAndroid Build Coastguard Worker #define USE_RESOLVE_ON_IPS 1 379*6236dae4SAndroid Build Coastguard Worker # if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) && \ 380*6236dae4SAndroid Build Coastguard Worker defined(USE_IPV6) 381*6236dae4SAndroid Build Coastguard Worker # define CURL_MACOS_CALL_COPYPROXIES 1 382*6236dae4SAndroid Build Coastguard Worker # endif 383*6236dae4SAndroid Build Coastguard Worker #endif 384*6236dae4SAndroid Build Coastguard Worker 385*6236dae4SAndroid Build Coastguard Worker #ifdef USE_LWIPSOCK 386*6236dae4SAndroid Build Coastguard Worker # include <lwip/init.h> 387*6236dae4SAndroid Build Coastguard Worker # include <lwip/sockets.h> 388*6236dae4SAndroid Build Coastguard Worker # include <lwip/netdb.h> 389*6236dae4SAndroid Build Coastguard Worker #endif 390*6236dae4SAndroid Build Coastguard Worker 391*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_EXTRA_STRICMP_H 392*6236dae4SAndroid Build Coastguard Worker # include <extra/stricmp.h> 393*6236dae4SAndroid Build Coastguard Worker #endif 394*6236dae4SAndroid Build Coastguard Worker 395*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_EXTRA_STRDUP_H 396*6236dae4SAndroid Build Coastguard Worker # include <extra/strdup.h> 397*6236dae4SAndroid Build Coastguard Worker #endif 398*6236dae4SAndroid Build Coastguard Worker 399*6236dae4SAndroid Build Coastguard Worker #ifdef __AMIGA__ 400*6236dae4SAndroid Build Coastguard Worker # ifdef __amigaos4__ 401*6236dae4SAndroid Build Coastguard Worker # define __USE_INLINE__ 402*6236dae4SAndroid Build Coastguard Worker /* use our own resolver which uses runtime feature detection */ 403*6236dae4SAndroid Build Coastguard Worker # define CURLRES_AMIGA 404*6236dae4SAndroid Build Coastguard Worker /* getaddrinfo() currently crashes bsdsocket.library, so disable */ 405*6236dae4SAndroid Build Coastguard Worker # undef HAVE_GETADDRINFO 406*6236dae4SAndroid Build Coastguard Worker # if !(defined(__NEWLIB__) || \ 407*6236dae4SAndroid Build Coastguard Worker (defined(__CLIB2__) && defined(__THREAD_SAFE))) 408*6236dae4SAndroid Build Coastguard Worker /* disable threaded resolver with clib2 - requires newlib or clib-ts */ 409*6236dae4SAndroid Build Coastguard Worker # undef USE_THREADS_POSIX 410*6236dae4SAndroid Build Coastguard Worker # endif 411*6236dae4SAndroid Build Coastguard Worker # endif 412*6236dae4SAndroid Build Coastguard Worker # include <exec/types.h> 413*6236dae4SAndroid Build Coastguard Worker # include <exec/execbase.h> 414*6236dae4SAndroid Build Coastguard Worker # include <proto/exec.h> 415*6236dae4SAndroid Build Coastguard Worker # include <proto/dos.h> 416*6236dae4SAndroid Build Coastguard Worker # include <unistd.h> 417*6236dae4SAndroid Build Coastguard Worker # if defined(HAVE_PROTO_BSDSOCKET_H) && \ 418*6236dae4SAndroid Build Coastguard Worker (!defined(__amigaos4__) || defined(USE_AMISSL)) 419*6236dae4SAndroid Build Coastguard Worker /* use bsdsocket.library directly, instead of libc networking functions */ 420*6236dae4SAndroid Build Coastguard Worker # define _SYS_MBUF_H /* m_len define clashes with curl */ 421*6236dae4SAndroid Build Coastguard Worker # include <proto/bsdsocket.h> 422*6236dae4SAndroid Build Coastguard Worker # ifdef __amigaos4__ 423*6236dae4SAndroid Build Coastguard Worker int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds, 424*6236dae4SAndroid Build Coastguard Worker fd_set *errorfds, struct timeval *timeout); 425*6236dae4SAndroid Build Coastguard Worker # define select(a,b,c,d,e) Curl_amiga_select(a,b,c,d,e) 426*6236dae4SAndroid Build Coastguard Worker # else 427*6236dae4SAndroid Build Coastguard Worker # define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0) 428*6236dae4SAndroid Build Coastguard Worker # endif 429*6236dae4SAndroid Build Coastguard Worker /* must not use libc's fcntl() on bsdsocket.library sockfds! */ 430*6236dae4SAndroid Build Coastguard Worker # undef HAVE_FCNTL 431*6236dae4SAndroid Build Coastguard Worker # undef HAVE_FCNTL_O_NONBLOCK 432*6236dae4SAndroid Build Coastguard Worker # else 433*6236dae4SAndroid Build Coastguard Worker /* use libc networking and hence close() and fnctl() */ 434*6236dae4SAndroid Build Coastguard Worker # undef HAVE_CLOSESOCKET_CAMEL 435*6236dae4SAndroid Build Coastguard Worker # undef HAVE_IOCTLSOCKET_CAMEL 436*6236dae4SAndroid Build Coastguard Worker # endif 437*6236dae4SAndroid Build Coastguard Worker /* 438*6236dae4SAndroid Build Coastguard Worker * In clib2 arpa/inet.h warns that some prototypes may clash 439*6236dae4SAndroid Build Coastguard Worker * with bsdsocket.library. This avoids the definition of those. 440*6236dae4SAndroid Build Coastguard Worker */ 441*6236dae4SAndroid Build Coastguard Worker # define __NO_NET_API 442*6236dae4SAndroid Build Coastguard Worker #endif 443*6236dae4SAndroid Build Coastguard Worker 444*6236dae4SAndroid Build Coastguard Worker #include <stdio.h> 445*6236dae4SAndroid Build Coastguard Worker #include <assert.h> 446*6236dae4SAndroid Build Coastguard Worker 447*6236dae4SAndroid Build Coastguard Worker #ifdef __TANDEM /* for ns*-tandem-nsk systems */ 448*6236dae4SAndroid Build Coastguard Worker # if ! defined __LP64 449*6236dae4SAndroid Build Coastguard Worker # include <floss.h> /* FLOSS is only used for 32-bit builds. */ 450*6236dae4SAndroid Build Coastguard Worker # endif 451*6236dae4SAndroid Build Coastguard Worker #endif 452*6236dae4SAndroid Build Coastguard Worker 453*6236dae4SAndroid Build Coastguard Worker #ifndef STDC_HEADERS /* no standard C headers! */ 454*6236dae4SAndroid Build Coastguard Worker #include <curl/stdcheaders.h> 455*6236dae4SAndroid Build Coastguard Worker #endif 456*6236dae4SAndroid Build Coastguard Worker 457*6236dae4SAndroid Build Coastguard Worker /* 458*6236dae4SAndroid Build Coastguard Worker * Large file (>2Gb) support using Win32 functions. 459*6236dae4SAndroid Build Coastguard Worker */ 460*6236dae4SAndroid Build Coastguard Worker 461*6236dae4SAndroid Build Coastguard Worker #ifdef USE_WIN32_LARGE_FILES 462*6236dae4SAndroid Build Coastguard Worker # include <io.h> 463*6236dae4SAndroid Build Coastguard Worker # include <sys/types.h> 464*6236dae4SAndroid Build Coastguard Worker # include <sys/stat.h> 465*6236dae4SAndroid Build Coastguard Worker # undef lseek 466*6236dae4SAndroid Build Coastguard Worker # define lseek(fdes,offset,whence) _lseeki64(fdes, offset, whence) 467*6236dae4SAndroid Build Coastguard Worker # undef fstat 468*6236dae4SAndroid Build Coastguard Worker # define fstat(fdes,stp) _fstati64(fdes, stp) 469*6236dae4SAndroid Build Coastguard Worker # undef stat 470*6236dae4SAndroid Build Coastguard Worker # define stat(fname,stp) curlx_win32_stat(fname, stp) 471*6236dae4SAndroid Build Coastguard Worker # define struct_stat struct _stati64 472*6236dae4SAndroid Build Coastguard Worker # define LSEEK_ERROR (__int64)-1 473*6236dae4SAndroid Build Coastguard Worker # define open curlx_win32_open 474*6236dae4SAndroid Build Coastguard Worker # define fopen(fname,mode) curlx_win32_fopen(fname, mode) 475*6236dae4SAndroid Build Coastguard Worker int curlx_win32_open(const char *filename, int oflag, ...); 476*6236dae4SAndroid Build Coastguard Worker int curlx_win32_stat(const char *path, struct_stat *buffer); 477*6236dae4SAndroid Build Coastguard Worker FILE *curlx_win32_fopen(const char *filename, const char *mode); 478*6236dae4SAndroid Build Coastguard Worker #endif 479*6236dae4SAndroid Build Coastguard Worker 480*6236dae4SAndroid Build Coastguard Worker /* 481*6236dae4SAndroid Build Coastguard Worker * Small file (<2Gb) support using Win32 functions. 482*6236dae4SAndroid Build Coastguard Worker */ 483*6236dae4SAndroid Build Coastguard Worker 484*6236dae4SAndroid Build Coastguard Worker #ifdef USE_WIN32_SMALL_FILES 485*6236dae4SAndroid Build Coastguard Worker # include <io.h> 486*6236dae4SAndroid Build Coastguard Worker # include <sys/types.h> 487*6236dae4SAndroid Build Coastguard Worker # include <sys/stat.h> 488*6236dae4SAndroid Build Coastguard Worker # ifndef _WIN32_WCE 489*6236dae4SAndroid Build Coastguard Worker # undef lseek 490*6236dae4SAndroid Build Coastguard Worker # define lseek(fdes,offset,whence) _lseek(fdes, (long)offset, whence) 491*6236dae4SAndroid Build Coastguard Worker # define fstat(fdes,stp) _fstat(fdes, stp) 492*6236dae4SAndroid Build Coastguard Worker # define stat(fname,stp) curlx_win32_stat(fname, stp) 493*6236dae4SAndroid Build Coastguard Worker # define struct_stat struct _stat 494*6236dae4SAndroid Build Coastguard Worker # define open curlx_win32_open 495*6236dae4SAndroid Build Coastguard Worker # define fopen(fname,mode) curlx_win32_fopen(fname, mode) 496*6236dae4SAndroid Build Coastguard Worker int curlx_win32_stat(const char *path, struct_stat *buffer); 497*6236dae4SAndroid Build Coastguard Worker int curlx_win32_open(const char *filename, int oflag, ...); 498*6236dae4SAndroid Build Coastguard Worker FILE *curlx_win32_fopen(const char *filename, const char *mode); 499*6236dae4SAndroid Build Coastguard Worker # endif 500*6236dae4SAndroid Build Coastguard Worker # define LSEEK_ERROR (long)-1 501*6236dae4SAndroid Build Coastguard Worker #endif 502*6236dae4SAndroid Build Coastguard Worker 503*6236dae4SAndroid Build Coastguard Worker #ifndef struct_stat 504*6236dae4SAndroid Build Coastguard Worker # define struct_stat struct stat 505*6236dae4SAndroid Build Coastguard Worker #endif 506*6236dae4SAndroid Build Coastguard Worker 507*6236dae4SAndroid Build Coastguard Worker #ifndef LSEEK_ERROR 508*6236dae4SAndroid Build Coastguard Worker # define LSEEK_ERROR (off_t)-1 509*6236dae4SAndroid Build Coastguard Worker #endif 510*6236dae4SAndroid Build Coastguard Worker 511*6236dae4SAndroid Build Coastguard Worker #ifndef SIZEOF_TIME_T 512*6236dae4SAndroid Build Coastguard Worker /* assume default size of time_t to be 32 bits */ 513*6236dae4SAndroid Build Coastguard Worker #define SIZEOF_TIME_T 4 514*6236dae4SAndroid Build Coastguard Worker #endif 515*6236dae4SAndroid Build Coastguard Worker 516*6236dae4SAndroid Build Coastguard Worker #ifndef SIZEOF_CURL_SOCKET_T 517*6236dae4SAndroid Build Coastguard Worker /* configure and cmake check and set the define */ 518*6236dae4SAndroid Build Coastguard Worker # ifdef _WIN64 519*6236dae4SAndroid Build Coastguard Worker # define SIZEOF_CURL_SOCKET_T 8 520*6236dae4SAndroid Build Coastguard Worker # else 521*6236dae4SAndroid Build Coastguard Worker /* default guess */ 522*6236dae4SAndroid Build Coastguard Worker # define SIZEOF_CURL_SOCKET_T 4 523*6236dae4SAndroid Build Coastguard Worker # endif 524*6236dae4SAndroid Build Coastguard Worker #endif 525*6236dae4SAndroid Build Coastguard Worker 526*6236dae4SAndroid Build Coastguard Worker #if SIZEOF_CURL_SOCKET_T < 8 527*6236dae4SAndroid Build Coastguard Worker # define FMT_SOCKET_T "d" 528*6236dae4SAndroid Build Coastguard Worker #elif defined(__MINGW32__) 529*6236dae4SAndroid Build Coastguard Worker # define FMT_SOCKET_T "zd" 530*6236dae4SAndroid Build Coastguard Worker #else 531*6236dae4SAndroid Build Coastguard Worker # define FMT_SOCKET_T "qd" 532*6236dae4SAndroid Build Coastguard Worker #endif 533*6236dae4SAndroid Build Coastguard Worker 534*6236dae4SAndroid Build Coastguard Worker /* 535*6236dae4SAndroid Build Coastguard Worker * Default sizeof(off_t) in case it has not been defined in config file. 536*6236dae4SAndroid Build Coastguard Worker */ 537*6236dae4SAndroid Build Coastguard Worker 538*6236dae4SAndroid Build Coastguard Worker #ifndef SIZEOF_OFF_T 539*6236dae4SAndroid Build Coastguard Worker # if defined(__VMS) && !defined(__VAX) 540*6236dae4SAndroid Build Coastguard Worker # if defined(_LARGEFILE) 541*6236dae4SAndroid Build Coastguard Worker # define SIZEOF_OFF_T 8 542*6236dae4SAndroid Build Coastguard Worker # endif 543*6236dae4SAndroid Build Coastguard Worker # elif defined(__OS400__) && defined(__ILEC400__) 544*6236dae4SAndroid Build Coastguard Worker # if defined(_LARGE_FILES) 545*6236dae4SAndroid Build Coastguard Worker # define SIZEOF_OFF_T 8 546*6236dae4SAndroid Build Coastguard Worker # endif 547*6236dae4SAndroid Build Coastguard Worker # elif defined(__MVS__) && defined(__IBMC__) 548*6236dae4SAndroid Build Coastguard Worker # if defined(_LP64) || defined(_LARGE_FILES) 549*6236dae4SAndroid Build Coastguard Worker # define SIZEOF_OFF_T 8 550*6236dae4SAndroid Build Coastguard Worker # endif 551*6236dae4SAndroid Build Coastguard Worker # elif defined(__370__) && defined(__IBMC__) 552*6236dae4SAndroid Build Coastguard Worker # if defined(_LP64) || defined(_LARGE_FILES) 553*6236dae4SAndroid Build Coastguard Worker # define SIZEOF_OFF_T 8 554*6236dae4SAndroid Build Coastguard Worker # endif 555*6236dae4SAndroid Build Coastguard Worker # endif 556*6236dae4SAndroid Build Coastguard Worker # ifndef SIZEOF_OFF_T 557*6236dae4SAndroid Build Coastguard Worker # define SIZEOF_OFF_T 4 558*6236dae4SAndroid Build Coastguard Worker # endif 559*6236dae4SAndroid Build Coastguard Worker #endif 560*6236dae4SAndroid Build Coastguard Worker 561*6236dae4SAndroid Build Coastguard Worker #if (SIZEOF_CURL_OFF_T < 8) 562*6236dae4SAndroid Build Coastguard Worker #error "too small curl_off_t" 563*6236dae4SAndroid Build Coastguard Worker #else 564*6236dae4SAndroid Build Coastguard Worker /* assume SIZEOF_CURL_OFF_T == 8 */ 565*6236dae4SAndroid Build Coastguard Worker # define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF) 566*6236dae4SAndroid Build Coastguard Worker #endif 567*6236dae4SAndroid Build Coastguard Worker #define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1)) 568*6236dae4SAndroid Build Coastguard Worker 569*6236dae4SAndroid Build Coastguard Worker #if (SIZEOF_CURL_OFF_T != 8) 570*6236dae4SAndroid Build Coastguard Worker # error "curl_off_t must be exactly 64 bits" 571*6236dae4SAndroid Build Coastguard Worker #else 572*6236dae4SAndroid Build Coastguard Worker typedef unsigned CURL_TYPEOF_CURL_OFF_T curl_uint64_t; 573*6236dae4SAndroid Build Coastguard Worker typedef CURL_TYPEOF_CURL_OFF_T curl_int64_t; 574*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_SUFFIX_CURL_OFF_TU 575*6236dae4SAndroid Build Coastguard Worker # error "CURL_SUFFIX_CURL_OFF_TU must be defined" 576*6236dae4SAndroid Build Coastguard Worker # endif 577*6236dae4SAndroid Build Coastguard Worker # define CURL_UINT64_SUFFIX CURL_SUFFIX_CURL_OFF_TU 578*6236dae4SAndroid Build Coastguard Worker # define CURL_UINT64_C(val) CURL_CONC_MACROS(val,CURL_UINT64_SUFFIX) 579*6236dae4SAndroid Build Coastguard Worker # define FMT_PRId64 CURL_FORMAT_CURL_OFF_T 580*6236dae4SAndroid Build Coastguard Worker # define FMT_PRIu64 CURL_FORMAT_CURL_OFF_TU 581*6236dae4SAndroid Build Coastguard Worker #endif 582*6236dae4SAndroid Build Coastguard Worker 583*6236dae4SAndroid Build Coastguard Worker #define FMT_OFF_T CURL_FORMAT_CURL_OFF_T 584*6236dae4SAndroid Build Coastguard Worker #define FMT_OFF_TU CURL_FORMAT_CURL_OFF_TU 585*6236dae4SAndroid Build Coastguard Worker 586*6236dae4SAndroid Build Coastguard Worker #if (SIZEOF_TIME_T == 4) 587*6236dae4SAndroid Build Coastguard Worker # ifdef HAVE_TIME_T_UNSIGNED 588*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MAX UINT_MAX 589*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MIN 0 590*6236dae4SAndroid Build Coastguard Worker # else 591*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MAX INT_MAX 592*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MIN INT_MIN 593*6236dae4SAndroid Build Coastguard Worker # endif 594*6236dae4SAndroid Build Coastguard Worker #else 595*6236dae4SAndroid Build Coastguard Worker # ifdef HAVE_TIME_T_UNSIGNED 596*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MAX 0xFFFFFFFFFFFFFFFF 597*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MIN 0 598*6236dae4SAndroid Build Coastguard Worker # else 599*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MAX 0x7FFFFFFFFFFFFFFF 600*6236dae4SAndroid Build Coastguard Worker # define TIME_T_MIN (-TIME_T_MAX - 1) 601*6236dae4SAndroid Build Coastguard Worker # endif 602*6236dae4SAndroid Build Coastguard Worker #endif 603*6236dae4SAndroid Build Coastguard Worker 604*6236dae4SAndroid Build Coastguard Worker #ifndef SIZE_T_MAX 605*6236dae4SAndroid Build Coastguard Worker /* some limits.h headers have this defined, some do not */ 606*6236dae4SAndroid Build Coastguard Worker #if defined(SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > 4) 607*6236dae4SAndroid Build Coastguard Worker #define SIZE_T_MAX 18446744073709551615U 608*6236dae4SAndroid Build Coastguard Worker #else 609*6236dae4SAndroid Build Coastguard Worker #define SIZE_T_MAX 4294967295U 610*6236dae4SAndroid Build Coastguard Worker #endif 611*6236dae4SAndroid Build Coastguard Worker #endif 612*6236dae4SAndroid Build Coastguard Worker 613*6236dae4SAndroid Build Coastguard Worker #ifndef SSIZE_T_MAX 614*6236dae4SAndroid Build Coastguard Worker /* some limits.h headers have this defined, some do not */ 615*6236dae4SAndroid Build Coastguard Worker #if defined(SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > 4) 616*6236dae4SAndroid Build Coastguard Worker #define SSIZE_T_MAX 9223372036854775807 617*6236dae4SAndroid Build Coastguard Worker #else 618*6236dae4SAndroid Build Coastguard Worker #define SSIZE_T_MAX 2147483647 619*6236dae4SAndroid Build Coastguard Worker #endif 620*6236dae4SAndroid Build Coastguard Worker #endif 621*6236dae4SAndroid Build Coastguard Worker 622*6236dae4SAndroid Build Coastguard Worker /* 623*6236dae4SAndroid Build Coastguard Worker * Arg 2 type for gethostname in case it has not been defined in config file. 624*6236dae4SAndroid Build Coastguard Worker */ 625*6236dae4SAndroid Build Coastguard Worker 626*6236dae4SAndroid Build Coastguard Worker #ifndef GETHOSTNAME_TYPE_ARG2 627*6236dae4SAndroid Build Coastguard Worker # ifdef USE_WINSOCK 628*6236dae4SAndroid Build Coastguard Worker # define GETHOSTNAME_TYPE_ARG2 int 629*6236dae4SAndroid Build Coastguard Worker # else 630*6236dae4SAndroid Build Coastguard Worker # define GETHOSTNAME_TYPE_ARG2 size_t 631*6236dae4SAndroid Build Coastguard Worker # endif 632*6236dae4SAndroid Build Coastguard Worker #endif 633*6236dae4SAndroid Build Coastguard Worker 634*6236dae4SAndroid Build Coastguard Worker /* Below we define some functions. They should 635*6236dae4SAndroid Build Coastguard Worker 636*6236dae4SAndroid Build Coastguard Worker 4. set the SIGALRM signal timeout 637*6236dae4SAndroid Build Coastguard Worker 5. set dir/file naming defines 638*6236dae4SAndroid Build Coastguard Worker */ 639*6236dae4SAndroid Build Coastguard Worker 640*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32 641*6236dae4SAndroid Build Coastguard Worker 642*6236dae4SAndroid Build Coastguard Worker # define DIR_CHAR "\\" 643*6236dae4SAndroid Build Coastguard Worker 644*6236dae4SAndroid Build Coastguard Worker #else /* _WIN32 */ 645*6236dae4SAndroid Build Coastguard Worker 646*6236dae4SAndroid Build Coastguard Worker # ifdef MSDOS /* Watt-32 */ 647*6236dae4SAndroid Build Coastguard Worker 648*6236dae4SAndroid Build Coastguard Worker # include <sys/ioctl.h> 649*6236dae4SAndroid Build Coastguard Worker # define select(n,r,w,x,t) select_s(n,r,w,x,t) 650*6236dae4SAndroid Build Coastguard Worker # define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z)) 651*6236dae4SAndroid Build Coastguard Worker # include <tcp.h> 652*6236dae4SAndroid Build Coastguard Worker # ifdef word 653*6236dae4SAndroid Build Coastguard Worker # undef word 654*6236dae4SAndroid Build Coastguard Worker # endif 655*6236dae4SAndroid Build Coastguard Worker # ifdef byte 656*6236dae4SAndroid Build Coastguard Worker # undef byte 657*6236dae4SAndroid Build Coastguard Worker # endif 658*6236dae4SAndroid Build Coastguard Worker 659*6236dae4SAndroid Build Coastguard Worker # endif /* MSDOS */ 660*6236dae4SAndroid Build Coastguard Worker 661*6236dae4SAndroid Build Coastguard Worker # ifdef __minix 662*6236dae4SAndroid Build Coastguard Worker /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */ 663*6236dae4SAndroid Build Coastguard Worker extern char *strtok_r(char *s, const char *delim, char **last); 664*6236dae4SAndroid Build Coastguard Worker extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp); 665*6236dae4SAndroid Build Coastguard Worker # endif 666*6236dae4SAndroid Build Coastguard Worker 667*6236dae4SAndroid Build Coastguard Worker # define DIR_CHAR "/" 668*6236dae4SAndroid Build Coastguard Worker 669*6236dae4SAndroid Build Coastguard Worker #endif /* _WIN32 */ 670*6236dae4SAndroid Build Coastguard Worker 671*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 672*6236dae4SAndroid Build Coastguard Worker /* resolver specialty compile-time defines */ 673*6236dae4SAndroid Build Coastguard Worker /* CURLRES_* defines to use in the host*.c sources */ 674*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 675*6236dae4SAndroid Build Coastguard Worker 676*6236dae4SAndroid Build Coastguard Worker /* 677*6236dae4SAndroid Build Coastguard Worker * MSVC threads support requires a multi-threaded runtime library. 678*6236dae4SAndroid Build Coastguard Worker * _beginthreadex() is not available in single-threaded ones. 679*6236dae4SAndroid Build Coastguard Worker */ 680*6236dae4SAndroid Build Coastguard Worker 681*6236dae4SAndroid Build Coastguard Worker #if defined(_MSC_VER) && !defined(_MT) 682*6236dae4SAndroid Build Coastguard Worker # undef USE_THREADS_POSIX 683*6236dae4SAndroid Build Coastguard Worker # undef USE_THREADS_WIN32 684*6236dae4SAndroid Build Coastguard Worker #endif 685*6236dae4SAndroid Build Coastguard Worker 686*6236dae4SAndroid Build Coastguard Worker /* 687*6236dae4SAndroid Build Coastguard Worker * Mutually exclusive CURLRES_* definitions. 688*6236dae4SAndroid Build Coastguard Worker */ 689*6236dae4SAndroid Build Coastguard Worker 690*6236dae4SAndroid Build Coastguard Worker #if defined(USE_IPV6) && defined(HAVE_GETADDRINFO) 691*6236dae4SAndroid Build Coastguard Worker # define CURLRES_IPV6 692*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_IPV6) && (defined(_WIN32) || defined(__CYGWIN__)) 693*6236dae4SAndroid Build Coastguard Worker /* assume on Windows that IPv6 without getaddrinfo is a broken build */ 694*6236dae4SAndroid Build Coastguard Worker # error "Unexpected build: IPv6 is enabled but getaddrinfo was not found." 695*6236dae4SAndroid Build Coastguard Worker #else 696*6236dae4SAndroid Build Coastguard Worker # define CURLRES_IPV4 697*6236dae4SAndroid Build Coastguard Worker #endif 698*6236dae4SAndroid Build Coastguard Worker 699*6236dae4SAndroid Build Coastguard Worker #ifdef USE_ARES 700*6236dae4SAndroid Build Coastguard Worker # define CURLRES_ASYNCH 701*6236dae4SAndroid Build Coastguard Worker # define CURLRES_ARES 702*6236dae4SAndroid Build Coastguard Worker /* now undef the stock libc functions just to avoid them being used */ 703*6236dae4SAndroid Build Coastguard Worker # undef HAVE_GETADDRINFO 704*6236dae4SAndroid Build Coastguard Worker # undef HAVE_FREEADDRINFO 705*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32) 706*6236dae4SAndroid Build Coastguard Worker # define CURLRES_ASYNCH 707*6236dae4SAndroid Build Coastguard Worker # define CURLRES_THREADED 708*6236dae4SAndroid Build Coastguard Worker #else 709*6236dae4SAndroid Build Coastguard Worker # define CURLRES_SYNCH 710*6236dae4SAndroid Build Coastguard Worker #endif 711*6236dae4SAndroid Build Coastguard Worker 712*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */ 713*6236dae4SAndroid Build Coastguard Worker 714*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && \ 715*6236dae4SAndroid Build Coastguard Worker !defined(USE_WIN32_IDN) && !defined(USE_APPLE_IDN) 716*6236dae4SAndroid Build Coastguard Worker /* The lib and header are present */ 717*6236dae4SAndroid Build Coastguard Worker #define USE_LIBIDN2 718*6236dae4SAndroid Build Coastguard Worker #endif 719*6236dae4SAndroid Build Coastguard Worker 720*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LIBIDN2) && (defined(USE_WIN32_IDN) || defined(USE_APPLE_IDN)) 721*6236dae4SAndroid Build Coastguard Worker #error "libidn2 cannot be enabled with WinIDN or AppleIDN, choose one." 722*6236dae4SAndroid Build Coastguard Worker #endif 723*6236dae4SAndroid Build Coastguard Worker 724*6236dae4SAndroid Build Coastguard Worker #define LIBIDN_REQUIRED_VERSION "0.4.1" 725*6236dae4SAndroid Build Coastguard Worker 726*6236dae4SAndroid Build Coastguard Worker #if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \ 727*6236dae4SAndroid Build Coastguard Worker defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ 728*6236dae4SAndroid Build Coastguard Worker defined(USE_BEARSSL) || defined(USE_RUSTLS) 729*6236dae4SAndroid Build Coastguard Worker #define USE_SSL /* SSL support has been enabled */ 730*6236dae4SAndroid Build Coastguard Worker #endif 731*6236dae4SAndroid Build Coastguard Worker 732*6236dae4SAndroid Build Coastguard Worker #if defined(USE_WOLFSSL) && defined(USE_GNUTLS) 733*6236dae4SAndroid Build Coastguard Worker /* Avoid defining unprefixed wolfSSL SHA macros colliding with nettle ones */ 734*6236dae4SAndroid Build Coastguard Worker #define NO_OLD_WC_NAMES 735*6236dae4SAndroid Build Coastguard Worker #endif 736*6236dae4SAndroid Build Coastguard Worker 737*6236dae4SAndroid Build Coastguard Worker /* Single point where USE_SPNEGO definition might be defined */ 738*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_NEGOTIATE_AUTH) && \ 739*6236dae4SAndroid Build Coastguard Worker (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)) 740*6236dae4SAndroid Build Coastguard Worker #define USE_SPNEGO 741*6236dae4SAndroid Build Coastguard Worker #endif 742*6236dae4SAndroid Build Coastguard Worker 743*6236dae4SAndroid Build Coastguard Worker /* Single point where USE_KERBEROS5 definition might be defined */ 744*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_KERBEROS_AUTH) && \ 745*6236dae4SAndroid Build Coastguard Worker (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)) 746*6236dae4SAndroid Build Coastguard Worker #define USE_KERBEROS5 747*6236dae4SAndroid Build Coastguard Worker #endif 748*6236dae4SAndroid Build Coastguard Worker 749*6236dae4SAndroid Build Coastguard Worker /* Single point where USE_NTLM definition might be defined */ 750*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_NTLM) 751*6236dae4SAndroid Build Coastguard Worker # if defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \ 752*6236dae4SAndroid Build Coastguard Worker defined(USE_GNUTLS) || defined(USE_SECTRANSP) || \ 753*6236dae4SAndroid Build Coastguard Worker defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) || \ 754*6236dae4SAndroid Build Coastguard Worker (defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT)) 755*6236dae4SAndroid Build Coastguard Worker # define USE_CURL_NTLM_CORE 756*6236dae4SAndroid Build Coastguard Worker # endif 757*6236dae4SAndroid Build Coastguard Worker # if defined(USE_CURL_NTLM_CORE) || defined(USE_WINDOWS_SSPI) 758*6236dae4SAndroid Build Coastguard Worker # define USE_NTLM 759*6236dae4SAndroid Build Coastguard Worker # endif 760*6236dae4SAndroid Build Coastguard Worker #endif 761*6236dae4SAndroid Build Coastguard Worker 762*6236dae4SAndroid Build Coastguard Worker #ifdef CURL_WANTS_CA_BUNDLE_ENV 763*6236dae4SAndroid Build Coastguard Worker #error "No longer supported. Set CURLOPT_CAINFO at runtime instead." 764*6236dae4SAndroid Build Coastguard Worker #endif 765*6236dae4SAndroid Build Coastguard Worker 766*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LIBSSH2) || defined(USE_LIBSSH) || defined(USE_WOLFSSH) 767*6236dae4SAndroid Build Coastguard Worker #define USE_SSH 768*6236dae4SAndroid Build Coastguard Worker #endif 769*6236dae4SAndroid Build Coastguard Worker 770*6236dae4SAndroid Build Coastguard Worker /* 771*6236dae4SAndroid Build Coastguard Worker * Provide a mechanism to silence picky compilers, such as gcc 4.6+. 772*6236dae4SAndroid Build Coastguard Worker * Parameters should of course normally not be unused, but for example when 773*6236dae4SAndroid Build Coastguard Worker * we have multiple implementations of the same interface it may happen. 774*6236dae4SAndroid Build Coastguard Worker */ 775*6236dae4SAndroid Build Coastguard Worker 776*6236dae4SAndroid Build Coastguard Worker #if defined(__GNUC__) && ((__GNUC__ >= 3) || \ 777*6236dae4SAndroid Build Coastguard Worker ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7))) 778*6236dae4SAndroid Build Coastguard Worker # define UNUSED_PARAM __attribute__((__unused__)) 779*6236dae4SAndroid Build Coastguard Worker # define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 780*6236dae4SAndroid Build Coastguard Worker #elif defined(__IAR_SYSTEMS_ICC__) 781*6236dae4SAndroid Build Coastguard Worker # define UNUSED_PARAM __attribute__((__unused__)) 782*6236dae4SAndroid Build Coastguard Worker # if (__VER__ >= 9040001) 783*6236dae4SAndroid Build Coastguard Worker # define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 784*6236dae4SAndroid Build Coastguard Worker # else 785*6236dae4SAndroid Build Coastguard Worker # define WARN_UNUSED_RESULT 786*6236dae4SAndroid Build Coastguard Worker # endif 787*6236dae4SAndroid Build Coastguard Worker #else 788*6236dae4SAndroid Build Coastguard Worker # define UNUSED_PARAM /* NOTHING */ 789*6236dae4SAndroid Build Coastguard Worker # define WARN_UNUSED_RESULT 790*6236dae4SAndroid Build Coastguard Worker #endif 791*6236dae4SAndroid Build Coastguard Worker 792*6236dae4SAndroid Build Coastguard Worker /* noreturn attribute */ 793*6236dae4SAndroid Build Coastguard Worker 794*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_NORETURN) 795*6236dae4SAndroid Build Coastguard Worker #if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__) || \ 796*6236dae4SAndroid Build Coastguard Worker defined(__IAR_SYSTEMS_ICC__) 797*6236dae4SAndroid Build Coastguard Worker # define CURL_NORETURN __attribute__((__noreturn__)) 798*6236dae4SAndroid Build Coastguard Worker #elif defined(_MSC_VER) && (_MSC_VER >= 1200) 799*6236dae4SAndroid Build Coastguard Worker # define CURL_NORETURN __declspec(noreturn) 800*6236dae4SAndroid Build Coastguard Worker #else 801*6236dae4SAndroid Build Coastguard Worker # define CURL_NORETURN 802*6236dae4SAndroid Build Coastguard Worker #endif 803*6236dae4SAndroid Build Coastguard Worker #endif 804*6236dae4SAndroid Build Coastguard Worker 805*6236dae4SAndroid Build Coastguard Worker /* fallthrough attribute */ 806*6236dae4SAndroid Build Coastguard Worker 807*6236dae4SAndroid Build Coastguard Worker #if !defined(FALLTHROUGH) 808*6236dae4SAndroid Build Coastguard Worker #if (defined(__GNUC__) && __GNUC__ >= 7) || \ 809*6236dae4SAndroid Build Coastguard Worker (defined(__clang__) && __clang_major__ >= 10) 810*6236dae4SAndroid Build Coastguard Worker # define FALLTHROUGH() __attribute__((fallthrough)) 811*6236dae4SAndroid Build Coastguard Worker #else 812*6236dae4SAndroid Build Coastguard Worker # define FALLTHROUGH() do {} while (0) 813*6236dae4SAndroid Build Coastguard Worker #endif 814*6236dae4SAndroid Build Coastguard Worker #endif 815*6236dae4SAndroid Build Coastguard Worker 816*6236dae4SAndroid Build Coastguard Worker /* 817*6236dae4SAndroid Build Coastguard Worker * Include macros and defines that should only be processed once. 818*6236dae4SAndroid Build Coastguard Worker */ 819*6236dae4SAndroid Build Coastguard Worker 820*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_SETUP_ONCE_H 821*6236dae4SAndroid Build Coastguard Worker #include "curl_setup_once.h" 822*6236dae4SAndroid Build Coastguard Worker #endif 823*6236dae4SAndroid Build Coastguard Worker 824*6236dae4SAndroid Build Coastguard Worker /* 825*6236dae4SAndroid Build Coastguard Worker * Definition of our NOP statement Object-like macro 826*6236dae4SAndroid Build Coastguard Worker */ 827*6236dae4SAndroid Build Coastguard Worker 828*6236dae4SAndroid Build Coastguard Worker #ifndef Curl_nop_stmt 829*6236dae4SAndroid Build Coastguard Worker # define Curl_nop_stmt do { } while(0) 830*6236dae4SAndroid Build Coastguard Worker #endif 831*6236dae4SAndroid Build Coastguard Worker 832*6236dae4SAndroid Build Coastguard Worker /* 833*6236dae4SAndroid Build Coastguard Worker * Ensure that Winsock and lwIP TCP/IP stacks are not mixed. 834*6236dae4SAndroid Build Coastguard Worker */ 835*6236dae4SAndroid Build Coastguard Worker 836*6236dae4SAndroid Build Coastguard Worker #if defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H) 837*6236dae4SAndroid Build Coastguard Worker # if defined(SOCKET) || defined(USE_WINSOCK) 838*6236dae4SAndroid Build Coastguard Worker # error "Winsock and lwIP TCP/IP stack definitions shall not coexist!" 839*6236dae4SAndroid Build Coastguard Worker # endif 840*6236dae4SAndroid Build Coastguard Worker #endif 841*6236dae4SAndroid Build Coastguard Worker 842*6236dae4SAndroid Build Coastguard Worker /* 843*6236dae4SAndroid Build Coastguard Worker * shutdown() flags for systems that do not define them 844*6236dae4SAndroid Build Coastguard Worker */ 845*6236dae4SAndroid Build Coastguard Worker 846*6236dae4SAndroid Build Coastguard Worker #ifndef SHUT_RD 847*6236dae4SAndroid Build Coastguard Worker #define SHUT_RD 0x00 848*6236dae4SAndroid Build Coastguard Worker #endif 849*6236dae4SAndroid Build Coastguard Worker 850*6236dae4SAndroid Build Coastguard Worker #ifndef SHUT_WR 851*6236dae4SAndroid Build Coastguard Worker #define SHUT_WR 0x01 852*6236dae4SAndroid Build Coastguard Worker #endif 853*6236dae4SAndroid Build Coastguard Worker 854*6236dae4SAndroid Build Coastguard Worker #ifndef SHUT_RDWR 855*6236dae4SAndroid Build Coastguard Worker #define SHUT_RDWR 0x02 856*6236dae4SAndroid Build Coastguard Worker #endif 857*6236dae4SAndroid Build Coastguard Worker 858*6236dae4SAndroid Build Coastguard Worker /* Define S_ISREG if not defined by system headers, e.g. MSVC */ 859*6236dae4SAndroid Build Coastguard Worker #if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG) 860*6236dae4SAndroid Build Coastguard Worker #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 861*6236dae4SAndroid Build Coastguard Worker #endif 862*6236dae4SAndroid Build Coastguard Worker 863*6236dae4SAndroid Build Coastguard Worker /* Define S_ISDIR if not defined by system headers, e.g. MSVC */ 864*6236dae4SAndroid Build Coastguard Worker #if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR) 865*6236dae4SAndroid Build Coastguard Worker #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 866*6236dae4SAndroid Build Coastguard Worker #endif 867*6236dae4SAndroid Build Coastguard Worker 868*6236dae4SAndroid Build Coastguard Worker /* In Windows the default file mode is text but an application can override it. 869*6236dae4SAndroid Build Coastguard Worker Therefore we specify it explicitly. https://github.com/curl/curl/pull/258 870*6236dae4SAndroid Build Coastguard Worker */ 871*6236dae4SAndroid Build Coastguard Worker #if defined(_WIN32) || defined(MSDOS) 872*6236dae4SAndroid Build Coastguard Worker #define FOPEN_READTEXT "rt" 873*6236dae4SAndroid Build Coastguard Worker #define FOPEN_WRITETEXT "wt" 874*6236dae4SAndroid Build Coastguard Worker #define FOPEN_APPENDTEXT "at" 875*6236dae4SAndroid Build Coastguard Worker #elif defined(__CYGWIN__) 876*6236dae4SAndroid Build Coastguard Worker /* Cygwin has specific behavior we need to address when _WIN32 is not defined. 877*6236dae4SAndroid Build Coastguard Worker https://cygwin.com/cygwin-ug-net/using-textbinary.html 878*6236dae4SAndroid Build Coastguard Worker For write we want our output to have line endings of LF and be compatible with 879*6236dae4SAndroid Build Coastguard Worker other Cygwin utilities. For read we want to handle input that may have line 880*6236dae4SAndroid Build Coastguard Worker endings either CRLF or LF so 't' is appropriate. 881*6236dae4SAndroid Build Coastguard Worker */ 882*6236dae4SAndroid Build Coastguard Worker #define FOPEN_READTEXT "rt" 883*6236dae4SAndroid Build Coastguard Worker #define FOPEN_WRITETEXT "w" 884*6236dae4SAndroid Build Coastguard Worker #define FOPEN_APPENDTEXT "a" 885*6236dae4SAndroid Build Coastguard Worker #else 886*6236dae4SAndroid Build Coastguard Worker #define FOPEN_READTEXT "r" 887*6236dae4SAndroid Build Coastguard Worker #define FOPEN_WRITETEXT "w" 888*6236dae4SAndroid Build Coastguard Worker #define FOPEN_APPENDTEXT "a" 889*6236dae4SAndroid Build Coastguard Worker #endif 890*6236dae4SAndroid Build Coastguard Worker 891*6236dae4SAndroid Build Coastguard Worker /* for systems that do not detect this in configure */ 892*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_SA_FAMILY_T 893*6236dae4SAndroid Build Coastguard Worker # if defined(HAVE_SA_FAMILY_T) 894*6236dae4SAndroid Build Coastguard Worker # define CURL_SA_FAMILY_T sa_family_t 895*6236dae4SAndroid Build Coastguard Worker # elif defined(HAVE_ADDRESS_FAMILY) 896*6236dae4SAndroid Build Coastguard Worker # define CURL_SA_FAMILY_T ADDRESS_FAMILY 897*6236dae4SAndroid Build Coastguard Worker # else 898*6236dae4SAndroid Build Coastguard Worker /* use a sensible default */ 899*6236dae4SAndroid Build Coastguard Worker # define CURL_SA_FAMILY_T unsigned short 900*6236dae4SAndroid Build Coastguard Worker # endif 901*6236dae4SAndroid Build Coastguard Worker #endif 902*6236dae4SAndroid Build Coastguard Worker 903*6236dae4SAndroid Build Coastguard Worker /* Some convenience macros to get the larger/smaller value out of two given. 904*6236dae4SAndroid Build Coastguard Worker We prefix with CURL to prevent name collisions. */ 905*6236dae4SAndroid Build Coastguard Worker #define CURLMAX(x,y) ((x)>(y)?(x):(y)) 906*6236dae4SAndroid Build Coastguard Worker #define CURLMIN(x,y) ((x)<(y)?(x):(y)) 907*6236dae4SAndroid Build Coastguard Worker 908*6236dae4SAndroid Build Coastguard Worker /* A convenience macro to provide both the string literal and the length of 909*6236dae4SAndroid Build Coastguard Worker the string literal in one go, useful for functions that take "string,len" 910*6236dae4SAndroid Build Coastguard Worker as their argument */ 911*6236dae4SAndroid Build Coastguard Worker #define STRCONST(x) x,sizeof(x)-1 912*6236dae4SAndroid Build Coastguard Worker 913*6236dae4SAndroid Build Coastguard Worker /* Some versions of the Android SDK is missing the declaration */ 914*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_GETPWUID_R) && defined(HAVE_DECL_GETPWUID_R_MISSING) 915*6236dae4SAndroid Build Coastguard Worker struct passwd; 916*6236dae4SAndroid Build Coastguard Worker int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, 917*6236dae4SAndroid Build Coastguard Worker size_t buflen, struct passwd **result); 918*6236dae4SAndroid Build Coastguard Worker #endif 919*6236dae4SAndroid Build Coastguard Worker 920*6236dae4SAndroid Build Coastguard Worker #ifdef UNITTESTS 921*6236dae4SAndroid Build Coastguard Worker #define UNITTEST 922*6236dae4SAndroid Build Coastguard Worker #else 923*6236dae4SAndroid Build Coastguard Worker #define UNITTEST static 924*6236dae4SAndroid Build Coastguard Worker #endif 925*6236dae4SAndroid Build Coastguard Worker 926*6236dae4SAndroid Build Coastguard Worker /* Hyper supports HTTP2 also, but Curl's integration with Hyper does not */ 927*6236dae4SAndroid Build Coastguard Worker #if defined(USE_NGHTTP2) 928*6236dae4SAndroid Build Coastguard Worker #define USE_HTTP2 929*6236dae4SAndroid Build Coastguard Worker #endif 930*6236dae4SAndroid Build Coastguard Worker 931*6236dae4SAndroid Build Coastguard Worker #if (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \ 932*6236dae4SAndroid Build Coastguard Worker (defined(USE_OPENSSL_QUIC) && defined(USE_NGHTTP3)) || \ 933*6236dae4SAndroid Build Coastguard Worker defined(USE_QUICHE) || defined(USE_MSH3) 934*6236dae4SAndroid Build Coastguard Worker 935*6236dae4SAndroid Build Coastguard Worker #ifdef CURL_WITH_MULTI_SSL 936*6236dae4SAndroid Build Coastguard Worker #error "Multi-SSL combined with QUIC is not supported" 937*6236dae4SAndroid Build Coastguard Worker #endif 938*6236dae4SAndroid Build Coastguard Worker 939*6236dae4SAndroid Build Coastguard Worker #define USE_HTTP3 940*6236dae4SAndroid Build Coastguard Worker #endif 941*6236dae4SAndroid Build Coastguard Worker 942*6236dae4SAndroid Build Coastguard Worker /* Certain Windows implementations are not aligned with what curl expects, 943*6236dae4SAndroid Build Coastguard Worker so always use the local one on this platform. E.g. the mingw-w64 944*6236dae4SAndroid Build Coastguard Worker implementation can return wrong results for non-ASCII inputs. */ 945*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_BASENAME) && defined(_WIN32) 946*6236dae4SAndroid Build Coastguard Worker #undef HAVE_BASENAME 947*6236dae4SAndroid Build Coastguard Worker #endif 948*6236dae4SAndroid Build Coastguard Worker 949*6236dae4SAndroid Build Coastguard Worker #if defined(USE_UNIX_SOCKETS) && defined(_WIN32) 950*6236dae4SAndroid Build Coastguard Worker # if !defined(UNIX_PATH_MAX) 951*6236dae4SAndroid Build Coastguard Worker /* Replicating logic present in afunix.h 952*6236dae4SAndroid Build Coastguard Worker (distributed with newer Windows 10 SDK versions only) */ 953*6236dae4SAndroid Build Coastguard Worker # define UNIX_PATH_MAX 108 954*6236dae4SAndroid Build Coastguard Worker /* !checksrc! disable TYPEDEFSTRUCT 1 */ 955*6236dae4SAndroid Build Coastguard Worker typedef struct sockaddr_un { 956*6236dae4SAndroid Build Coastguard Worker ADDRESS_FAMILY sun_family; 957*6236dae4SAndroid Build Coastguard Worker char sun_path[UNIX_PATH_MAX]; 958*6236dae4SAndroid Build Coastguard Worker } SOCKADDR_UN, *PSOCKADDR_UN; 959*6236dae4SAndroid Build Coastguard Worker # define WIN32_SOCKADDR_UN 960*6236dae4SAndroid Build Coastguard Worker # endif 961*6236dae4SAndroid Build Coastguard Worker #endif 962*6236dae4SAndroid Build Coastguard Worker 963*6236dae4SAndroid Build Coastguard Worker /* OpenSSLv3 marks DES, MD5 and ENGINE functions deprecated but we have no 964*6236dae4SAndroid Build Coastguard Worker replacements (yet) so tell the compiler to not warn for them. */ 965*6236dae4SAndroid Build Coastguard Worker #ifdef USE_OPENSSL 966*6236dae4SAndroid Build Coastguard Worker #define OPENSSL_SUPPRESS_DEPRECATED 967*6236dae4SAndroid Build Coastguard Worker #endif 968*6236dae4SAndroid Build Coastguard Worker 969*6236dae4SAndroid Build Coastguard Worker #if defined(inline) 970*6236dae4SAndroid Build Coastguard Worker /* 'inline' is defined as macro and assumed to be correct */ 971*6236dae4SAndroid Build Coastguard Worker /* No need for 'inline' replacement */ 972*6236dae4SAndroid Build Coastguard Worker #elif defined(__cplusplus) 973*6236dae4SAndroid Build Coastguard Worker /* The code is compiled with C++ compiler. 974*6236dae4SAndroid Build Coastguard Worker C++ always supports 'inline'. */ 975*6236dae4SAndroid Build Coastguard Worker /* No need for 'inline' replacement */ 976*6236dae4SAndroid Build Coastguard Worker #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901 977*6236dae4SAndroid Build Coastguard Worker /* C99 (and later) supports 'inline' keyword */ 978*6236dae4SAndroid Build Coastguard Worker /* No need for 'inline' replacement */ 979*6236dae4SAndroid Build Coastguard Worker #elif defined(__GNUC__) && __GNUC__ >= 3 980*6236dae4SAndroid Build Coastguard Worker /* GCC supports '__inline__' as an extension */ 981*6236dae4SAndroid Build Coastguard Worker # define inline __inline__ 982*6236dae4SAndroid Build Coastguard Worker #elif defined(_MSC_VER) && _MSC_VER >= 1400 983*6236dae4SAndroid Build Coastguard Worker /* MSC supports '__inline' from VS 2005 (or even earlier) */ 984*6236dae4SAndroid Build Coastguard Worker # define inline __inline 985*6236dae4SAndroid Build Coastguard Worker #else 986*6236dae4SAndroid Build Coastguard Worker /* Probably 'inline' is not supported by compiler. 987*6236dae4SAndroid Build Coastguard Worker Define to the empty string to be on the safe side. */ 988*6236dae4SAndroid Build Coastguard Worker # define inline /* empty */ 989*6236dae4SAndroid Build Coastguard Worker #endif 990*6236dae4SAndroid Build Coastguard Worker 991*6236dae4SAndroid Build Coastguard Worker #endif /* HEADER_CURL_SETUP_H */ 992