Path: blob/master/cpp/linux/curl/system.h
644 views
#ifndef __CURL_SYSTEM_H1#define __CURL_SYSTEM_H2/***************************************************************************3* _ _ ____ _4* Project ___| | | | _ \| |5* / __| | | | |_) | |6* | (__| |_| | _ <| |___7* \___|\___/|_| \_\_____|8*9* Copyright (C) 1998 - 2017, Daniel Stenberg, <[email protected]>, et al.10*11* This software is licensed as described in the file COPYING, which12* you should have received as part of this distribution. The terms13* are also available at https://curl.haxx.se/docs/copyright.html.14*15* You may opt to use, copy, modify, merge, publish, distribute and/or sell16* copies of the Software, and permit persons to whom the Software is17* furnished to do so, under the terms of the COPYING file.18*19* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY20* KIND, either express or implied.21*22***************************************************************************/2324/*25* Try to keep one section per platform, compiler and architecture, otherwise,26* if an existing section is reused for a different one and later on the27* original is adjusted, probably the piggybacking one can be adversely28* changed.29*30* In order to differentiate between platforms/compilers/architectures use31* only compiler built in predefined preprocessor symbols.32*33* curl_off_t34* ----------35*36* For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit37* wide signed integral data type. The width of this data type must remain38* constant and independent of any possible large file support settings.39*40* As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit41* wide signed integral data type if there is no 64-bit type.42*43* As a general rule, curl_off_t shall not be mapped to off_t. This rule shall44* only be violated if off_t is the only 64-bit data type available and the45* size of off_t is independent of large file support settings. Keep your46* build on the safe side avoiding an off_t gating. If you have a 64-bit47* off_t then take for sure that another 64-bit data type exists, dig deeper48* and you will find it.49*50*/5152#if defined(__DJGPP__) || defined(__GO32__)53# if defined(__DJGPP__) && (__DJGPP__ > 1)54# define CURL_TYPEOF_CURL_OFF_T long long55# define CURL_FORMAT_CURL_OFF_T "lld"56# define CURL_FORMAT_CURL_OFF_TU "llu"57# define CURL_SUFFIX_CURL_OFF_T LL58# define CURL_SUFFIX_CURL_OFF_TU ULL59# else60# define CURL_TYPEOF_CURL_OFF_T long61# define CURL_FORMAT_CURL_OFF_T "ld"62# define CURL_FORMAT_CURL_OFF_TU "lu"63# define CURL_SUFFIX_CURL_OFF_T L64# define CURL_SUFFIX_CURL_OFF_TU UL65# endif66# define CURL_TYPEOF_CURL_SOCKLEN_T int6768#elif defined(__SALFORDC__)69# define CURL_TYPEOF_CURL_OFF_T long70# define CURL_FORMAT_CURL_OFF_T "ld"71# define CURL_FORMAT_CURL_OFF_TU "lu"72# define CURL_SUFFIX_CURL_OFF_T L73# define CURL_SUFFIX_CURL_OFF_TU UL74# define CURL_TYPEOF_CURL_SOCKLEN_T int7576#elif defined(__BORLANDC__)77# if (__BORLANDC__ < 0x520)78# define CURL_TYPEOF_CURL_OFF_T long79# define CURL_FORMAT_CURL_OFF_T "ld"80# define CURL_FORMAT_CURL_OFF_TU "lu"81# define CURL_SUFFIX_CURL_OFF_T L82# define CURL_SUFFIX_CURL_OFF_TU UL83# else84# define CURL_TYPEOF_CURL_OFF_T __int6485# define CURL_FORMAT_CURL_OFF_T "I64d"86# define CURL_FORMAT_CURL_OFF_TU "I64u"87# define CURL_SUFFIX_CURL_OFF_T i6488# define CURL_SUFFIX_CURL_OFF_TU ui6489# endif90# define CURL_TYPEOF_CURL_SOCKLEN_T int9192#elif defined(__TURBOC__)93# define CURL_TYPEOF_CURL_OFF_T long94# define CURL_FORMAT_CURL_OFF_T "ld"95# define CURL_FORMAT_CURL_OFF_TU "lu"96# define CURL_SUFFIX_CURL_OFF_T L97# define CURL_SUFFIX_CURL_OFF_TU UL98# define CURL_TYPEOF_CURL_SOCKLEN_T int99100#elif defined(__WATCOMC__)101# if defined(__386__)102# define CURL_TYPEOF_CURL_OFF_T __int64103# define CURL_FORMAT_CURL_OFF_T "I64d"104# define CURL_FORMAT_CURL_OFF_TU "I64u"105# define CURL_SUFFIX_CURL_OFF_T i64106# define CURL_SUFFIX_CURL_OFF_TU ui64107# else108# define CURL_TYPEOF_CURL_OFF_T long109# define CURL_FORMAT_CURL_OFF_T "ld"110# define CURL_FORMAT_CURL_OFF_TU "lu"111# define CURL_SUFFIX_CURL_OFF_T L112# define CURL_SUFFIX_CURL_OFF_TU UL113# endif114# define CURL_TYPEOF_CURL_SOCKLEN_T int115116#elif defined(__POCC__)117# if (__POCC__ < 280)118# define CURL_TYPEOF_CURL_OFF_T long119# define CURL_FORMAT_CURL_OFF_T "ld"120# define CURL_FORMAT_CURL_OFF_TU "lu"121# define CURL_SUFFIX_CURL_OFF_T L122# define CURL_SUFFIX_CURL_OFF_TU UL123# elif defined(_MSC_VER)124# define CURL_TYPEOF_CURL_OFF_T __int64125# define CURL_FORMAT_CURL_OFF_T "I64d"126# define CURL_FORMAT_CURL_OFF_TU "I64u"127# define CURL_SUFFIX_CURL_OFF_T i64128# define CURL_SUFFIX_CURL_OFF_TU ui64129# else130# define CURL_TYPEOF_CURL_OFF_T long long131# define CURL_FORMAT_CURL_OFF_T "lld"132# define CURL_FORMAT_CURL_OFF_TU "llu"133# define CURL_SUFFIX_CURL_OFF_T LL134# define CURL_SUFFIX_CURL_OFF_TU ULL135# endif136# define CURL_TYPEOF_CURL_SOCKLEN_T int137138#elif defined(__LCC__)139# define CURL_TYPEOF_CURL_OFF_T long140# define CURL_FORMAT_CURL_OFF_T "ld"141# define CURL_FORMAT_CURL_OFF_TU "lu"142# define CURL_SUFFIX_CURL_OFF_T L143# define CURL_SUFFIX_CURL_OFF_TU UL144# define CURL_TYPEOF_CURL_SOCKLEN_T int145146#elif defined(__SYMBIAN32__)147# if defined(__EABI__) /* Treat all ARM compilers equally */148# define CURL_TYPEOF_CURL_OFF_T long long149# define CURL_FORMAT_CURL_OFF_T "lld"150# define CURL_FORMAT_CURL_OFF_TU "llu"151# define CURL_SUFFIX_CURL_OFF_T LL152# define CURL_SUFFIX_CURL_OFF_TU ULL153# elif defined(__CW32__)154# pragma longlong on155# define CURL_TYPEOF_CURL_OFF_T long long156# define CURL_FORMAT_CURL_OFF_T "lld"157# define CURL_FORMAT_CURL_OFF_TU "llu"158# define CURL_SUFFIX_CURL_OFF_T LL159# define CURL_SUFFIX_CURL_OFF_TU ULL160# elif defined(__VC32__)161# define CURL_TYPEOF_CURL_OFF_T __int64162# define CURL_FORMAT_CURL_OFF_T "lld"163# define CURL_FORMAT_CURL_OFF_TU "llu"164# define CURL_SUFFIX_CURL_OFF_T LL165# define CURL_SUFFIX_CURL_OFF_TU ULL166# endif167# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int168169#elif defined(__MWERKS__)170# define CURL_TYPEOF_CURL_OFF_T long long171# define CURL_FORMAT_CURL_OFF_T "lld"172# define CURL_FORMAT_CURL_OFF_TU "llu"173# define CURL_SUFFIX_CURL_OFF_T LL174# define CURL_SUFFIX_CURL_OFF_TU ULL175# define CURL_TYPEOF_CURL_SOCKLEN_T int176177#elif defined(_WIN32_WCE)178# define CURL_TYPEOF_CURL_OFF_T __int64179# define CURL_FORMAT_CURL_OFF_T "I64d"180# define CURL_FORMAT_CURL_OFF_TU "I64u"181# define CURL_SUFFIX_CURL_OFF_T i64182# define CURL_SUFFIX_CURL_OFF_TU ui64183# define CURL_TYPEOF_CURL_SOCKLEN_T int184185#elif defined(__MINGW32__)186# define CURL_TYPEOF_CURL_OFF_T long long187# define CURL_FORMAT_CURL_OFF_T "I64d"188# define CURL_FORMAT_CURL_OFF_TU "I64u"189# define CURL_SUFFIX_CURL_OFF_T LL190# define CURL_SUFFIX_CURL_OFF_TU ULL191# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t192# define CURL_PULL_SYS_TYPES_H 1193# define CURL_PULL_WS2TCPIP_H 1194195#elif defined(__VMS)196# if defined(__VAX)197# define CURL_TYPEOF_CURL_OFF_T long198# define CURL_FORMAT_CURL_OFF_T "ld"199# define CURL_FORMAT_CURL_OFF_TU "lu"200# define CURL_SUFFIX_CURL_OFF_T L201# define CURL_SUFFIX_CURL_OFF_TU UL202# else203# define CURL_TYPEOF_CURL_OFF_T long long204# define CURL_FORMAT_CURL_OFF_T "lld"205# define CURL_FORMAT_CURL_OFF_TU "llu"206# define CURL_SUFFIX_CURL_OFF_T LL207# define CURL_SUFFIX_CURL_OFF_TU ULL208# endif209# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int210211#elif defined(__OS400__)212# if defined(__ILEC400__)213# define CURL_TYPEOF_CURL_OFF_T long long214# define CURL_FORMAT_CURL_OFF_T "lld"215# define CURL_FORMAT_CURL_OFF_TU "llu"216# define CURL_SUFFIX_CURL_OFF_T LL217# define CURL_SUFFIX_CURL_OFF_TU ULL218# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t219# define CURL_PULL_SYS_TYPES_H 1220# define CURL_PULL_SYS_SOCKET_H 1221# endif222223#elif defined(__MVS__)224# if defined(__IBMC__) || defined(__IBMCPP__)225# if defined(_ILP32)226# elif defined(_LP64)227# endif228# if defined(_LONG_LONG)229# define CURL_TYPEOF_CURL_OFF_T long long230# define CURL_FORMAT_CURL_OFF_T "lld"231# define CURL_FORMAT_CURL_OFF_TU "llu"232# define CURL_SUFFIX_CURL_OFF_T LL233# define CURL_SUFFIX_CURL_OFF_TU ULL234# elif defined(_LP64)235# define CURL_TYPEOF_CURL_OFF_T long236# define CURL_FORMAT_CURL_OFF_T "ld"237# define CURL_FORMAT_CURL_OFF_TU "lu"238# define CURL_SUFFIX_CURL_OFF_T L239# define CURL_SUFFIX_CURL_OFF_TU UL240# else241# define CURL_TYPEOF_CURL_OFF_T long242# define CURL_FORMAT_CURL_OFF_T "ld"243# define CURL_FORMAT_CURL_OFF_TU "lu"244# define CURL_SUFFIX_CURL_OFF_T L245# define CURL_SUFFIX_CURL_OFF_TU UL246# endif247# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t248# define CURL_PULL_SYS_TYPES_H 1249# define CURL_PULL_SYS_SOCKET_H 1250# endif251252#elif defined(__370__)253# if defined(__IBMC__) || defined(__IBMCPP__)254# if defined(_ILP32)255# elif defined(_LP64)256# endif257# if defined(_LONG_LONG)258# define CURL_TYPEOF_CURL_OFF_T long long259# define CURL_FORMAT_CURL_OFF_T "lld"260# define CURL_FORMAT_CURL_OFF_TU "llu"261# define CURL_SUFFIX_CURL_OFF_T LL262# define CURL_SUFFIX_CURL_OFF_TU ULL263# elif defined(_LP64)264# define CURL_TYPEOF_CURL_OFF_T long265# define CURL_FORMAT_CURL_OFF_T "ld"266# define CURL_FORMAT_CURL_OFF_TU "lu"267# define CURL_SUFFIX_CURL_OFF_T L268# define CURL_SUFFIX_CURL_OFF_TU UL269# else270# define CURL_TYPEOF_CURL_OFF_T long271# define CURL_FORMAT_CURL_OFF_T "ld"272# define CURL_FORMAT_CURL_OFF_TU "lu"273# define CURL_SUFFIX_CURL_OFF_T L274# define CURL_SUFFIX_CURL_OFF_TU UL275# endif276# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t277# define CURL_PULL_SYS_TYPES_H 1278# define CURL_PULL_SYS_SOCKET_H 1279# endif280281#elif defined(TPF)282# define CURL_TYPEOF_CURL_OFF_T long283# define CURL_FORMAT_CURL_OFF_T "ld"284# define CURL_FORMAT_CURL_OFF_TU "lu"285# define CURL_SUFFIX_CURL_OFF_T L286# define CURL_SUFFIX_CURL_OFF_TU UL287# define CURL_TYPEOF_CURL_SOCKLEN_T int288289#elif defined(__TINYC__) /* also known as tcc */290291# define CURL_TYPEOF_CURL_OFF_T long long292# define CURL_FORMAT_CURL_OFF_T "lld"293# define CURL_FORMAT_CURL_OFF_TU "llu"294# define CURL_SUFFIX_CURL_OFF_T LL295# define CURL_SUFFIX_CURL_OFF_TU ULL296# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t297# define CURL_PULL_SYS_TYPES_H 1298# define CURL_PULL_SYS_SOCKET_H 1299300#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */301# if !defined(__LP64) && (defined(__ILP32) || \302defined(__i386) || \303defined(__sparcv8) || \304defined(__sparcv8plus))305# define CURL_TYPEOF_CURL_OFF_T long long306# define CURL_FORMAT_CURL_OFF_T "lld"307# define CURL_FORMAT_CURL_OFF_TU "llu"308# define CURL_SUFFIX_CURL_OFF_T LL309# define CURL_SUFFIX_CURL_OFF_TU ULL310# elif defined(__LP64) || \311defined(__amd64) || defined(__sparcv9)312# define CURL_TYPEOF_CURL_OFF_T long313# define CURL_FORMAT_CURL_OFF_T "ld"314# define CURL_FORMAT_CURL_OFF_TU "lu"315# define CURL_SUFFIX_CURL_OFF_T L316# define CURL_SUFFIX_CURL_OFF_TU UL317# endif318# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t319# define CURL_PULL_SYS_TYPES_H 1320# define CURL_PULL_SYS_SOCKET_H 1321322#elif defined(__xlc__) /* IBM xlc compiler */323# if !defined(_LP64)324# define CURL_TYPEOF_CURL_OFF_T long long325# define CURL_FORMAT_CURL_OFF_T "lld"326# define CURL_FORMAT_CURL_OFF_TU "llu"327# define CURL_SUFFIX_CURL_OFF_T LL328# define CURL_SUFFIX_CURL_OFF_TU ULL329# else330# define CURL_TYPEOF_CURL_OFF_T long331# define CURL_FORMAT_CURL_OFF_T "ld"332# define CURL_FORMAT_CURL_OFF_TU "lu"333# define CURL_SUFFIX_CURL_OFF_T L334# define CURL_SUFFIX_CURL_OFF_TU UL335# endif336# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t337# define CURL_PULL_SYS_TYPES_H 1338# define CURL_PULL_SYS_SOCKET_H 1339340/* ===================================== */341/* KEEP MSVC THE PENULTIMATE ENTRY */342/* ===================================== */343344#elif defined(_MSC_VER)345# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)346# define CURL_TYPEOF_CURL_OFF_T __int64347# define CURL_FORMAT_CURL_OFF_T "I64d"348# define CURL_FORMAT_CURL_OFF_TU "I64u"349# define CURL_SUFFIX_CURL_OFF_T i64350# define CURL_SUFFIX_CURL_OFF_TU ui64351# else352# define CURL_TYPEOF_CURL_OFF_T long353# define CURL_FORMAT_CURL_OFF_T "ld"354# define CURL_FORMAT_CURL_OFF_TU "lu"355# define CURL_SUFFIX_CURL_OFF_T L356# define CURL_SUFFIX_CURL_OFF_TU UL357# endif358# define CURL_TYPEOF_CURL_SOCKLEN_T int359360/* ===================================== */361/* KEEP GENERIC GCC THE LAST ENTRY */362/* ===================================== */363364#elif defined(__GNUC__) && !defined(_SCO_DS)365# if !defined(__LP64__) && \366(defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \367defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \368defined(__sparc__) || defined(__mips__) || defined(__sh__) || \369defined(__XTENSA__) || \370(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \371(defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L))372# define CURL_TYPEOF_CURL_OFF_T long long373# define CURL_FORMAT_CURL_OFF_T "lld"374# define CURL_FORMAT_CURL_OFF_TU "llu"375# define CURL_SUFFIX_CURL_OFF_T LL376# define CURL_SUFFIX_CURL_OFF_TU ULL377# elif defined(__LP64__) || \378defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \379(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \380(defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L)381# define CURL_TYPEOF_CURL_OFF_T long382# define CURL_FORMAT_CURL_OFF_T "ld"383# define CURL_FORMAT_CURL_OFF_TU "lu"384# define CURL_SUFFIX_CURL_OFF_T L385# define CURL_SUFFIX_CURL_OFF_TU UL386# endif387# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t388# define CURL_PULL_SYS_TYPES_H 1389# define CURL_PULL_SYS_SOCKET_H 1390391#else392/* generic "safe guess" on old 32 bit style */393# define CURL_TYPEOF_CURL_OFF_T long394# define CURL_FORMAT_CURL_OFF_T "ld"395# define CURL_FORMAT_CURL_OFF_TU "lu"396# define CURL_SUFFIX_CURL_OFF_T L397# define CURL_SUFFIX_CURL_OFF_TU UL398# define CURL_TYPEOF_CURL_SOCKLEN_T int399#endif400401#ifdef _AIX402/* AIX needs <sys/poll.h> */403#define CURL_PULL_SYS_POLL_H404#endif405406407/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */408/* ws2tcpip.h is required here to properly make type definitions below. */409#ifdef CURL_PULL_WS2TCPIP_H410# include <winsock2.h>411# include <windows.h>412# include <ws2tcpip.h>413#endif414415/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */416/* sys/types.h is required here to properly make type definitions below. */417#ifdef CURL_PULL_SYS_TYPES_H418# include <sys/types.h>419#endif420421/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */422/* sys/socket.h is required here to properly make type definitions below. */423#ifdef CURL_PULL_SYS_SOCKET_H424# include <sys/socket.h>425#endif426427/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */428/* sys/poll.h is required here to properly make type definitions below. */429#ifdef CURL_PULL_SYS_POLL_H430# include <sys/poll.h>431#endif432433/* Data type definition of curl_socklen_t. */434#ifdef CURL_TYPEOF_CURL_SOCKLEN_T435typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;436#endif437438/* Data type definition of curl_off_t. */439440#ifdef CURL_TYPEOF_CURL_OFF_T441typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;442#endif443444/*445* CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow446* these to be visible and exported by the external libcurl interface API,447* while also making them visible to the library internals, simply including448* curl_setup.h, without actually needing to include curl.h internally.449* If some day this section would grow big enough, all this should be moved450* to its own header file.451*/452453/*454* Figure out if we can use the ## preprocessor operator, which is supported455* by ISO/ANSI C and C++. Some compilers support it without setting __STDC__456* or __cplusplus so we need to carefully check for them too.457*/458459#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \460defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \461defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \462defined(__ILEC400__)463/* This compiler is believed to have an ISO compatible preprocessor */464#define CURL_ISOCPP465#else466/* This compiler is believed NOT to have an ISO compatible preprocessor */467#undef CURL_ISOCPP468#endif469470/*471* Macros for minimum-width signed and unsigned curl_off_t integer constants.472*/473474#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)475# define __CURL_OFF_T_C_HLPR2(x) x476# define __CURL_OFF_T_C_HLPR1(x) __CURL_OFF_T_C_HLPR2(x)477# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \478__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)479# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \480__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)481#else482# ifdef CURL_ISOCPP483# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix484# else485# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix486# endif487# define __CURL_OFF_T_C_HLPR1(Val,Suffix) __CURL_OFF_T_C_HLPR2(Val,Suffix)488# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)489# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)490#endif491492#endif /* __CURL_SYSTEM_H */493494495