Home | History | Annotate | Download | only in lib
      1 #ifndef HEADER_CURL_SETUP_H
      2 #define HEADER_CURL_SETUP_H
      3 /***************************************************************************
      4  *                                  _   _ ____  _
      5  *  Project                     ___| | | |  _ \| |
      6  *                             / __| | | | |_) | |
      7  *                            | (__| |_| |  _ <| |___
      8  *                             \___|\___/|_| \_\_____|
      9  *
     10  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel (at) 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 http://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 /*
     26  * Define WIN32 when build target is Win32 API
     27  */
     28 
     29 #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && \
     30     !defined(__SYMBIAN32__)
     31 #define WIN32
     32 #endif
     33 
     34 /*
     35  * Include configuration script results or hand-crafted
     36  * configuration file for platforms which lack config tool.
     37  */
     38 
     39 #ifdef HAVE_CONFIG_H
     40 
     41 #include "curl_config.h"
     42 
     43 #else /* HAVE_CONFIG_H */
     44 
     45 #ifdef _WIN32_WCE
     46 #  include "config-win32ce.h"
     47 #else
     48 #  ifdef WIN32
     49 #    include "config-win32.h"
     50 #  endif
     51 #endif
     52 
     53 #if defined(macintosh) && defined(__MRC__)
     54 #  include "config-mac.h"
     55 #endif
     56 
     57 #ifdef __riscos__
     58 #  include "config-riscos.h"
     59 #endif
     60 
     61 #ifdef __AMIGA__
     62 #  include "config-amigaos.h"
     63 #endif
     64 
     65 #ifdef __SYMBIAN32__
     66 #  include "config-symbian.h"
     67 #endif
     68 
     69 #ifdef __OS400__
     70 #  include "config-os400.h"
     71 #endif
     72 
     73 #ifdef TPF
     74 #  include "config-tpf.h"
     75 #endif
     76 
     77 #ifdef __VXWORKS__
     78 #  include "config-vxworks.h"
     79 #endif
     80 
     81 #endif /* HAVE_CONFIG_H */
     82 
     83 /* ================================================================ */
     84 /* Definition of preprocessor macros/symbols which modify compiler  */
     85 /* behavior or generated code characteristics must be done here,   */
     86 /* as appropriate, before any system header file is included. It is */
     87 /* also possible to have them defined in the config file included   */
     88 /* before this point. As a result of all this we frown inclusion of */
     89 /* system header files in our config files, avoid this at any cost. */
     90 /* ================================================================ */
     91 
     92 /*
     93  * AIX 4.3 and newer needs _THREAD_SAFE defined to build
     94  * proper reentrant code. Others may also need it.
     95  */
     96 
     97 #ifdef NEED_THREAD_SAFE
     98 #  ifndef _THREAD_SAFE
     99 #    define _THREAD_SAFE
    100 #  endif
    101 #endif
    102 
    103 /*
    104  * Tru64 needs _REENTRANT set for a few function prototypes and
    105  * things to appear in the system header files. Unixware needs it
    106  * to build proper reentrant code. Others may also need it.
    107  */
    108 
    109 #ifdef NEED_REENTRANT
    110 #  ifndef _REENTRANT
    111 #    define _REENTRANT
    112 #  endif
    113 #endif
    114 
    115 /* Solaris needs this to get a POSIX-conformant getpwuid_r */
    116 #if defined(sun) || defined(__sun)
    117 #  ifndef _POSIX_PTHREAD_SEMANTICS
    118 #    define _POSIX_PTHREAD_SEMANTICS 1
    119 #  endif
    120 #endif
    121 
    122 /* ================================================================ */
    123 /*  If you need to include a system header file for your platform,  */
    124 /*  please, do it beyond the point further indicated in this file.  */
    125 /* ================================================================ */
    126 
    127 /*
    128  * libcurl's external interface definitions are also used internally,
    129  * and might also include required system header files to define them.
    130  */
    131 
    132 #include <curl/curlbuild.h>
    133 
    134 /*
    135  * Compile time sanity checks must also be done when building the library.
    136  */
    137 
    138 #include <curl/curlrules.h>
    139 
    140 /*
    141  * Ensure that no one is using the old SIZEOF_CURL_OFF_T macro
    142  */
    143 
    144 #ifdef SIZEOF_CURL_OFF_T
    145 #  error "SIZEOF_CURL_OFF_T shall not be defined!"
    146    Error Compilation_aborted_SIZEOF_CURL_OFF_T_shall_not_be_defined
    147 #endif
    148 
    149 /*
    150  * Disable other protocols when http is the only one desired.
    151  */
    152 
    153 #ifdef HTTP_ONLY
    154 #  ifndef CURL_DISABLE_TFTP
    155 #    define CURL_DISABLE_TFTP
    156 #  endif
    157 #  ifndef CURL_DISABLE_FTP
    158 #    define CURL_DISABLE_FTP
    159 #  endif
    160 #  ifndef CURL_DISABLE_LDAP
    161 #    define CURL_DISABLE_LDAP
    162 #  endif
    163 #  ifndef CURL_DISABLE_TELNET
    164 #    define CURL_DISABLE_TELNET
    165 #  endif
    166 #  ifndef CURL_DISABLE_DICT
    167 #    define CURL_DISABLE_DICT
    168 #  endif
    169 #  ifndef CURL_DISABLE_FILE
    170 #    define CURL_DISABLE_FILE
    171 #  endif
    172 #  ifndef CURL_DISABLE_RTSP
    173 #    define CURL_DISABLE_RTSP
    174 #  endif
    175 #  ifndef CURL_DISABLE_POP3
    176 #    define CURL_DISABLE_POP3
    177 #  endif
    178 #  ifndef CURL_DISABLE_IMAP
    179 #    define CURL_DISABLE_IMAP
    180 #  endif
    181 #  ifndef CURL_DISABLE_SMTP
    182 #    define CURL_DISABLE_SMTP
    183 #  endif
    184 #  ifndef CURL_DISABLE_RTSP
    185 #    define CURL_DISABLE_RTSP
    186 #  endif
    187 #  ifndef CURL_DISABLE_RTMP
    188 #    define CURL_DISABLE_RTMP
    189 #  endif
    190 #  ifndef CURL_DISABLE_GOPHER
    191 #    define CURL_DISABLE_GOPHER
    192 #  endif
    193 #  ifndef CURL_DISABLE_SMB
    194 #    define CURL_DISABLE_SMB
    195 #  endif
    196 #endif
    197 
    198 /*
    199  * When http is disabled rtsp is not supported.
    200  */
    201 
    202 #if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP)
    203 #  define CURL_DISABLE_RTSP
    204 #endif
    205 
    206 /* ================================================================ */
    207 /* No system header file shall be included in this file before this */
    208 /* point. The only allowed ones are those included from curlbuild.h */
    209 /* ================================================================ */
    210 
    211 /*
    212  * OS/400 setup file includes some system headers.
    213  */
    214 
    215 #ifdef __OS400__
    216 #  include "setup-os400.h"
    217 #endif
    218 
    219 /*
    220  * VMS setup file includes some system headers.
    221  */
    222 
    223 #ifdef __VMS
    224 #  include "setup-vms.h"
    225 #endif
    226 
    227 /*
    228  * Include header files for windows builds before redefining anything.
    229  * Use this preprocessor block only to include or exclude windows.h,
    230  * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
    231  * to any other further and independent block.  Under Cygwin things work
    232  * just as under linux (e.g. <sys/socket.h>) and the winsock headers should
    233  * never be included when __CYGWIN__ is defined.  configure script takes
    234  * care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
    235  * neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
    236  */
    237 
    238 #ifdef HAVE_WINDOWS_H
    239 #  if defined(UNICODE) && !defined(_UNICODE)
    240 #    define _UNICODE
    241 #  endif
    242 #  if defined(_UNICODE) && !defined(UNICODE)
    243 #    define UNICODE
    244 #  endif
    245 #  ifndef WIN32_LEAN_AND_MEAN
    246 #    define WIN32_LEAN_AND_MEAN
    247 #  endif
    248 #  include <windows.h>
    249 #  ifdef HAVE_WINSOCK2_H
    250 #    include <winsock2.h>
    251 #    ifdef HAVE_WS2TCPIP_H
    252 #       include <ws2tcpip.h>
    253 #    endif
    254 #  else
    255 #    ifdef HAVE_WINSOCK_H
    256 #      include <winsock.h>
    257 #    endif
    258 #  endif
    259 #  include <tchar.h>
    260 #  ifdef UNICODE
    261      typedef wchar_t *(*curl_wcsdup_callback)(const wchar_t *str);
    262 #  endif
    263 #endif
    264 
    265 /*
    266  * Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
    267  * define USE_WINSOCK to 1 if we have and use WINSOCK  API, else
    268  * undefine USE_WINSOCK.
    269  */
    270 
    271 #undef USE_WINSOCK
    272 
    273 #ifdef HAVE_WINSOCK2_H
    274 #  define USE_WINSOCK 2
    275 #else
    276 #  ifdef HAVE_WINSOCK_H
    277 #    define USE_WINSOCK 1
    278 #  endif
    279 #endif
    280 
    281 #ifdef USE_LWIPSOCK
    282 #  include <lwip/init.h>
    283 #  include <lwip/sockets.h>
    284 #  include <lwip/netdb.h>
    285 #endif
    286 
    287 #ifdef HAVE_EXTRA_STRICMP_H
    288 #  include <extra/stricmp.h>
    289 #endif
    290 
    291 #ifdef HAVE_EXTRA_STRDUP_H
    292 #  include <extra/strdup.h>
    293 #endif
    294 
    295 #ifdef TPF
    296 #  include <strings.h>    /* for bzero, strcasecmp, and strncasecmp */
    297 #  include <string.h>     /* for strcpy and strlen */
    298 #  include <stdlib.h>     /* for rand and srand */
    299 #  include <sys/socket.h> /* for select and ioctl*/
    300 #  include <netdb.h>      /* for in_addr_t definition */
    301 #  include <tpf/sysapi.h> /* for tpf_process_signals */
    302    /* change which select is used for libcurl */
    303 #  define select(a,b,c,d,e) tpf_select_libcurl(a,b,c,d,e)
    304 #endif
    305 
    306 #ifdef __VXWORKS__
    307 #  include <sockLib.h>    /* for generic BSD socket functions */
    308 #  include <ioLib.h>      /* for basic I/O interface functions */
    309 #endif
    310 
    311 #ifdef __AMIGA__
    312 #  ifndef __ixemul__
    313 #    include <exec/types.h>
    314 #    include <exec/execbase.h>
    315 #    include <proto/exec.h>
    316 #    include <proto/dos.h>
    317 #    define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
    318 #  endif
    319 #endif
    320 
    321 #include <stdio.h>
    322 #ifdef HAVE_ASSERT_H
    323 #include <assert.h>
    324 #endif
    325 
    326 #ifdef __TANDEM /* for nsr-tandem-nsk systems */
    327 #include <floss.h>
    328 #endif
    329 
    330 #ifndef STDC_HEADERS /* no standard C headers! */
    331 #include <curl/stdcheaders.h>
    332 #endif
    333 
    334 #ifdef __POCC__
    335 #  include <sys/types.h>
    336 #  include <unistd.h>
    337 #  define sys_nerr EILSEQ
    338 #endif
    339 
    340 /*
    341  * Salford-C kludge section (mostly borrowed from wxWidgets).
    342  */
    343 #ifdef __SALFORDC__
    344   #pragma suppress 353             /* Possible nested comments */
    345   #pragma suppress 593             /* Define not used */
    346   #pragma suppress 61              /* enum has no name */
    347   #pragma suppress 106             /* unnamed, unused parameter */
    348   #include <clib.h>
    349 #endif
    350 
    351 /*
    352  * Large file (>2Gb) support using WIN32 functions.
    353  */
    354 
    355 #ifdef USE_WIN32_LARGE_FILES
    356 #  include <io.h>
    357 #  include <sys/types.h>
    358 #  include <sys/stat.h>
    359 #  undef  lseek
    360 #  define lseek(fdes,offset,whence)  _lseeki64(fdes, offset, whence)
    361 #  undef  fstat
    362 #  define fstat(fdes,stp)            _fstati64(fdes, stp)
    363 #  undef  stat
    364 #  define stat(fname,stp)            _stati64(fname, stp)
    365 #  define struct_stat                struct _stati64
    366 #  define LSEEK_ERROR                (__int64)-1
    367 #endif
    368 
    369 /*
    370  * Small file (<2Gb) support using WIN32 functions.
    371  */
    372 
    373 #ifdef USE_WIN32_SMALL_FILES
    374 #  include <io.h>
    375 #  include <sys/types.h>
    376 #  include <sys/stat.h>
    377 #  ifndef _WIN32_WCE
    378 #    undef  lseek
    379 #    define lseek(fdes,offset,whence)  _lseek(fdes, (long)offset, whence)
    380 #    define fstat(fdes,stp)            _fstat(fdes, stp)
    381 #    define stat(fname,stp)            _stat(fname, stp)
    382 #    define struct_stat                struct _stat
    383 #  endif
    384 #  define LSEEK_ERROR                (long)-1
    385 #endif
    386 
    387 #ifndef struct_stat
    388 #  define struct_stat struct stat
    389 #endif
    390 
    391 #ifndef LSEEK_ERROR
    392 #  define LSEEK_ERROR (off_t)-1
    393 #endif
    394 
    395 /*
    396  * Arg 2 type for gethostname in case it hasn't been defined in config file.
    397  */
    398 
    399 #ifndef GETHOSTNAME_TYPE_ARG2
    400 #  ifdef USE_WINSOCK
    401 #    define GETHOSTNAME_TYPE_ARG2 int
    402 #  else
    403 #    define GETHOSTNAME_TYPE_ARG2 size_t
    404 #  endif
    405 #endif
    406 
    407 /* Below we define some functions. They should
    408 
    409    4. set the SIGALRM signal timeout
    410    5. set dir/file naming defines
    411    */
    412 
    413 #ifdef WIN32
    414 
    415 #  define DIR_CHAR      "\\"
    416 #  define DOT_CHAR      "_"
    417 
    418 #else /* WIN32 */
    419 
    420 #  ifdef MSDOS  /* Watt-32 */
    421 
    422 #    include <sys/ioctl.h>
    423 #    define select(n,r,w,x,t) select_s(n,r,w,x,t)
    424 #    define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z))
    425 #    include <tcp.h>
    426 #    ifdef word
    427 #      undef word
    428 #    endif
    429 #    ifdef byte
    430 #      undef byte
    431 #    endif
    432 
    433 #  endif /* MSDOS */
    434 
    435 #  ifdef __minix
    436      /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
    437      extern char * strtok_r(char *s, const char *delim, char **last);
    438      extern struct tm * gmtime_r(const time_t * const timep, struct tm *tmp);
    439 #  endif
    440 
    441 #  define DIR_CHAR      "/"
    442 #  ifndef DOT_CHAR
    443 #    define DOT_CHAR      "."
    444 #  endif
    445 
    446 #  ifdef MSDOS
    447 #    undef DOT_CHAR
    448 #    define DOT_CHAR      "_"
    449 #  endif
    450 
    451 #  ifndef fileno /* sunos 4 have this as a macro! */
    452      int fileno( FILE *stream);
    453 #  endif
    454 
    455 #endif /* WIN32 */
    456 
    457 /*
    458  * msvc 6.0 requires PSDK in order to have INET6_ADDRSTRLEN
    459  * defined in ws2tcpip.h as well as to provide IPv6 support.
    460  */
    461 
    462 #if defined(_MSC_VER) && !defined(__POCC__)
    463 #  if !defined(HAVE_WS2TCPIP_H) || \
    464      ((_MSC_VER < 1300) && !defined(INET6_ADDRSTRLEN))
    465 #    undef HAVE_GETADDRINFO_THREADSAFE
    466 #    undef HAVE_FREEADDRINFO
    467 #    undef HAVE_GETADDRINFO
    468 #    undef HAVE_GETNAMEINFO
    469 #    undef ENABLE_IPV6
    470 #  endif
    471 #endif
    472 
    473 /* ---------------------------------------------------------------- */
    474 /*             resolver specialty compile-time defines              */
    475 /*         CURLRES_* defines to use in the host*.c sources          */
    476 /* ---------------------------------------------------------------- */
    477 
    478 /*
    479  * lcc-win32 doesn't have _beginthreadex(), lacks threads support.
    480  */
    481 
    482 #if defined(__LCC__) && defined(WIN32)
    483 #  undef USE_THREADS_POSIX
    484 #  undef USE_THREADS_WIN32
    485 #endif
    486 
    487 /*
    488  * MSVC threads support requires a multi-threaded runtime library.
    489  * _beginthreadex() is not available in single-threaded ones.
    490  */
    491 
    492 #if defined(_MSC_VER) && !defined(__POCC__) && !defined(_MT)
    493 #  undef USE_THREADS_POSIX
    494 #  undef USE_THREADS_WIN32
    495 #endif
    496 
    497 /*
    498  * Mutually exclusive CURLRES_* definitions.
    499  */
    500 
    501 #ifdef USE_ARES
    502 #  define CURLRES_ASYNCH
    503 #  define CURLRES_ARES
    504 /* now undef the stock libc functions just to avoid them being used */
    505 #  undef HAVE_GETADDRINFO
    506 #  undef HAVE_GETHOSTBYNAME
    507 #elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
    508 #  define CURLRES_ASYNCH
    509 #  define CURLRES_THREADED
    510 #else
    511 #  define CURLRES_SYNCH
    512 #endif
    513 
    514 #ifdef ENABLE_IPV6
    515 #  define CURLRES_IPV6
    516 #else
    517 #  define CURLRES_IPV4
    518 #endif
    519 
    520 /* ---------------------------------------------------------------- */
    521 
    522 /*
    523  * When using WINSOCK, TELNET protocol requires WINSOCK2 API.
    524  */
    525 
    526 #if defined(USE_WINSOCK) && (USE_WINSOCK != 2)
    527 #  define CURL_DISABLE_TELNET 1
    528 #endif
    529 
    530 /*
    531  * msvc 6.0 does not have struct sockaddr_storage and
    532  * does not define IPPROTO_ESP in winsock2.h. But both
    533  * are available if PSDK is properly installed.
    534  */
    535 
    536 #if defined(_MSC_VER) && !defined(__POCC__)
    537 #  if !defined(HAVE_WINSOCK2_H) || ((_MSC_VER < 1300) && !defined(IPPROTO_ESP))
    538 #    undef HAVE_STRUCT_SOCKADDR_STORAGE
    539 #  endif
    540 #endif
    541 
    542 /*
    543  * Intentionally fail to build when using msvc 6.0 without PSDK installed.
    544  * The brave of heart can circumvent this, defining ALLOW_MSVC6_WITHOUT_PSDK
    545  * in lib/config-win32.h although absolutely discouraged and unsupported.
    546  */
    547 
    548 #if defined(_MSC_VER) && !defined(__POCC__)
    549 #  if !defined(HAVE_WINDOWS_H) || ((_MSC_VER < 1300) && !defined(_FILETIME_))
    550 #    if !defined(ALLOW_MSVC6_WITHOUT_PSDK)
    551 #      error MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. \
    552              "Windows Server 2003 PSDK"
    553 #    else
    554 #      define CURL_DISABLE_LDAP 1
    555 #    endif
    556 #  endif
    557 #endif
    558 
    559 #ifdef NETWARE
    560 int netware_init(void);
    561 #ifndef __NOVELL_LIBC__
    562 #include <sys/bsdskt.h>
    563 #include <sys/timeval.h>
    564 #endif
    565 #endif
    566 
    567 #if defined(HAVE_LIBIDN) && defined(HAVE_TLD_H)
    568 /* The lib was present and the tld.h header (which is missing in libidn 0.3.X
    569    but we only work with libidn 0.4.1 or later) */
    570 #define USE_LIBIDN
    571 #endif
    572 
    573 #define LIBIDN_REQUIRED_VERSION "0.4.1"
    574 
    575 #if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_NSS) || \
    576     defined(USE_POLARSSL) || defined(USE_AXTLS) || \
    577     defined(USE_CYASSL) || defined(USE_SCHANNEL) || \
    578     defined(USE_DARWINSSL) || defined(USE_GSKIT)
    579 #define USE_SSL    /* SSL support has been enabled */
    580 #endif
    581 
    582 /* Single point where USE_SPNEGO definition might be defined */
    583 #if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
    584     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
    585 #define USE_SPNEGO
    586 #endif
    587 
    588 /* Single point where USE_KERBEROS5 definition might be defined */
    589 #if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
    590     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
    591 #define USE_KERBEROS5
    592 #endif
    593 
    594 /* Single point where USE_NTLM definition might be defined */
    595 #if !defined(CURL_DISABLE_NTLM) && !defined(CURL_DISABLE_CRYPTO_AUTH)
    596 #if defined(USE_OPENSSL) || defined(USE_WINDOWS_SSPI) || \
    597     defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_DARWINSSL) || \
    598     defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO)
    599 
    600 #ifdef HAVE_BORINGSSL /* BoringSSL is not NTLM capable */
    601 #undef USE_NTLM
    602 #else
    603 #define USE_NTLM
    604 #endif
    605 #endif
    606 #endif
    607 
    608 /* non-configure builds may define CURL_WANTS_CA_BUNDLE_ENV */
    609 #if defined(CURL_WANTS_CA_BUNDLE_ENV) && !defined(CURL_CA_BUNDLE)
    610 #define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")
    611 #endif
    612 
    613 /*
    614  * Provide a mechanism to silence picky compilers, such as gcc 4.6+.
    615  * Parameters should of course normally not be unused, but for example when
    616  * we have multiple implementations of the same interface it may happen.
    617  */
    618 
    619 #if defined(__GNUC__) && ((__GNUC__ >= 3) || \
    620   ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
    621 #  define UNUSED_PARAM __attribute__((__unused__))
    622 #  define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    623 #else
    624 #  define UNUSED_PARAM /*NOTHING*/
    625 #  define WARN_UNUSED_RESULT
    626 #endif
    627 
    628 /*
    629  * Include macros and defines that should only be processed once.
    630  */
    631 
    632 #ifndef HEADER_CURL_SETUP_ONCE_H
    633 #include "curl_setup_once.h"
    634 #endif
    635 
    636 /*
    637  * Definition of our NOP statement Object-like macro
    638  */
    639 
    640 #ifndef Curl_nop_stmt
    641 #  define Curl_nop_stmt do { } WHILE_FALSE
    642 #endif
    643 
    644 /*
    645  * Ensure that Winsock and lwIP TCP/IP stacks are not mixed.
    646  */
    647 
    648 #if defined(__LWIP_OPT_H__)
    649 #  if defined(SOCKET) || \
    650      defined(USE_WINSOCK) || \
    651      defined(HAVE_WINSOCK_H) || \
    652      defined(HAVE_WINSOCK2_H) || \
    653      defined(HAVE_WS2TCPIP_H)
    654 #    error "Winsock and lwIP TCP/IP stack definitions shall not coexist!"
    655 #  endif
    656 #endif
    657 
    658 /*
    659  * Portable symbolic names for Winsock shutdown() mode flags.
    660  */
    661 
    662 #ifdef USE_WINSOCK
    663 #  define SHUT_RD   0x00
    664 #  define SHUT_WR   0x01
    665 #  define SHUT_RDWR 0x02
    666 #endif
    667 
    668 /* Define S_ISREG if not defined by system headers, f.e. MSVC */
    669 #if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
    670 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
    671 #endif
    672 
    673 /* Define S_ISDIR if not defined by system headers, f.e. MSVC */
    674 #if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)
    675 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
    676 #endif
    677 
    678 /* In Windows the default file mode is text but an application can override it.
    679 Therefore we specify it explicitly. https://github.com/bagder/curl/pull/258
    680 */
    681 #if defined(WIN32) || defined(MSDOS)
    682 #define FOPEN_READTEXT "rt"
    683 #define FOPEN_WRITETEXT "wt"
    684 #elif defined(__CYGWIN__)
    685 /* Cygwin has specific behavior we need to address when WIN32 is not defined.
    686 https://cygwin.com/cygwin-ug-net/using-textbinary.html
    687 For write we want our output to have line endings of LF and be compatible with
    688 other Cygwin utilities. For read we want to handle input that may have line
    689 endings either CRLF or LF so 't' is appropriate.
    690 */
    691 #define FOPEN_READTEXT "rt"
    692 #define FOPEN_WRITETEXT "w"
    693 #else
    694 #define FOPEN_READTEXT "r"
    695 #define FOPEN_WRITETEXT "w"
    696 #endif
    697 
    698 #endif /* HEADER_CURL_SETUP_H */
    699