system.h (15110B)
1 #ifndef CURLINC_SYSTEM_H 2 #define CURLINC_SYSTEM_H 3 /*************************************************************************** 4 * _ _ ____ _ 5 * Project ___| | | | _ \| | 6 * / __| | | | |_) | | 7 * | (__| |_| | _ <| |___ 8 * \___|\___/|_| \_\_____| 9 * 10 * Copyright (C) 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.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 * SPDX-License-Identifier: curl 24 * 25 ***************************************************************************/ 26 27 /* 28 * Try to keep one section per platform, compiler and architecture, otherwise, 29 * if an existing section is reused for a different one and later on the 30 * original is adjusted, probably the piggybacking one can be adversely 31 * changed. 32 * 33 * In order to differentiate between platforms/compilers/architectures use 34 * only compiler built-in predefined preprocessor symbols. 35 * 36 * curl_off_t 37 * ---------- 38 * 39 * For any given platform/compiler curl_off_t MUST be typedef'ed to a 64-bit 40 * wide signed integral data type. The width of this data type must remain 41 * constant and independent of any possible large file support settings. 42 * 43 * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall 44 * only be violated if off_t is the only 64-bit data type available and the 45 * size of off_t is independent of large file support settings. Keep your 46 * build on the safe side avoiding an off_t gating. If you have a 64-bit 47 * off_t then take for sure that another 64-bit data type exists, dig deeper 48 * and you will find it. 49 * 50 */ 51 52 #ifdef __DJGPP__ 53 # define CURL_TYPEOF_CURL_OFF_T long long 54 # define CURL_FORMAT_CURL_OFF_T "lld" 55 # define CURL_FORMAT_CURL_OFF_TU "llu" 56 # define CURL_SUFFIX_CURL_OFF_T LL 57 # define CURL_SUFFIX_CURL_OFF_TU ULL 58 # define CURL_TYPEOF_CURL_SOCKLEN_T int 59 60 #elif defined(__BORLANDC__) 61 # define CURL_TYPEOF_CURL_OFF_T __int64 62 # define CURL_FORMAT_CURL_OFF_T "I64d" 63 # define CURL_FORMAT_CURL_OFF_TU "I64u" 64 # define CURL_SUFFIX_CURL_OFF_T i64 65 # define CURL_SUFFIX_CURL_OFF_TU ui64 66 # define CURL_TYPEOF_CURL_SOCKLEN_T int 67 68 #elif defined(__POCC__) 69 # if defined(_MSC_VER) 70 # define CURL_TYPEOF_CURL_OFF_T __int64 71 # define CURL_FORMAT_CURL_OFF_T "I64d" 72 # define CURL_FORMAT_CURL_OFF_TU "I64u" 73 # define CURL_SUFFIX_CURL_OFF_T i64 74 # define CURL_SUFFIX_CURL_OFF_TU ui64 75 # else 76 # define CURL_TYPEOF_CURL_OFF_T long long 77 # define CURL_FORMAT_CURL_OFF_T "lld" 78 # define CURL_FORMAT_CURL_OFF_TU "llu" 79 # define CURL_SUFFIX_CURL_OFF_T LL 80 # define CURL_SUFFIX_CURL_OFF_TU ULL 81 # endif 82 # define CURL_TYPEOF_CURL_SOCKLEN_T int 83 84 #elif defined(__LCC__) 85 # if defined(__MCST__) /* MCST eLbrus Compiler Collection */ 86 # define CURL_TYPEOF_CURL_OFF_T long 87 # define CURL_FORMAT_CURL_OFF_T "ld" 88 # define CURL_FORMAT_CURL_OFF_TU "lu" 89 # define CURL_SUFFIX_CURL_OFF_T L 90 # define CURL_SUFFIX_CURL_OFF_TU UL 91 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 92 # define CURL_PULL_SYS_TYPES_H 1 93 # define CURL_PULL_SYS_SOCKET_H 1 94 # else /* Local (or Little) C Compiler */ 95 # define CURL_TYPEOF_CURL_OFF_T long 96 # define CURL_FORMAT_CURL_OFF_T "ld" 97 # define CURL_FORMAT_CURL_OFF_TU "lu" 98 # define CURL_SUFFIX_CURL_OFF_T L 99 # define CURL_SUFFIX_CURL_OFF_TU UL 100 # define CURL_TYPEOF_CURL_SOCKLEN_T int 101 # endif 102 103 #elif defined(macintosh) 104 # include <ConditionalMacros.h> 105 # if TYPE_LONGLONG 106 # define CURL_TYPEOF_CURL_OFF_T long long 107 # define CURL_FORMAT_CURL_OFF_T "lld" 108 # define CURL_FORMAT_CURL_OFF_TU "llu" 109 # define CURL_SUFFIX_CURL_OFF_T LL 110 # define CURL_SUFFIX_CURL_OFF_TU ULL 111 # else 112 # define CURL_TYPEOF_CURL_OFF_T long 113 # define CURL_FORMAT_CURL_OFF_T "ld" 114 # define CURL_FORMAT_CURL_OFF_TU "lu" 115 # define CURL_SUFFIX_CURL_OFF_T L 116 # define CURL_SUFFIX_CURL_OFF_TU UL 117 # endif 118 # define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int 119 120 #elif defined(__TANDEM) 121 # if !defined(__LP64) 122 # define CURL_TYPEOF_CURL_OFF_T long long 123 # define CURL_FORMAT_CURL_OFF_T "lld" 124 # define CURL_FORMAT_CURL_OFF_TU "llu" 125 # define CURL_SUFFIX_CURL_OFF_T LL 126 # define CURL_SUFFIX_CURL_OFF_TU ULL 127 # define CURL_TYPEOF_CURL_SOCKLEN_T int 128 # else 129 # define CURL_TYPEOF_CURL_OFF_T long 130 # define CURL_FORMAT_CURL_OFF_T "ld" 131 # define CURL_FORMAT_CURL_OFF_TU "lu" 132 # define CURL_SUFFIX_CURL_OFF_T L 133 # define CURL_SUFFIX_CURL_OFF_TU UL 134 # define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int 135 # endif 136 137 #elif defined(UNDER_CE) 138 # if defined(__MINGW32CE__) 139 # define CURL_TYPEOF_CURL_OFF_T long long 140 # define CURL_FORMAT_CURL_OFF_T "lld" 141 # define CURL_FORMAT_CURL_OFF_TU "llu" 142 # define CURL_SUFFIX_CURL_OFF_T LL 143 # define CURL_SUFFIX_CURL_OFF_TU ULL 144 # define CURL_TYPEOF_CURL_SOCKLEN_T int 145 # else 146 # define CURL_TYPEOF_CURL_OFF_T __int64 147 # define CURL_FORMAT_CURL_OFF_T "I64d" 148 # define CURL_FORMAT_CURL_OFF_TU "I64u" 149 # define CURL_SUFFIX_CURL_OFF_T i64 150 # define CURL_SUFFIX_CURL_OFF_TU ui64 151 # define CURL_TYPEOF_CURL_SOCKLEN_T int 152 # endif 153 154 #elif defined(__MINGW32__) 155 # include <inttypes.h> 156 # define CURL_TYPEOF_CURL_OFF_T long long 157 # define CURL_FORMAT_CURL_OFF_T PRId64 158 # define CURL_FORMAT_CURL_OFF_TU PRIu64 159 # define CURL_SUFFIX_CURL_OFF_T LL 160 # define CURL_SUFFIX_CURL_OFF_TU ULL 161 # define CURL_TYPEOF_CURL_SOCKLEN_T int 162 # define CURL_PULL_SYS_TYPES_H 1 163 164 #elif defined(__VMS) 165 # if defined(__VAX) 166 # define CURL_TYPEOF_CURL_OFF_T long 167 # define CURL_FORMAT_CURL_OFF_T "ld" 168 # define CURL_FORMAT_CURL_OFF_TU "lu" 169 # define CURL_SUFFIX_CURL_OFF_T L 170 # define CURL_SUFFIX_CURL_OFF_TU UL 171 # else 172 # define CURL_TYPEOF_CURL_OFF_T long long 173 # define CURL_FORMAT_CURL_OFF_T "lld" 174 # define CURL_FORMAT_CURL_OFF_TU "llu" 175 # define CURL_SUFFIX_CURL_OFF_T LL 176 # define CURL_SUFFIX_CURL_OFF_TU ULL 177 # endif 178 # define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int 179 180 #elif defined(__OS400__) 181 # define CURL_TYPEOF_CURL_OFF_T long long 182 # define CURL_FORMAT_CURL_OFF_T "lld" 183 # define CURL_FORMAT_CURL_OFF_TU "llu" 184 # define CURL_SUFFIX_CURL_OFF_T LL 185 # define CURL_SUFFIX_CURL_OFF_TU ULL 186 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 187 # define CURL_PULL_SYS_TYPES_H 1 188 # define CURL_PULL_SYS_SOCKET_H 1 189 190 #elif defined(__MVS__) 191 # if defined(_LONG_LONG) 192 # define CURL_TYPEOF_CURL_OFF_T long long 193 # define CURL_FORMAT_CURL_OFF_T "lld" 194 # define CURL_FORMAT_CURL_OFF_TU "llu" 195 # define CURL_SUFFIX_CURL_OFF_T LL 196 # define CURL_SUFFIX_CURL_OFF_TU ULL 197 # else /* _LP64 and default */ 198 # define CURL_TYPEOF_CURL_OFF_T long 199 # define CURL_FORMAT_CURL_OFF_T "ld" 200 # define CURL_FORMAT_CURL_OFF_TU "lu" 201 # define CURL_SUFFIX_CURL_OFF_T L 202 # define CURL_SUFFIX_CURL_OFF_TU UL 203 # endif 204 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 205 # define CURL_PULL_SYS_TYPES_H 1 206 # define CURL_PULL_SYS_SOCKET_H 1 207 208 #elif defined(__370__) 209 # if defined(__IBMC__) || defined(__IBMCPP__) 210 # if defined(_LONG_LONG) 211 # define CURL_TYPEOF_CURL_OFF_T long long 212 # define CURL_FORMAT_CURL_OFF_T "lld" 213 # define CURL_FORMAT_CURL_OFF_TU "llu" 214 # define CURL_SUFFIX_CURL_OFF_T LL 215 # define CURL_SUFFIX_CURL_OFF_TU ULL 216 # else /* _LP64 and default */ 217 # define CURL_TYPEOF_CURL_OFF_T long 218 # define CURL_FORMAT_CURL_OFF_T "ld" 219 # define CURL_FORMAT_CURL_OFF_TU "lu" 220 # define CURL_SUFFIX_CURL_OFF_T L 221 # define CURL_SUFFIX_CURL_OFF_TU UL 222 # endif 223 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 224 # define CURL_PULL_SYS_TYPES_H 1 225 # define CURL_PULL_SYS_SOCKET_H 1 226 # endif 227 228 #elif defined(TPF) 229 # define CURL_TYPEOF_CURL_OFF_T long 230 # define CURL_FORMAT_CURL_OFF_T "ld" 231 # define CURL_FORMAT_CURL_OFF_TU "lu" 232 # define CURL_SUFFIX_CURL_OFF_T L 233 # define CURL_SUFFIX_CURL_OFF_TU UL 234 # define CURL_TYPEOF_CURL_SOCKLEN_T int 235 236 #elif defined(__TINYC__) /* also known as tcc */ 237 # define CURL_TYPEOF_CURL_OFF_T long long 238 # define CURL_FORMAT_CURL_OFF_T "lld" 239 # define CURL_FORMAT_CURL_OFF_TU "llu" 240 # define CURL_SUFFIX_CURL_OFF_T LL 241 # define CURL_SUFFIX_CURL_OFF_TU ULL 242 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 243 # define CURL_PULL_SYS_TYPES_H 1 244 # define CURL_PULL_SYS_SOCKET_H 1 245 246 #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ 247 # if !defined(__LP64) && (defined(__ILP32) || \ 248 defined(__i386) || \ 249 defined(__sparcv8) || \ 250 defined(__sparcv8plus)) 251 # define CURL_TYPEOF_CURL_OFF_T long long 252 # define CURL_FORMAT_CURL_OFF_T "lld" 253 # define CURL_FORMAT_CURL_OFF_TU "llu" 254 # define CURL_SUFFIX_CURL_OFF_T LL 255 # define CURL_SUFFIX_CURL_OFF_TU ULL 256 # elif defined(__LP64) || \ 257 defined(__amd64) || defined(__sparcv9) 258 # define CURL_TYPEOF_CURL_OFF_T long 259 # define CURL_FORMAT_CURL_OFF_T "ld" 260 # define CURL_FORMAT_CURL_OFF_TU "lu" 261 # define CURL_SUFFIX_CURL_OFF_T L 262 # define CURL_SUFFIX_CURL_OFF_TU UL 263 # endif 264 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 265 # define CURL_PULL_SYS_TYPES_H 1 266 # define CURL_PULL_SYS_SOCKET_H 1 267 268 #elif defined(__xlc__) /* IBM xlc compiler */ 269 # if !defined(_LP64) 270 # define CURL_TYPEOF_CURL_OFF_T long long 271 # define CURL_FORMAT_CURL_OFF_T "lld" 272 # define CURL_FORMAT_CURL_OFF_TU "llu" 273 # define CURL_SUFFIX_CURL_OFF_T LL 274 # define CURL_SUFFIX_CURL_OFF_TU ULL 275 # else 276 # define CURL_TYPEOF_CURL_OFF_T long 277 # define CURL_FORMAT_CURL_OFF_T "ld" 278 # define CURL_FORMAT_CURL_OFF_TU "lu" 279 # define CURL_SUFFIX_CURL_OFF_T L 280 # define CURL_SUFFIX_CURL_OFF_TU UL 281 # endif 282 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 283 # define CURL_PULL_SYS_TYPES_H 1 284 # define CURL_PULL_SYS_SOCKET_H 1 285 286 #elif defined(__hpux) /* HP aCC compiler */ 287 # if !defined(_LP64) 288 # define CURL_TYPEOF_CURL_OFF_T long long 289 # define CURL_FORMAT_CURL_OFF_T "lld" 290 # define CURL_FORMAT_CURL_OFF_TU "llu" 291 # define CURL_SUFFIX_CURL_OFF_T LL 292 # define CURL_SUFFIX_CURL_OFF_TU ULL 293 # else 294 # define CURL_TYPEOF_CURL_OFF_T long 295 # define CURL_FORMAT_CURL_OFF_T "ld" 296 # define CURL_FORMAT_CURL_OFF_TU "lu" 297 # define CURL_SUFFIX_CURL_OFF_T L 298 # define CURL_SUFFIX_CURL_OFF_TU UL 299 # endif 300 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 301 # define CURL_PULL_SYS_TYPES_H 1 302 # define CURL_PULL_SYS_SOCKET_H 1 303 304 /* ===================================== */ 305 /* KEEP MSVC THE PENULTIMATE ENTRY */ 306 /* ===================================== */ 307 308 #elif defined(_MSC_VER) 309 # if (_MSC_VER >= 1800) 310 # include <inttypes.h> 311 # define CURL_FORMAT_CURL_OFF_T PRId64 312 # define CURL_FORMAT_CURL_OFF_TU PRIu64 313 # else 314 # define CURL_FORMAT_CURL_OFF_T "I64d" 315 # define CURL_FORMAT_CURL_OFF_TU "I64u" 316 # endif 317 # define CURL_TYPEOF_CURL_OFF_T __int64 318 # define CURL_SUFFIX_CURL_OFF_T i64 319 # define CURL_SUFFIX_CURL_OFF_TU ui64 320 # define CURL_TYPEOF_CURL_SOCKLEN_T int 321 322 /* ===================================== */ 323 /* KEEP GENERIC GCC THE LAST ENTRY */ 324 /* ===================================== */ 325 326 #elif defined(__GNUC__) && !defined(_SCO_DS) 327 # if !defined(__LP64__) && \ 328 (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ 329 defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ 330 defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ 331 defined(__XTENSA__) || \ 332 (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ 333 (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) 334 # define CURL_TYPEOF_CURL_OFF_T long long 335 # define CURL_FORMAT_CURL_OFF_T "lld" 336 # define CURL_FORMAT_CURL_OFF_TU "llu" 337 # define CURL_SUFFIX_CURL_OFF_T LL 338 # define CURL_SUFFIX_CURL_OFF_TU ULL 339 # define CURL_POPCOUNT64(x) __builtin_popcountll(x) 340 # define CURL_CTZ64(x) __builtin_ctzll(x) 341 # elif defined(__LP64__) || \ 342 defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ 343 defined(__e2k__) || \ 344 (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ 345 (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) 346 # define CURL_TYPEOF_CURL_OFF_T long 347 # define CURL_FORMAT_CURL_OFF_T "ld" 348 # define CURL_FORMAT_CURL_OFF_TU "lu" 349 # define CURL_SUFFIX_CURL_OFF_T L 350 # define CURL_SUFFIX_CURL_OFF_TU UL 351 # define CURL_POPCOUNT64(x) __builtin_popcountl(x) 352 # define CURL_CTZ64(x) __builtin_ctzl(x) 353 # endif 354 # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t 355 # define CURL_PULL_SYS_TYPES_H 1 356 # define CURL_PULL_SYS_SOCKET_H 1 357 358 #else 359 /* generic "safe guess" on old 32-bit style */ 360 # define CURL_TYPEOF_CURL_OFF_T long long 361 # define CURL_FORMAT_CURL_OFF_T "lld" 362 # define CURL_FORMAT_CURL_OFF_TU "llu" 363 # define CURL_SUFFIX_CURL_OFF_T LL 364 # define CURL_SUFFIX_CURL_OFF_TU ULL 365 # define CURL_TYPEOF_CURL_SOCKLEN_T int 366 #endif 367 368 #ifdef _AIX 369 /* AIX needs <sys/poll.h> */ 370 #define CURL_PULL_SYS_POLL_H 371 #endif 372 373 /* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ 374 /* sys/types.h is required here to properly make type definitions below. */ 375 #ifdef CURL_PULL_SYS_TYPES_H 376 # include <sys/types.h> 377 #endif 378 379 /* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ 380 /* sys/socket.h is required here to properly make type definitions below. */ 381 #ifdef CURL_PULL_SYS_SOCKET_H 382 # include <sys/socket.h> 383 #endif 384 385 /* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ 386 /* sys/poll.h is required here to properly make type definitions below. */ 387 #ifdef CURL_PULL_SYS_POLL_H 388 # include <sys/poll.h> 389 #endif 390 391 /* Data type definition of curl_socklen_t. */ 392 #ifdef CURL_TYPEOF_CURL_SOCKLEN_T 393 typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; 394 #endif 395 396 /* Data type definition of curl_off_t. */ 397 398 #ifdef CURL_TYPEOF_CURL_OFF_T 399 typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; 400 #endif 401 402 #endif /* CURLINC_SYSTEM_H */