File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / lib / curl_setup.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:15 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    1: #ifndef HEADER_CURL_SETUP_H
    2: #define HEADER_CURL_SETUP_H
    3: /***************************************************************************
    4:  *                                  _   _ ____  _
    5:  *  Project                     ___| | | |  _ \| |
    6:  *                             / __| | | | |_) | |
    7:  *                            | (__| |_| |  _ <| |___
    8:  *                             \___|\___/|_| \_\_____|
    9:  *
   10:  * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
   11:  *
   12:  * This software is licensed as described in the file COPYING, which
   13:  * you should have received as part of this distribution. The terms
   14:  * are also available at https://curl.haxx.se/docs/copyright.html.
   15:  *
   16:  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
   17:  * copies of the Software, and permit persons to whom the Software is
   18:  * furnished to do so, under the terms of the COPYING file.
   19:  *
   20:  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
   21:  * KIND, either express or implied.
   22:  *
   23:  ***************************************************************************/
   24: 
   25: #if defined(BUILDING_LIBCURL) && !defined(CURL_NO_OLDIES)
   26: #define CURL_NO_OLDIES
   27: #endif
   28: 
   29: /*
   30:  * Disable Visual Studio warnings:
   31:  * 4127 "conditional expression is constant"
   32:  */
   33: #ifdef _MSC_VER
   34: #pragma warning(disable:4127)
   35: #endif
   36: 
   37: /*
   38:  * Define WIN32 when build target is Win32 API
   39:  */
   40: 
   41: #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && \
   42:     !defined(__SYMBIAN32__)
   43: #define WIN32
   44: #endif
   45: 
   46: #ifdef WIN32
   47: /*
   48:  * Don't include unneeded stuff in Windows headers to avoid compiler
   49:  * warnings and macro clashes.
   50:  * Make sure to define this macro before including any Windows headers.
   51:  */
   52: #  ifndef WIN32_LEAN_AND_MEAN
   53: #    define WIN32_LEAN_AND_MEAN
   54: #  endif
   55: #  ifndef NOGDI
   56: #    define NOGDI
   57: #  endif
   58: #endif
   59: 
   60: /*
   61:  * Include configuration script results or hand-crafted
   62:  * configuration file for platforms which lack config tool.
   63:  */
   64: 
   65: #ifdef HAVE_CONFIG_H
   66: 
   67: #include "curl_config.h"
   68: 
   69: #else /* HAVE_CONFIG_H */
   70: 
   71: #ifdef _WIN32_WCE
   72: #  include "config-win32ce.h"
   73: #else
   74: #  ifdef WIN32
   75: #    include "config-win32.h"
   76: #  endif
   77: #endif
   78: 
   79: #if defined(macintosh) && defined(__MRC__)
   80: #  include "config-mac.h"
   81: #endif
   82: 
   83: #ifdef __riscos__
   84: #  include "config-riscos.h"
   85: #endif
   86: 
   87: #ifdef __AMIGA__
   88: #  include "config-amigaos.h"
   89: #endif
   90: 
   91: #ifdef __SYMBIAN32__
   92: #  include "config-symbian.h"
   93: #endif
   94: 
   95: #ifdef __OS400__
   96: #  include "config-os400.h"
   97: #endif
   98: 
   99: #ifdef TPF
  100: #  include "config-tpf.h"
  101: #endif
  102: 
  103: #ifdef __VXWORKS__
  104: #  include "config-vxworks.h"
  105: #endif
  106: 
  107: #ifdef __PLAN9__
  108: #  include "config-plan9.h"
  109: #endif
  110: 
  111: #endif /* HAVE_CONFIG_H */
  112: 
  113: /* ================================================================ */
  114: /* Definition of preprocessor macros/symbols which modify compiler  */
  115: /* behavior or generated code characteristics must be done here,   */
  116: /* as appropriate, before any system header file is included. It is */
  117: /* also possible to have them defined in the config file included   */
  118: /* before this point. As a result of all this we frown inclusion of */
  119: /* system header files in our config files, avoid this at any cost. */
  120: /* ================================================================ */
  121: 
  122: /*
  123:  * AIX 4.3 and newer needs _THREAD_SAFE defined to build
  124:  * proper reentrant code. Others may also need it.
  125:  */
  126: 
  127: #ifdef NEED_THREAD_SAFE
  128: #  ifndef _THREAD_SAFE
  129: #    define _THREAD_SAFE
  130: #  endif
  131: #endif
  132: 
  133: /*
  134:  * Tru64 needs _REENTRANT set for a few function prototypes and
  135:  * things to appear in the system header files. Unixware needs it
  136:  * to build proper reentrant code. Others may also need it.
  137:  */
  138: 
  139: #ifdef NEED_REENTRANT
  140: #  ifndef _REENTRANT
  141: #    define _REENTRANT
  142: #  endif
  143: #endif
  144: 
  145: /* Solaris needs this to get a POSIX-conformant getpwuid_r */
  146: #if defined(sun) || defined(__sun)
  147: #  ifndef _POSIX_PTHREAD_SEMANTICS
  148: #    define _POSIX_PTHREAD_SEMANTICS 1
  149: #  endif
  150: #endif
  151: 
  152: /* ================================================================ */
  153: /*  If you need to include a system header file for your platform,  */
  154: /*  please, do it beyond the point further indicated in this file.  */
  155: /* ================================================================ */
  156: 
  157: #include <curl/curl.h>
  158: 
  159: #define CURL_SIZEOF_CURL_OFF_T SIZEOF_CURL_OFF_T
  160: 
  161: /*
  162:  * Disable other protocols when http is the only one desired.
  163:  */
  164: 
  165: #ifdef HTTP_ONLY
  166: #  ifndef CURL_DISABLE_TFTP
  167: #    define CURL_DISABLE_TFTP
  168: #  endif
  169: #  ifndef CURL_DISABLE_FTP
  170: #    define CURL_DISABLE_FTP
  171: #  endif
  172: #  ifndef CURL_DISABLE_LDAP
  173: #    define CURL_DISABLE_LDAP
  174: #  endif
  175: #  ifndef CURL_DISABLE_TELNET
  176: #    define CURL_DISABLE_TELNET
  177: #  endif
  178: #  ifndef CURL_DISABLE_DICT
  179: #    define CURL_DISABLE_DICT
  180: #  endif
  181: #  ifndef CURL_DISABLE_FILE
  182: #    define CURL_DISABLE_FILE
  183: #  endif
  184: #  ifndef CURL_DISABLE_RTSP
  185: #    define CURL_DISABLE_RTSP
  186: #  endif
  187: #  ifndef CURL_DISABLE_POP3
  188: #    define CURL_DISABLE_POP3
  189: #  endif
  190: #  ifndef CURL_DISABLE_IMAP
  191: #    define CURL_DISABLE_IMAP
  192: #  endif
  193: #  ifndef CURL_DISABLE_SMTP
  194: #    define CURL_DISABLE_SMTP
  195: #  endif
  196: #  ifndef CURL_DISABLE_GOPHER
  197: #    define CURL_DISABLE_GOPHER
  198: #  endif
  199: #  ifndef CURL_DISABLE_SMB
  200: #    define CURL_DISABLE_SMB
  201: #  endif
  202: #endif
  203: 
  204: /*
  205:  * When http is disabled rtsp is not supported.
  206:  */
  207: 
  208: #if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP)
  209: #  define CURL_DISABLE_RTSP
  210: #endif
  211: 
  212: /* ================================================================ */
  213: /* No system header file shall be included in this file before this */
  214: /* point. The only allowed ones are those included from curl/system.h */
  215: /* ================================================================ */
  216: 
  217: /*
  218:  * OS/400 setup file includes some system headers.
  219:  */
  220: 
  221: #ifdef __OS400__
  222: #  include "setup-os400.h"
  223: #endif
  224: 
  225: /*
  226:  * VMS setup file includes some system headers.
  227:  */
  228: 
  229: #ifdef __VMS
  230: #  include "setup-vms.h"
  231: #endif
  232: 
  233: /*
  234:  * Windows setup file includes some system headers.
  235:  */
  236: 
  237: #ifdef HAVE_WINDOWS_H
  238: #  include "setup-win32.h"
  239: #endif
  240: 
  241: /*
  242:  * Use getaddrinfo to resolve the IPv4 address literal. If the current network
  243:  * interface doesn't support IPv4, but supports IPv6, NAT64, and DNS64,
  244:  * performing this task will result in a synthesized IPv6 address.
  245:  */
  246: #ifdef  __APPLE__
  247: #define USE_RESOLVE_ON_IPS 1
  248: #endif
  249: 
  250: #ifdef USE_LWIPSOCK
  251: #  include <lwip/init.h>
  252: #  include <lwip/sockets.h>
  253: #  include <lwip/netdb.h>
  254: #endif
  255: 
  256: #ifdef HAVE_EXTRA_STRICMP_H
  257: #  include <extra/stricmp.h>
  258: #endif
  259: 
  260: #ifdef HAVE_EXTRA_STRDUP_H
  261: #  include <extra/strdup.h>
  262: #endif
  263: 
  264: #ifdef TPF
  265: #  include <strings.h>    /* for bzero, strcasecmp, and strncasecmp */
  266: #  include <string.h>     /* for strcpy and strlen */
  267: #  include <stdlib.h>     /* for rand and srand */
  268: #  include <sys/socket.h> /* for select and ioctl*/
  269: #  include <netdb.h>      /* for in_addr_t definition */
  270: #  include <tpf/sysapi.h> /* for tpf_process_signals */
  271:    /* change which select is used for libcurl */
  272: #  define select(a,b,c,d,e) tpf_select_libcurl(a,b,c,d,e)
  273: #endif
  274: 
  275: #ifdef __VXWORKS__
  276: #  include <sockLib.h>    /* for generic BSD socket functions */
  277: #  include <ioLib.h>      /* for basic I/O interface functions */
  278: #endif
  279: 
  280: #ifdef __AMIGA__
  281: #  include <exec/types.h>
  282: #  include <exec/execbase.h>
  283: #  include <proto/exec.h>
  284: #  include <proto/dos.h>
  285: #  ifdef HAVE_PROTO_BSDSOCKET_H
  286: #    include <proto/bsdsocket.h> /* ensure bsdsocket.library use */
  287: #    define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
  288: #  endif
  289: #endif
  290: 
  291: #include <stdio.h>
  292: #ifdef HAVE_ASSERT_H
  293: #include <assert.h>
  294: #endif
  295: 
  296: #ifdef __TANDEM /* for nsr-tandem-nsk systems */
  297: #include <floss.h>
  298: #endif
  299: 
  300: #ifndef STDC_HEADERS /* no standard C headers! */
  301: #include <curl/stdcheaders.h>
  302: #endif
  303: 
  304: #ifdef __POCC__
  305: #  include <sys/types.h>
  306: #  include <unistd.h>
  307: #  define sys_nerr EILSEQ
  308: #endif
  309: 
  310: /*
  311:  * Salford-C kludge section (mostly borrowed from wxWidgets).
  312:  */
  313: #ifdef __SALFORDC__
  314:   #pragma suppress 353             /* Possible nested comments */
  315:   #pragma suppress 593             /* Define not used */
  316:   #pragma suppress 61              /* enum has no name */
  317:   #pragma suppress 106             /* unnamed, unused parameter */
  318:   #include <clib.h>
  319: #endif
  320: 
  321: /*
  322:  * Large file (>2Gb) support using WIN32 functions.
  323:  */
  324: 
  325: #ifdef USE_WIN32_LARGE_FILES
  326: #  include <io.h>
  327: #  include <sys/types.h>
  328: #  include <sys/stat.h>
  329: #  undef  lseek
  330: #  define lseek(fdes,offset,whence)  _lseeki64(fdes, offset, whence)
  331: #  undef  fstat
  332: #  define fstat(fdes,stp)            _fstati64(fdes, stp)
  333: #  undef  stat
  334: #  define stat(fname,stp)            _stati64(fname, stp)
  335: #  define struct_stat                struct _stati64
  336: #  define LSEEK_ERROR                (__int64)-1
  337: #endif
  338: 
  339: /*
  340:  * Small file (<2Gb) support using WIN32 functions.
  341:  */
  342: 
  343: #ifdef USE_WIN32_SMALL_FILES
  344: #  include <io.h>
  345: #  include <sys/types.h>
  346: #  include <sys/stat.h>
  347: #  ifndef _WIN32_WCE
  348: #    undef  lseek
  349: #    define lseek(fdes,offset,whence)  _lseek(fdes, (long)offset, whence)
  350: #    define fstat(fdes,stp)            _fstat(fdes, stp)
  351: #    define stat(fname,stp)            _stat(fname, stp)
  352: #    define struct_stat                struct _stat
  353: #  endif
  354: #  define LSEEK_ERROR                (long)-1
  355: #endif
  356: 
  357: #ifndef struct_stat
  358: #  define struct_stat struct stat
  359: #endif
  360: 
  361: #ifndef LSEEK_ERROR
  362: #  define LSEEK_ERROR (off_t)-1
  363: #endif
  364: 
  365: #ifndef SIZEOF_TIME_T
  366: /* assume default size of time_t to be 32 bit */
  367: #define SIZEOF_TIME_T 4
  368: #endif
  369: 
  370: /*
  371:  * Default sizeof(off_t) in case it hasn't been defined in config file.
  372:  */
  373: 
  374: #ifndef SIZEOF_OFF_T
  375: #  if defined(__VMS) && !defined(__VAX)
  376: #    if defined(_LARGEFILE)
  377: #      define SIZEOF_OFF_T 8
  378: #    endif
  379: #  elif defined(__OS400__) && defined(__ILEC400__)
  380: #    if defined(_LARGE_FILES)
  381: #      define SIZEOF_OFF_T 8
  382: #    endif
  383: #  elif defined(__MVS__) && defined(__IBMC__)
  384: #    if defined(_LP64) || defined(_LARGE_FILES)
  385: #      define SIZEOF_OFF_T 8
  386: #    endif
  387: #  elif defined(__370__) && defined(__IBMC__)
  388: #    if defined(_LP64) || defined(_LARGE_FILES)
  389: #      define SIZEOF_OFF_T 8
  390: #    endif
  391: #  endif
  392: #  ifndef SIZEOF_OFF_T
  393: #    define SIZEOF_OFF_T 4
  394: #  endif
  395: #endif
  396: 
  397: #if (SIZEOF_CURL_OFF_T == 4)
  398: #  define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
  399: #else
  400:    /* assume CURL_SIZEOF_CURL_OFF_T == 8 */
  401: #  define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
  402: #endif
  403: #define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1))
  404: 
  405: #if (SIZEOF_TIME_T == 4)
  406: #  ifdef HAVE_TIME_T_UNSIGNED
  407: #  define TIME_T_MAX UINT_MAX
  408: #  define TIME_T_MIN 0
  409: #  else
  410: #  define TIME_T_MAX INT_MAX
  411: #  define TIME_T_MIN INT_MIN
  412: #  endif
  413: #else
  414: #  ifdef HAVE_TIME_T_UNSIGNED
  415: #  define TIME_T_MAX 0xFFFFFFFFFFFFFFFF
  416: #  define TIME_T_MIN 0
  417: #  else
  418: #  define TIME_T_MAX 0x7FFFFFFFFFFFFFFF
  419: #  define TIME_T_MIN (-TIME_T_MAX - 1)
  420: #  endif
  421: #endif
  422: 
  423: #ifndef SIZE_T_MAX
  424: /* some limits.h headers have this defined, some don't */
  425: #if defined(SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > 4)
  426: #define SIZE_T_MAX 18446744073709551615U
  427: #else
  428: #define SIZE_T_MAX 4294967295U
  429: #endif
  430: #endif
  431: 
  432: /*
  433:  * Arg 2 type for gethostname in case it hasn't been defined in config file.
  434:  */
  435: 
  436: #ifndef GETHOSTNAME_TYPE_ARG2
  437: #  ifdef USE_WINSOCK
  438: #    define GETHOSTNAME_TYPE_ARG2 int
  439: #  else
  440: #    define GETHOSTNAME_TYPE_ARG2 size_t
  441: #  endif
  442: #endif
  443: 
  444: /* Below we define some functions. They should
  445: 
  446:    4. set the SIGALRM signal timeout
  447:    5. set dir/file naming defines
  448:    */
  449: 
  450: #ifdef WIN32
  451: 
  452: #  define DIR_CHAR      "\\"
  453: 
  454: #else /* WIN32 */
  455: 
  456: #  ifdef MSDOS  /* Watt-32 */
  457: 
  458: #    include <sys/ioctl.h>
  459: #    define select(n,r,w,x,t) select_s(n,r,w,x,t)
  460: #    define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z))
  461: #    include <tcp.h>
  462: #    ifdef word
  463: #      undef word
  464: #    endif
  465: #    ifdef byte
  466: #      undef byte
  467: #    endif
  468: 
  469: #  endif /* MSDOS */
  470: 
  471: #  ifdef __minix
  472:      /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
  473:      extern char *strtok_r(char *s, const char *delim, char **last);
  474:      extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp);
  475: #  endif
  476: 
  477: #  define DIR_CHAR      "/"
  478: 
  479: #  ifndef fileno /* sunos 4 have this as a macro! */
  480:      int fileno(FILE *stream);
  481: #  endif
  482: 
  483: #endif /* WIN32 */
  484: 
  485: /*
  486:  * msvc 6.0 requires PSDK in order to have INET6_ADDRSTRLEN
  487:  * defined in ws2tcpip.h as well as to provide IPv6 support.
  488:  * Does not apply if lwIP is used.
  489:  */
  490: 
  491: #if defined(_MSC_VER) && !defined(__POCC__) && !defined(USE_LWIPSOCK)
  492: #  if !defined(HAVE_WS2TCPIP_H) || \
  493:      ((_MSC_VER < 1300) && !defined(INET6_ADDRSTRLEN))
  494: #    undef HAVE_GETADDRINFO_THREADSAFE
  495: #    undef HAVE_FREEADDRINFO
  496: #    undef HAVE_GETADDRINFO
  497: #    undef HAVE_GETNAMEINFO
  498: #    undef ENABLE_IPV6
  499: #  endif
  500: #endif
  501: 
  502: /* ---------------------------------------------------------------- */
  503: /*             resolver specialty compile-time defines              */
  504: /*         CURLRES_* defines to use in the host*.c sources          */
  505: /* ---------------------------------------------------------------- */
  506: 
  507: /*
  508:  * lcc-win32 doesn't have _beginthreadex(), lacks threads support.
  509:  */
  510: 
  511: #if defined(__LCC__) && defined(WIN32)
  512: #  undef USE_THREADS_POSIX
  513: #  undef USE_THREADS_WIN32
  514: #endif
  515: 
  516: /*
  517:  * MSVC threads support requires a multi-threaded runtime library.
  518:  * _beginthreadex() is not available in single-threaded ones.
  519:  */
  520: 
  521: #if defined(_MSC_VER) && !defined(__POCC__) && !defined(_MT)
  522: #  undef USE_THREADS_POSIX
  523: #  undef USE_THREADS_WIN32
  524: #endif
  525: 
  526: /*
  527:  * Mutually exclusive CURLRES_* definitions.
  528:  */
  529: 
  530: #if defined(ENABLE_IPV6) && defined(HAVE_GETADDRINFO)
  531: #  define CURLRES_IPV6
  532: #else
  533: #  define CURLRES_IPV4
  534: #endif
  535: 
  536: #ifdef USE_ARES
  537: #  define CURLRES_ASYNCH
  538: #  define CURLRES_ARES
  539: /* now undef the stock libc functions just to avoid them being used */
  540: #  undef HAVE_GETADDRINFO
  541: #  undef HAVE_FREEADDRINFO
  542: #  undef HAVE_GETHOSTBYNAME
  543: #elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
  544: #  define CURLRES_ASYNCH
  545: #  define CURLRES_THREADED
  546: #else
  547: #  define CURLRES_SYNCH
  548: #endif
  549: 
  550: /* ---------------------------------------------------------------- */
  551: 
  552: /*
  553:  * When using WINSOCK, TELNET protocol requires WINSOCK2 API.
  554:  */
  555: 
  556: #if defined(USE_WINSOCK) && (USE_WINSOCK != 2)
  557: #  define CURL_DISABLE_TELNET 1
  558: #endif
  559: 
  560: /*
  561:  * msvc 6.0 does not have struct sockaddr_storage and
  562:  * does not define IPPROTO_ESP in winsock2.h. But both
  563:  * are available if PSDK is properly installed.
  564:  */
  565: 
  566: #if defined(_MSC_VER) && !defined(__POCC__)
  567: #  if !defined(HAVE_WINSOCK2_H) || ((_MSC_VER < 1300) && !defined(IPPROTO_ESP))
  568: #    undef HAVE_STRUCT_SOCKADDR_STORAGE
  569: #  endif
  570: #endif
  571: 
  572: /*
  573:  * Intentionally fail to build when using msvc 6.0 without PSDK installed.
  574:  * The brave of heart can circumvent this, defining ALLOW_MSVC6_WITHOUT_PSDK
  575:  * in lib/config-win32.h although absolutely discouraged and unsupported.
  576:  */
  577: 
  578: #if defined(_MSC_VER) && !defined(__POCC__)
  579: #  if !defined(HAVE_WINDOWS_H) || ((_MSC_VER < 1300) && !defined(_FILETIME_))
  580: #    if !defined(ALLOW_MSVC6_WITHOUT_PSDK)
  581: #      error MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. \
  582:              "Windows Server 2003 PSDK"
  583: #    else
  584: #      define CURL_DISABLE_LDAP 1
  585: #    endif
  586: #  endif
  587: #endif
  588: 
  589: #ifdef NETWARE
  590: int netware_init(void);
  591: #ifndef __NOVELL_LIBC__
  592: #include <sys/bsdskt.h>
  593: #include <sys/timeval.h>
  594: #endif
  595: #endif
  596: 
  597: #if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && !defined(USE_WIN32_IDN)
  598: /* The lib and header are present */
  599: #define USE_LIBIDN2
  600: #endif
  601: 
  602: #if defined(USE_LIBIDN2) && defined(USE_WIN32_IDN)
  603: #error "Both libidn2 and WinIDN are enabled, choose one."
  604: #endif
  605: 
  606: #define LIBIDN_REQUIRED_VERSION "0.4.1"
  607: 
  608: #if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_NSS) || \
  609:     defined(USE_MBEDTLS) || \
  610:     defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || \
  611:     defined(USE_SECTRANSP) || defined(USE_GSKIT) || defined(USE_MESALINK) || \
  612:     defined(USE_BEARSSL)
  613: #define USE_SSL    /* SSL support has been enabled */
  614: #endif
  615: 
  616: /* Single point where USE_SPNEGO definition might be defined */
  617: #if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
  618:     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
  619: #define USE_SPNEGO
  620: #endif
  621: 
  622: /* Single point where USE_KERBEROS5 definition might be defined */
  623: #if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
  624:     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
  625: #define USE_KERBEROS5
  626: #endif
  627: 
  628: /* Single point where USE_NTLM definition might be defined */
  629: #if !defined(CURL_DISABLE_NTLM) && !defined(CURL_DISABLE_CRYPTO_AUTH)
  630: #if defined(USE_OPENSSL) || defined(USE_WINDOWS_SSPI) || \
  631:     defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_SECTRANSP) || \
  632:     defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) || \
  633:     defined(USE_MBEDTLS)
  634: 
  635: #define USE_NTLM
  636: 
  637: #  if defined(USE_MBEDTLS)
  638: /* Get definition of MBEDTLS_MD4_C */
  639: #  include <mbedtls/md4.h>
  640: #  endif
  641: 
  642: #endif
  643: #endif
  644: 
  645: #ifdef CURL_WANTS_CA_BUNDLE_ENV
  646: #error "No longer supported. Set CURLOPT_CAINFO at runtime instead."
  647: #endif
  648: 
  649: #if defined(USE_LIBSSH2) || defined(USE_LIBSSH) || defined(USE_WOLFSSH)
  650: #define USE_SSH
  651: #endif
  652: 
  653: /*
  654:  * Provide a mechanism to silence picky compilers, such as gcc 4.6+.
  655:  * Parameters should of course normally not be unused, but for example when
  656:  * we have multiple implementations of the same interface it may happen.
  657:  */
  658: 
  659: #if defined(__GNUC__) && ((__GNUC__ >= 3) || \
  660:   ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
  661: #  define UNUSED_PARAM __attribute__((__unused__))
  662: #  define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
  663: #else
  664: #  define UNUSED_PARAM /*NOTHING*/
  665: #  define WARN_UNUSED_RESULT
  666: #endif
  667: 
  668: /*
  669:  * Include macros and defines that should only be processed once.
  670:  */
  671: 
  672: #ifndef HEADER_CURL_SETUP_ONCE_H
  673: #include "curl_setup_once.h"
  674: #endif
  675: 
  676: /*
  677:  * Definition of our NOP statement Object-like macro
  678:  */
  679: 
  680: #ifndef Curl_nop_stmt
  681: #  define Curl_nop_stmt do { } while(0)
  682: #endif
  683: 
  684: /*
  685:  * Ensure that Winsock and lwIP TCP/IP stacks are not mixed.
  686:  */
  687: 
  688: #if defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)
  689: #  if defined(SOCKET) || \
  690:      defined(USE_WINSOCK) || \
  691:      defined(HAVE_WINSOCK_H) || \
  692:      defined(HAVE_WINSOCK2_H) || \
  693:      defined(HAVE_WS2TCPIP_H)
  694: #    error "Winsock and lwIP TCP/IP stack definitions shall not coexist!"
  695: #  endif
  696: #endif
  697: 
  698: /*
  699:  * Portable symbolic names for Winsock shutdown() mode flags.
  700:  */
  701: 
  702: #ifdef USE_WINSOCK
  703: #  define SHUT_RD   0x00
  704: #  define SHUT_WR   0x01
  705: #  define SHUT_RDWR 0x02
  706: #endif
  707: 
  708: /* Define S_ISREG if not defined by system headers, f.e. MSVC */
  709: #if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
  710: #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
  711: #endif
  712: 
  713: /* Define S_ISDIR if not defined by system headers, f.e. MSVC */
  714: #if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)
  715: #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
  716: #endif
  717: 
  718: /* In Windows the default file mode is text but an application can override it.
  719: Therefore we specify it explicitly. https://github.com/curl/curl/pull/258
  720: */
  721: #if defined(WIN32) || defined(MSDOS)
  722: #define FOPEN_READTEXT "rt"
  723: #define FOPEN_WRITETEXT "wt"
  724: #define FOPEN_APPENDTEXT "at"
  725: #elif defined(__CYGWIN__)
  726: /* Cygwin has specific behavior we need to address when WIN32 is not defined.
  727: https://cygwin.com/cygwin-ug-net/using-textbinary.html
  728: For write we want our output to have line endings of LF and be compatible with
  729: other Cygwin utilities. For read we want to handle input that may have line
  730: endings either CRLF or LF so 't' is appropriate.
  731: */
  732: #define FOPEN_READTEXT "rt"
  733: #define FOPEN_WRITETEXT "w"
  734: #define FOPEN_APPENDTEXT "a"
  735: #else
  736: #define FOPEN_READTEXT "r"
  737: #define FOPEN_WRITETEXT "w"
  738: #define FOPEN_APPENDTEXT "a"
  739: #endif
  740: 
  741: /* WinSock destroys recv() buffer when send() failed.
  742:  * Enabled automatically for Windows and for Cygwin as Cygwin sockets are
  743:  * wrappers for WinSock sockets. https://github.com/curl/curl/issues/657
  744:  * Define DONT_USE_RECV_BEFORE_SEND_WORKAROUND to force disable workaround.
  745:  */
  746: #if !defined(DONT_USE_RECV_BEFORE_SEND_WORKAROUND)
  747: #  if defined(WIN32) || defined(__CYGWIN__)
  748: #    define USE_RECV_BEFORE_SEND_WORKAROUND
  749: #  endif
  750: #else  /* DONT_USE_RECV_BEFORE_SEND_WORKAROUND */
  751: #  ifdef USE_RECV_BEFORE_SEND_WORKAROUND
  752: #    undef USE_RECV_BEFORE_SEND_WORKAROUND
  753: #  endif
  754: #endif /* DONT_USE_RECV_BEFORE_SEND_WORKAROUND */
  755: 
  756: /* Detect Windows App environment which has a restricted access
  757:  * to the Win32 APIs. */
  758: # if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)) || \
  759:   defined(WINAPI_FAMILY)
  760: #  include <winapifamily.h>
  761: #  if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) &&  \
  762:      !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  763: #    define CURL_WINDOWS_APP
  764: #  endif
  765: # endif
  766: 
  767: /* for systems that don't detect this in configure, use a sensible default */
  768: #ifndef CURL_SA_FAMILY_T
  769: #define CURL_SA_FAMILY_T unsigned short
  770: #endif
  771: 
  772: /* Some convenience macros to get the larger/smaller value out of two given.
  773:    We prefix with CURL to prevent name collisions. */
  774: #define CURLMAX(x,y) ((x)>(y)?(x):(y))
  775: #define CURLMIN(x,y) ((x)<(y)?(x):(y))
  776: 
  777: /* Some versions of the Android SDK is missing the declaration */
  778: #if defined(HAVE_GETPWUID_R) && defined(HAVE_DECL_GETPWUID_R_MISSING)
  779: struct passwd;
  780: int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf,
  781:                size_t buflen, struct passwd **result);
  782: #endif
  783: 
  784: #ifdef DEBUGBUILD
  785: #define UNITTEST
  786: #else
  787: #define UNITTEST static
  788: #endif
  789: 
  790: #if defined(USE_NGTCP2) || defined(USE_QUICHE)
  791: #define ENABLE_QUIC
  792: #endif
  793: 
  794: #endif /* HEADER_CURL_SETUP_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>