1#ifndef CURLINC_SYSTEM_H
2#define CURLINC_SYSTEM_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.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 * Try to keep one section per platform, compiler and architecture, otherwise,
27 * if an existing section is reused for a different one and later on the
28 * original is adjusted, probably the piggybacking one can be adversely
29 * changed.
30 *
31 * In order to differentiate between platforms/compilers/architectures use
32 * only compiler built in predefined preprocessor symbols.
33 *
34 * curl_off_t
35 * ----------
36 *
37 * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit
38 * wide signed integral data type. The width of this data type must remain
39 * constant and independent of any possible large file support settings.
40 *
41 * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit
42 * wide signed integral data type if there is no 64-bit type.
43 *
44 * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall
45 * only be violated if off_t is the only 64-bit data type available and the
46 * size of off_t is independent of large file support settings. Keep your
47 * build on the safe side avoiding an off_t gating. If you have a 64-bit
48 * off_t then take for sure that another 64-bit data type exists, dig deeper
49 * and you will find it.
50 *
51 */
52
53#if defined(__DJGPP__) || defined(__GO32__)
54# if defined(__DJGPP__) && (__DJGPP__ > 1)
55# define CURL_TYPEOF_CURL_OFF_T long long
56# define CURL_FORMAT_CURL_OFF_T "lld"
57# define CURL_FORMAT_CURL_OFF_TU "llu"
58# define CURL_SUFFIX_CURL_OFF_T LL
59# define CURL_SUFFIX_CURL_OFF_TU ULL
60# else
61# define CURL_TYPEOF_CURL_OFF_T long
62# define CURL_FORMAT_CURL_OFF_T "ld"
63# define CURL_FORMAT_CURL_OFF_TU "lu"
64# define CURL_SUFFIX_CURL_OFF_T L
65# define CURL_SUFFIX_CURL_OFF_TU UL
66# endif
67# define CURL_TYPEOF_CURL_SOCKLEN_T int
68
69#elif defined(__SALFORDC__)
70# define CURL_TYPEOF_CURL_OFF_T long
71# define CURL_FORMAT_CURL_OFF_T "ld"
72# define CURL_FORMAT_CURL_OFF_TU "lu"
73# define CURL_SUFFIX_CURL_OFF_T L
74# define CURL_SUFFIX_CURL_OFF_TU UL
75# define CURL_TYPEOF_CURL_SOCKLEN_T int
76
77#elif defined(__BORLANDC__)
78# if (__BORLANDC__ < 0x520)
79# define CURL_TYPEOF_CURL_OFF_T long
80# define CURL_FORMAT_CURL_OFF_T "ld"
81# define CURL_FORMAT_CURL_OFF_TU "lu"
82# define CURL_SUFFIX_CURL_OFF_T L
83# define CURL_SUFFIX_CURL_OFF_TU UL
84# else
85# define CURL_TYPEOF_CURL_OFF_T __int64
86# define CURL_FORMAT_CURL_OFF_T "I64d"
87# define CURL_FORMAT_CURL_OFF_TU "I64u"
88# define CURL_SUFFIX_CURL_OFF_T i64
89# define CURL_SUFFIX_CURL_OFF_TU ui64
90# endif
91# define CURL_TYPEOF_CURL_SOCKLEN_T int
92
93#elif defined(__TURBOC__)
94# define CURL_TYPEOF_CURL_OFF_T long
95# define CURL_FORMAT_CURL_OFF_T "ld"
96# define CURL_FORMAT_CURL_OFF_TU "lu"
97# define CURL_SUFFIX_CURL_OFF_T L
98# define CURL_SUFFIX_CURL_OFF_TU UL
99# define CURL_TYPEOF_CURL_SOCKLEN_T int
100
101#elif defined(__WATCOMC__)
102# if defined(__386__)
103# define CURL_TYPEOF_CURL_OFF_T __int64
104# define CURL_FORMAT_CURL_OFF_T "I64d"
105# define CURL_FORMAT_CURL_OFF_TU "I64u"
106# define CURL_SUFFIX_CURL_OFF_T i64
107# define CURL_SUFFIX_CURL_OFF_TU ui64
108# else
109# define CURL_TYPEOF_CURL_OFF_T long
110# define CURL_FORMAT_CURL_OFF_T "ld"
111# define CURL_FORMAT_CURL_OFF_TU "lu"
112# define CURL_SUFFIX_CURL_OFF_T L
113# define CURL_SUFFIX_CURL_OFF_TU UL
114# endif
115# define CURL_TYPEOF_CURL_SOCKLEN_T int
116
117#elif defined(__POCC__)
118# if (__POCC__ < 280)
119# define CURL_TYPEOF_CURL_OFF_T long
120# define CURL_FORMAT_CURL_OFF_T "ld"
121# define CURL_FORMAT_CURL_OFF_TU "lu"
122# define CURL_SUFFIX_CURL_OFF_T L
123# define CURL_SUFFIX_CURL_OFF_TU UL
124# elif defined(_MSC_VER)
125# define CURL_TYPEOF_CURL_OFF_T __int64
126# define CURL_FORMAT_CURL_OFF_T "I64d"
127# define CURL_FORMAT_CURL_OFF_TU "I64u"
128# define CURL_SUFFIX_CURL_OFF_T i64
129# define CURL_SUFFIX_CURL_OFF_TU ui64
130# else
131# define CURL_TYPEOF_CURL_OFF_T long long
132# define CURL_FORMAT_CURL_OFF_T "lld"
133# define CURL_FORMAT_CURL_OFF_TU "llu"
134# define CURL_SUFFIX_CURL_OFF_T LL
135# define CURL_SUFFIX_CURL_OFF_TU ULL
136# endif
137# define CURL_TYPEOF_CURL_SOCKLEN_T int
138
139#elif defined(__LCC__)
140# if defined(__e2k__) /* MCST eLbrus C Compiler */
141# define CURL_TYPEOF_CURL_OFF_T long
142# define CURL_FORMAT_CURL_OFF_T "ld"
143# define CURL_FORMAT_CURL_OFF_TU "lu"
144# define CURL_SUFFIX_CURL_OFF_T L
145# define CURL_SUFFIX_CURL_OFF_TU UL
146# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
147# define CURL_PULL_SYS_TYPES_H 1
148# define CURL_PULL_SYS_SOCKET_H 1
149# else /* Local (or Little) C Compiler */
150# define CURL_TYPEOF_CURL_OFF_T long
151# define CURL_FORMAT_CURL_OFF_T "ld"
152# define CURL_FORMAT_CURL_OFF_TU "lu"
153# define CURL_SUFFIX_CURL_OFF_T L
154# define CURL_SUFFIX_CURL_OFF_TU UL
155# define CURL_TYPEOF_CURL_SOCKLEN_T int
156# endif
157
158#elif defined(__SYMBIAN32__)
159# if defined(__EABI__) /* Treat all ARM compilers equally */
160# define CURL_TYPEOF_CURL_OFF_T long long
161# define CURL_FORMAT_CURL_OFF_T "lld"
162# define CURL_FORMAT_CURL_OFF_TU "llu"
163# define CURL_SUFFIX_CURL_OFF_T LL
164# define CURL_SUFFIX_CURL_OFF_TU ULL
165# elif defined(__CW32__)
166# pragma longlong on
167# define CURL_TYPEOF_CURL_OFF_T long long
168# define CURL_FORMAT_CURL_OFF_T "lld"
169# define CURL_FORMAT_CURL_OFF_TU "llu"
170# define CURL_SUFFIX_CURL_OFF_T LL
171# define CURL_SUFFIX_CURL_OFF_TU ULL
172# elif defined(__VC32__)
173# define CURL_TYPEOF_CURL_OFF_T __int64
174# define CURL_FORMAT_CURL_OFF_T "lld"
175# define CURL_FORMAT_CURL_OFF_TU "llu"
176# define CURL_SUFFIX_CURL_OFF_T LL
177# define CURL_SUFFIX_CURL_OFF_TU ULL
178# endif
179# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
180
181#elif defined(__MWERKS__)
182# define CURL_TYPEOF_CURL_OFF_T long long
183# define CURL_FORMAT_CURL_OFF_T "lld"
184# define CURL_FORMAT_CURL_OFF_TU "llu"
185# define CURL_SUFFIX_CURL_OFF_T LL
186# define CURL_SUFFIX_CURL_OFF_TU ULL
187# define CURL_TYPEOF_CURL_SOCKLEN_T int
188
189#elif defined(_WIN32_WCE)
190# define CURL_TYPEOF_CURL_OFF_T __int64
191# define CURL_FORMAT_CURL_OFF_T "I64d"
192# define CURL_FORMAT_CURL_OFF_TU "I64u"
193# define CURL_SUFFIX_CURL_OFF_T i64
194# define CURL_SUFFIX_CURL_OFF_TU ui64
195# define CURL_TYPEOF_CURL_SOCKLEN_T int
196
197#elif defined(__MINGW32__)
198# define CURL_TYPEOF_CURL_OFF_T long long
199# define CURL_FORMAT_CURL_OFF_T "I64d"
200# define CURL_FORMAT_CURL_OFF_TU "I64u"
201# define CURL_SUFFIX_CURL_OFF_T LL
202# define CURL_SUFFIX_CURL_OFF_TU ULL
203# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
204# define CURL_PULL_SYS_TYPES_H 1
205# define CURL_PULL_WS2TCPIP_H 1
206
207#elif defined(__VMS)
208# if defined(__VAX)
209# define CURL_TYPEOF_CURL_OFF_T long
210# define CURL_FORMAT_CURL_OFF_T "ld"
211# define CURL_FORMAT_CURL_OFF_TU "lu"
212# define CURL_SUFFIX_CURL_OFF_T L
213# define CURL_SUFFIX_CURL_OFF_TU UL
214# else
215# define CURL_TYPEOF_CURL_OFF_T long long
216# define CURL_FORMAT_CURL_OFF_T "lld"
217# define CURL_FORMAT_CURL_OFF_TU "llu"
218# define CURL_SUFFIX_CURL_OFF_T LL
219# define CURL_SUFFIX_CURL_OFF_TU ULL
220# endif
221# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
222
223#elif defined(__OS400__)
224# if defined(__ILEC400__)
225# define CURL_TYPEOF_CURL_OFF_T long long
226# define CURL_FORMAT_CURL_OFF_T "lld"
227# define CURL_FORMAT_CURL_OFF_TU "llu"
228# define CURL_SUFFIX_CURL_OFF_T LL
229# define CURL_SUFFIX_CURL_OFF_TU ULL
230# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
231# define CURL_PULL_SYS_TYPES_H 1
232# define CURL_PULL_SYS_SOCKET_H 1
233# endif
234
235#elif defined(__MVS__)
236# if defined(__IBMC__) || defined(__IBMCPP__)
237# if defined(_ILP32)
238# elif defined(_LP64)
239# endif
240# if defined(_LONG_LONG)
241# define CURL_TYPEOF_CURL_OFF_T long long
242# define CURL_FORMAT_CURL_OFF_T "lld"
243# define CURL_FORMAT_CURL_OFF_TU "llu"
244# define CURL_SUFFIX_CURL_OFF_T LL
245# define CURL_SUFFIX_CURL_OFF_TU ULL
246# elif defined(_LP64)
247# define CURL_TYPEOF_CURL_OFF_T long
248# define CURL_FORMAT_CURL_OFF_T "ld"
249# define CURL_FORMAT_CURL_OFF_TU "lu"
250# define CURL_SUFFIX_CURL_OFF_T L
251# define CURL_SUFFIX_CURL_OFF_TU UL
252# else
253# define CURL_TYPEOF_CURL_OFF_T long
254# define CURL_FORMAT_CURL_OFF_T "ld"
255# define CURL_FORMAT_CURL_OFF_TU "lu"
256# define CURL_SUFFIX_CURL_OFF_T L
257# define CURL_SUFFIX_CURL_OFF_TU UL
258# endif
259# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
260# define CURL_PULL_SYS_TYPES_H 1
261# define CURL_PULL_SYS_SOCKET_H 1
262# endif
263
264#elif defined(__370__)
265# if defined(__IBMC__) || defined(__IBMCPP__)
266# if defined(_ILP32)
267# elif defined(_LP64)
268# endif
269# if defined(_LONG_LONG)
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# elif defined(_LP64)
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# else
282# define CURL_TYPEOF_CURL_OFF_T long
283# define CURL_FORMAT_CURL_OFF_T "ld"
284# define CURL_FORMAT_CURL_OFF_TU "lu"
285# define CURL_SUFFIX_CURL_OFF_T L
286# define CURL_SUFFIX_CURL_OFF_TU UL
287# endif
288# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
289# define CURL_PULL_SYS_TYPES_H 1
290# define CURL_PULL_SYS_SOCKET_H 1
291# endif
292
293#elif defined(TPF)
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# define CURL_TYPEOF_CURL_SOCKLEN_T int
300
301#elif defined(__TINYC__) /* also known as tcc */
302# define CURL_TYPEOF_CURL_OFF_T long long
303# define CURL_FORMAT_CURL_OFF_T "lld"
304# define CURL_FORMAT_CURL_OFF_TU "llu"
305# define CURL_SUFFIX_CURL_OFF_T LL
306# define CURL_SUFFIX_CURL_OFF_TU ULL
307# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
308# define CURL_PULL_SYS_TYPES_H 1
309# define CURL_PULL_SYS_SOCKET_H 1
310
311#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */
312# if !defined(__LP64) && (defined(__ILP32) || \
313 defined(__i386) || \
314 defined(__sparcv8) || \
315 defined(__sparcv8plus))
316# define CURL_TYPEOF_CURL_OFF_T long long
317# define CURL_FORMAT_CURL_OFF_T "lld"
318# define CURL_FORMAT_CURL_OFF_TU "llu"
319# define CURL_SUFFIX_CURL_OFF_T LL
320# define CURL_SUFFIX_CURL_OFF_TU ULL
321# elif defined(__LP64) || \
322 defined(__amd64) || defined(__sparcv9)
323# define CURL_TYPEOF_CURL_OFF_T long
324# define CURL_FORMAT_CURL_OFF_T "ld"
325# define CURL_FORMAT_CURL_OFF_TU "lu"
326# define CURL_SUFFIX_CURL_OFF_T L
327# define CURL_SUFFIX_CURL_OFF_TU UL
328# endif
329# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
330# define CURL_PULL_SYS_TYPES_H 1
331# define CURL_PULL_SYS_SOCKET_H 1
332
333#elif defined(__xlc__) /* IBM xlc compiler */
334# if !defined(_LP64)
335# define CURL_TYPEOF_CURL_OFF_T long long
336# define CURL_FORMAT_CURL_OFF_T "lld"
337# define CURL_FORMAT_CURL_OFF_TU "llu"
338# define CURL_SUFFIX_CURL_OFF_T LL
339# define CURL_SUFFIX_CURL_OFF_TU ULL
340# else
341# define CURL_TYPEOF_CURL_OFF_T long
342# define CURL_FORMAT_CURL_OFF_T "ld"
343# define CURL_FORMAT_CURL_OFF_TU "lu"
344# define CURL_SUFFIX_CURL_OFF_T L
345# define CURL_SUFFIX_CURL_OFF_TU UL
346# endif
347# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
348# define CURL_PULL_SYS_TYPES_H 1
349# define CURL_PULL_SYS_SOCKET_H 1
350
351/* ===================================== */
352/* KEEP MSVC THE PENULTIMATE ENTRY */
353/* ===================================== */
354
355#elif defined(_MSC_VER)
356# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
357# define CURL_TYPEOF_CURL_OFF_T __int64
358# define CURL_FORMAT_CURL_OFF_T "I64d"
359# define CURL_FORMAT_CURL_OFF_TU "I64u"
360# define CURL_SUFFIX_CURL_OFF_T i64
361# define CURL_SUFFIX_CURL_OFF_TU ui64
362# else
363# define CURL_TYPEOF_CURL_OFF_T long
364# define CURL_FORMAT_CURL_OFF_T "ld"
365# define CURL_FORMAT_CURL_OFF_TU "lu"
366# define CURL_SUFFIX_CURL_OFF_T L
367# define CURL_SUFFIX_CURL_OFF_TU UL
368# endif
369# define CURL_TYPEOF_CURL_SOCKLEN_T int
370
371/* ===================================== */
372/* KEEP GENERIC GCC THE LAST ENTRY */
373/* ===================================== */
374
375#elif defined(__GNUC__) && !defined(_SCO_DS)
376# if !defined(__LP64__) && \
377 (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \
378 defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \
379 defined(__sparc__) || defined(__mips__) || defined(__sh__) || \
380 defined(__XTENSA__) || \
381 (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \
382 (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L))
383# define CURL_TYPEOF_CURL_OFF_T long long
384# define CURL_FORMAT_CURL_OFF_T "lld"
385# define CURL_FORMAT_CURL_OFF_TU "llu"
386# define CURL_SUFFIX_CURL_OFF_T LL
387# define CURL_SUFFIX_CURL_OFF_TU ULL
388# elif defined(__LP64__) || \
389 defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \
390 defined(__e2k__) || \
391 (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \
392 (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L)
393# define CURL_TYPEOF_CURL_OFF_T long
394# define CURL_FORMAT_CURL_OFF_T "ld"
395# define CURL_FORMAT_CURL_OFF_TU "lu"
396# define CURL_SUFFIX_CURL_OFF_T L
397# define CURL_SUFFIX_CURL_OFF_TU UL
398# endif
399# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
400# define CURL_PULL_SYS_TYPES_H 1
401# define CURL_PULL_SYS_SOCKET_H 1
402
403#else
404/* generic "safe guess" on old 32 bit style */
405# define CURL_TYPEOF_CURL_OFF_T long
406# define CURL_FORMAT_CURL_OFF_T "ld"
407# define CURL_FORMAT_CURL_OFF_TU "lu"
408# define CURL_SUFFIX_CURL_OFF_T L
409# define CURL_SUFFIX_CURL_OFF_TU UL
410# define CURL_TYPEOF_CURL_SOCKLEN_T int
411#endif
412
413#ifdef _AIX
414/* AIX needs <sys/poll.h> */
415#define CURL_PULL_SYS_POLL_H
416#endif
417
418
419/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */
420/* ws2tcpip.h is required here to properly make type definitions below. */
421#ifdef CURL_PULL_WS2TCPIP_H
422# include <winsock2.h>
423# include <windows.h>
424# include <ws2tcpip.h>
425#endif
426
427/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */
428/* sys/types.h is required here to properly make type definitions below. */
429#ifdef CURL_PULL_SYS_TYPES_H
430# include <sys/types.h>
431#endif
432
433/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
434/* sys/socket.h is required here to properly make type definitions below. */
435#ifdef CURL_PULL_SYS_SOCKET_H
436# include <sys/socket.h>
437#endif
438
439/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */
440/* sys/poll.h is required here to properly make type definitions below. */
441#ifdef CURL_PULL_SYS_POLL_H
442# include <sys/poll.h>
443#endif
444
445/* Data type definition of curl_socklen_t. */
446#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
447 typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
448#endif
449
450/* Data type definition of curl_off_t. */
451
452#ifdef CURL_TYPEOF_CURL_OFF_T
453 typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
454#endif
455
456/*
457 * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
458 * these to be visible and exported by the external libcurl interface API,
459 * while also making them visible to the library internals, simply including
460 * curl_setup.h, without actually needing to include curl.h internally.
461 * If some day this section would grow big enough, all this should be moved
462 * to its own header file.
463 */
464
465/*
466 * Figure out if we can use the ## preprocessor operator, which is supported
467 * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
468 * or __cplusplus so we need to carefully check for them too.
469 */
470
471#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
472 defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
473 defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
474 defined(__ILEC400__)
475 /* This compiler is believed to have an ISO compatible preprocessor */
476#define CURL_ISOCPP
477#else
478 /* This compiler is believed NOT to have an ISO compatible preprocessor */
479#undef CURL_ISOCPP
480#endif
481
482/*
483 * Macros for minimum-width signed and unsigned curl_off_t integer constants.
484 */
485
486#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
487# define CURLINC_OFF_T_C_HLPR2(x) x
488# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x)
489# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
490 CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
491# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
492 CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
493#else
494# ifdef CURL_ISOCPP
495# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
496# else
497# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
498# endif
499# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix)
500# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
501# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
502#endif
503
504#endif /* CURLINC_SYSTEM_H */
505

source code of include/x86_64-linux-gnu/curl/system.h