Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
system.h
Go to the documentation of this file.
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 an exception to the above, curl_off_t shall be typedef'ed to a 32-bit
44 * wide signed integral data type if there is no 64-bit type.
45 *
46 * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall
47 * only be violated if off_t is the only 64-bit data type available and the
48 * size of off_t is independent of large file support settings. Keep your
49 * build on the safe side avoiding an off_t gating. If you have a 64-bit
50 * off_t then take for sure that another 64-bit data type exists, dig deeper
51 * and you will find it.
52 *
53 */
54
55#if defined(__DJGPP__)
56# define CURL_TYPEOF_CURL_OFF_T long long
57# define CURL_FORMAT_CURL_OFF_T "lld"
58# define CURL_FORMAT_CURL_OFF_TU "llu"
59# define CURL_SUFFIX_CURL_OFF_T LL
60# define CURL_SUFFIX_CURL_OFF_TU ULL
61# define CURL_TYPEOF_CURL_SOCKLEN_T int
62
63#elif defined(__BORLANDC__)
64# define CURL_TYPEOF_CURL_OFF_T __int64
65# define CURL_FORMAT_CURL_OFF_T "I64d"
66# define CURL_FORMAT_CURL_OFF_TU "I64u"
67# define CURL_SUFFIX_CURL_OFF_T i64
68# define CURL_SUFFIX_CURL_OFF_TU ui64
69# define CURL_TYPEOF_CURL_SOCKLEN_T int
70
71#elif defined(__POCC__)
72# if defined(_MSC_VER)
73# define CURL_TYPEOF_CURL_OFF_T __int64
74# define CURL_FORMAT_CURL_OFF_T "I64d"
75# define CURL_FORMAT_CURL_OFF_TU "I64u"
76# define CURL_SUFFIX_CURL_OFF_T i64
77# define CURL_SUFFIX_CURL_OFF_TU ui64
78# else
79# define CURL_TYPEOF_CURL_OFF_T long long
80# define CURL_FORMAT_CURL_OFF_T "lld"
81# define CURL_FORMAT_CURL_OFF_TU "llu"
82# define CURL_SUFFIX_CURL_OFF_T LL
83# define CURL_SUFFIX_CURL_OFF_TU ULL
84# endif
85# define CURL_TYPEOF_CURL_SOCKLEN_T int
86
87#elif defined(__LCC__)
88# if defined(__MCST__) /* MCST eLbrus Compiler Collection */
89# define CURL_TYPEOF_CURL_OFF_T long
90# define CURL_FORMAT_CURL_OFF_T "ld"
91# define CURL_FORMAT_CURL_OFF_TU "lu"
92# define CURL_SUFFIX_CURL_OFF_T L
93# define CURL_SUFFIX_CURL_OFF_TU UL
94# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
95# define CURL_PULL_SYS_TYPES_H 1
96# define CURL_PULL_SYS_SOCKET_H 1
97# else /* Local (or Little) C Compiler */
98# define CURL_TYPEOF_CURL_OFF_T long
99# define CURL_FORMAT_CURL_OFF_T "ld"
100# define CURL_FORMAT_CURL_OFF_TU "lu"
101# define CURL_SUFFIX_CURL_OFF_T L
102# define CURL_SUFFIX_CURL_OFF_TU UL
103# define CURL_TYPEOF_CURL_SOCKLEN_T int
104# endif
105
106#elif defined(macintosh)
107# include <ConditionalMacros.h>
108# if TYPE_LONGLONG
109# define CURL_TYPEOF_CURL_OFF_T long long
110# define CURL_FORMAT_CURL_OFF_T "lld"
111# define CURL_FORMAT_CURL_OFF_TU "llu"
112# define CURL_SUFFIX_CURL_OFF_T LL
113# define CURL_SUFFIX_CURL_OFF_TU ULL
114# else
115# define CURL_TYPEOF_CURL_OFF_T long
116# define CURL_FORMAT_CURL_OFF_T "ld"
117# define CURL_FORMAT_CURL_OFF_TU "lu"
118# define CURL_SUFFIX_CURL_OFF_T L
119# define CURL_SUFFIX_CURL_OFF_TU UL
120# endif
121# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
122
123#elif defined(__TANDEM)
124# if !defined(__LP64)
125# define CURL_TYPEOF_CURL_OFF_T long long
126# define CURL_FORMAT_CURL_OFF_T "lld"
127# define CURL_FORMAT_CURL_OFF_TU "llu"
128# define CURL_SUFFIX_CURL_OFF_T LL
129# define CURL_SUFFIX_CURL_OFF_TU ULL
130# define CURL_TYPEOF_CURL_SOCKLEN_T int
131# else
132# define CURL_TYPEOF_CURL_OFF_T long
133# define CURL_FORMAT_CURL_OFF_T "ld"
134# define CURL_FORMAT_CURL_OFF_TU "lu"
135# define CURL_SUFFIX_CURL_OFF_T L
136# define CURL_SUFFIX_CURL_OFF_TU UL
137# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
138# endif
139
140#elif defined(_WIN32_WCE)
141# define CURL_TYPEOF_CURL_OFF_T __int64
142# define CURL_FORMAT_CURL_OFF_T "I64d"
143# define CURL_FORMAT_CURL_OFF_TU "I64u"
144# define CURL_SUFFIX_CURL_OFF_T i64
145# define CURL_SUFFIX_CURL_OFF_TU ui64
146# define CURL_TYPEOF_CURL_SOCKLEN_T int
147
148#elif defined(__MINGW32__)
149# include <inttypes.h>
150# define CURL_TYPEOF_CURL_OFF_T long long
151# define CURL_FORMAT_CURL_OFF_T PRId64
152# define CURL_FORMAT_CURL_OFF_TU PRIu64
153# define CURL_SUFFIX_CURL_OFF_T LL
154# define CURL_SUFFIX_CURL_OFF_TU ULL
155# define CURL_TYPEOF_CURL_SOCKLEN_T int
156# define CURL_PULL_SYS_TYPES_H 1
157
158#elif defined(__VMS)
159# if defined(__VAX)
160# define CURL_TYPEOF_CURL_OFF_T long
161# define CURL_FORMAT_CURL_OFF_T "ld"
162# define CURL_FORMAT_CURL_OFF_TU "lu"
163# define CURL_SUFFIX_CURL_OFF_T L
164# define CURL_SUFFIX_CURL_OFF_TU UL
165# else
166# define CURL_TYPEOF_CURL_OFF_T long long
167# define CURL_FORMAT_CURL_OFF_T "lld"
168# define CURL_FORMAT_CURL_OFF_TU "llu"
169# define CURL_SUFFIX_CURL_OFF_T LL
170# define CURL_SUFFIX_CURL_OFF_TU ULL
171# endif
172# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
173
174#elif defined(__OS400__)
175# define CURL_TYPEOF_CURL_OFF_T long long
176# define CURL_FORMAT_CURL_OFF_T "lld"
177# define CURL_FORMAT_CURL_OFF_TU "llu"
178# define CURL_SUFFIX_CURL_OFF_T LL
179# define CURL_SUFFIX_CURL_OFF_TU ULL
180# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
181# define CURL_PULL_SYS_TYPES_H 1
182# define CURL_PULL_SYS_SOCKET_H 1
183
184#elif defined(__MVS__)
185# if defined(_LONG_LONG)
186# define CURL_TYPEOF_CURL_OFF_T long long
187# define CURL_FORMAT_CURL_OFF_T "lld"
188# define CURL_FORMAT_CURL_OFF_TU "llu"
189# define CURL_SUFFIX_CURL_OFF_T LL
190# define CURL_SUFFIX_CURL_OFF_TU ULL
191# else /* _LP64 and default */
192# define CURL_TYPEOF_CURL_OFF_T long
193# define CURL_FORMAT_CURL_OFF_T "ld"
194# define CURL_FORMAT_CURL_OFF_TU "lu"
195# define CURL_SUFFIX_CURL_OFF_T L
196# define CURL_SUFFIX_CURL_OFF_TU UL
197# endif
198# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
199# define CURL_PULL_SYS_TYPES_H 1
200# define CURL_PULL_SYS_SOCKET_H 1
201
202#elif defined(__370__)
203# if defined(__IBMC__) || defined(__IBMCPP__)
204# if defined(_LONG_LONG)
205# define CURL_TYPEOF_CURL_OFF_T long long
206# define CURL_FORMAT_CURL_OFF_T "lld"
207# define CURL_FORMAT_CURL_OFF_TU "llu"
208# define CURL_SUFFIX_CURL_OFF_T LL
209# define CURL_SUFFIX_CURL_OFF_TU ULL
210# else /* _LP64 and default */
211# define CURL_TYPEOF_CURL_OFF_T long
212# define CURL_FORMAT_CURL_OFF_T "ld"
213# define CURL_FORMAT_CURL_OFF_TU "lu"
214# define CURL_SUFFIX_CURL_OFF_T L
215# define CURL_SUFFIX_CURL_OFF_TU UL
216# endif
217# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
218# define CURL_PULL_SYS_TYPES_H 1
219# define CURL_PULL_SYS_SOCKET_H 1
220# endif
221
222#elif defined(TPF)
223# define CURL_TYPEOF_CURL_OFF_T long
224# define CURL_FORMAT_CURL_OFF_T "ld"
225# define CURL_FORMAT_CURL_OFF_TU "lu"
226# define CURL_SUFFIX_CURL_OFF_T L
227# define CURL_SUFFIX_CURL_OFF_TU UL
228# define CURL_TYPEOF_CURL_SOCKLEN_T int
229
230#elif defined(__TINYC__) /* also known as tcc */
231# define CURL_TYPEOF_CURL_OFF_T long long
232# define CURL_FORMAT_CURL_OFF_T "lld"
233# define CURL_FORMAT_CURL_OFF_TU "llu"
234# define CURL_SUFFIX_CURL_OFF_T LL
235# define CURL_SUFFIX_CURL_OFF_TU ULL
236# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
237# define CURL_PULL_SYS_TYPES_H 1
238# define CURL_PULL_SYS_SOCKET_H 1
239
240#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */
241# if !defined(__LP64) && (defined(__ILP32) || \
242 defined(__i386) || \
243 defined(__sparcv8) || \
244 defined(__sparcv8plus))
245# define CURL_TYPEOF_CURL_OFF_T long long
246# define CURL_FORMAT_CURL_OFF_T "lld"
247# define CURL_FORMAT_CURL_OFF_TU "llu"
248# define CURL_SUFFIX_CURL_OFF_T LL
249# define CURL_SUFFIX_CURL_OFF_TU ULL
250# elif defined(__LP64) || \
251 defined(__amd64) || defined(__sparcv9)
252# define CURL_TYPEOF_CURL_OFF_T long
253# define CURL_FORMAT_CURL_OFF_T "ld"
254# define CURL_FORMAT_CURL_OFF_TU "lu"
255# define CURL_SUFFIX_CURL_OFF_T L
256# define CURL_SUFFIX_CURL_OFF_TU UL
257# endif
258# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
259# define CURL_PULL_SYS_TYPES_H 1
260# define CURL_PULL_SYS_SOCKET_H 1
261
262#elif defined(__xlc__) /* IBM xlc compiler */
263# if !defined(_LP64)
264# define CURL_TYPEOF_CURL_OFF_T long long
265# define CURL_FORMAT_CURL_OFF_T "lld"
266# define CURL_FORMAT_CURL_OFF_TU "llu"
267# define CURL_SUFFIX_CURL_OFF_T LL
268# define CURL_SUFFIX_CURL_OFF_TU ULL
269# else
270# define CURL_TYPEOF_CURL_OFF_T long
271# define CURL_FORMAT_CURL_OFF_T "ld"
272# define CURL_FORMAT_CURL_OFF_TU "lu"
273# define CURL_SUFFIX_CURL_OFF_T L
274# define CURL_SUFFIX_CURL_OFF_TU UL
275# endif
276# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
277# define CURL_PULL_SYS_TYPES_H 1
278# define CURL_PULL_SYS_SOCKET_H 1
279
280#elif defined(__hpux) /* HP aCC compiler */
281# if !defined(_LP64)
282# define CURL_TYPEOF_CURL_OFF_T long long
283# define CURL_FORMAT_CURL_OFF_T "lld"
284# define CURL_FORMAT_CURL_OFF_TU "llu"
285# define CURL_SUFFIX_CURL_OFF_T LL
286# define CURL_SUFFIX_CURL_OFF_TU ULL
287# else
288# define CURL_TYPEOF_CURL_OFF_T long
289# define CURL_FORMAT_CURL_OFF_T "ld"
290# define CURL_FORMAT_CURL_OFF_TU "lu"
291# define CURL_SUFFIX_CURL_OFF_T L
292# define CURL_SUFFIX_CURL_OFF_TU UL
293# endif
294# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
295# define CURL_PULL_SYS_TYPES_H 1
296# define CURL_PULL_SYS_SOCKET_H 1
297
298/* ===================================== */
299/* KEEP MSVC THE PENULTIMATE ENTRY */
300/* ===================================== */
301
302#elif defined(_MSC_VER)
303# if (_MSC_VER >= 1800)
304# include <inttypes.h>
305# define CURL_FORMAT_CURL_OFF_T PRId64
306# define CURL_FORMAT_CURL_OFF_TU PRIu64
307# else
308# define CURL_FORMAT_CURL_OFF_T "I64d"
309# define CURL_FORMAT_CURL_OFF_TU "I64u"
310# endif
311# define CURL_TYPEOF_CURL_OFF_T __int64
312# define CURL_SUFFIX_CURL_OFF_T i64
313# define CURL_SUFFIX_CURL_OFF_TU ui64
314# define CURL_TYPEOF_CURL_SOCKLEN_T int
315
316/* ===================================== */
317/* KEEP GENERIC GCC THE LAST ENTRY */
318/* ===================================== */
319
320#elif defined(__GNUC__) && !defined(_SCO_DS)
321# if !defined(__LP64__) && \
322 (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \
323 defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \
324 defined(__sparc__) || defined(__mips__) || defined(__sh__) || \
325 defined(__XTENSA__) || \
326 (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \
327 (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L))
328# define CURL_TYPEOF_CURL_OFF_T long long
329# define CURL_FORMAT_CURL_OFF_T "lld"
330# define CURL_FORMAT_CURL_OFF_TU "llu"
331# define CURL_SUFFIX_CURL_OFF_T LL
332# define CURL_SUFFIX_CURL_OFF_TU ULL
333# elif defined(__LP64__) || \
334 defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \
335 defined(__e2k__) || \
336 (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \
337 (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L)
338# define CURL_TYPEOF_CURL_OFF_T long
339# define CURL_FORMAT_CURL_OFF_T "ld"
340# define CURL_FORMAT_CURL_OFF_TU "lu"
341# define CURL_SUFFIX_CURL_OFF_T L
342# define CURL_SUFFIX_CURL_OFF_TU UL
343# endif
344# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
345# define CURL_PULL_SYS_TYPES_H 1
346# define CURL_PULL_SYS_SOCKET_H 1
347
348#else
349/* generic "safe guess" on old 32-bit style */
350# define CURL_TYPEOF_CURL_OFF_T long
351# define CURL_FORMAT_CURL_OFF_T "ld"
352# define CURL_FORMAT_CURL_OFF_TU "lu"
353# define CURL_SUFFIX_CURL_OFF_T L
354# define CURL_SUFFIX_CURL_OFF_TU UL
355# define CURL_TYPEOF_CURL_SOCKLEN_T int
356#endif
357
358#ifdef _AIX
359/* AIX needs <sys/poll.h> */
360#define CURL_PULL_SYS_POLL_H
361#endif
362
363/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */
364/* sys/types.h is required here to properly make type definitions below. */
365#ifdef CURL_PULL_SYS_TYPES_H
366# include <sys/types.h>
367#endif
368
369/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
370/* sys/socket.h is required here to properly make type definitions below. */
371#ifdef CURL_PULL_SYS_SOCKET_H
372# include <sys/socket.h>
373#endif
374
375/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */
376/* sys/poll.h is required here to properly make type definitions below. */
377#ifdef CURL_PULL_SYS_POLL_H
378# include <sys/poll.h>
379#endif
380
381/* Data type definition of curl_socklen_t. */
382#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
384#endif
385
386/* Data type definition of curl_off_t. */
387
388#ifdef CURL_TYPEOF_CURL_OFF_T
390#endif
391
392/*
393 * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
394 * these to be visible and exported by the external libcurl interface API,
395 * while also making them visible to the library internals, simply including
396 * curl_setup.h, without actually needing to include curl.h internally.
397 * If some day this section would grow big enough, all this should be moved
398 * to its own header file.
399 */
400
401/*
402 * Figure out if we can use the ## preprocessor operator, which is supported
403 * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
404 * or __cplusplus so we need to carefully check for them too.
405 */
406
407#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
408 defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
409 defined(__POCC__) || defined(__HIGHC__) || \
410 defined(__ILEC400__)
411 /* This compiler is believed to have an ISO compatible preprocessor */
412#define CURL_ISOCPP
413#else
414 /* This compiler is believed NOT to have an ISO compatible preprocessor */
415#undef CURL_ISOCPP
416#endif
417
418/*
419 * Macros for minimum-width signed and unsigned curl_off_t integer constants.
420 */
421
422#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
423# define CURLINC_OFF_T_C_HLPR2(x) x
424# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x)
425# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
426 CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
427# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
428 CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
429#else
430# ifdef CURL_ISOCPP
431# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
432# else
433# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
434# endif
435# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix)
436# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
437# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
438#endif
439
440#endif /* CURLINC_SYSTEM_H */
#define CURL_TYPEOF_CURL_SOCKLEN_T
Definition system.h:355
CURL_TYPEOF_CURL_OFF_T curl_off_t
Definition system.h:389
#define CURL_TYPEOF_CURL_OFF_T
Definition system.h:350
CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t
Definition system.h:383