000fea6c757dbfb3d4133f8f0961b223658650da
[platform/upstream/cmake.git] / Utilities / cmcurl / include / curl / system.h
1 #ifndef CURLINC_SYSTEM_H
2 #define CURLINC_SYSTEM_H
3 /***************************************************************************
4  *                                  _   _ ____  _
5  *  Project                     ___| | | |  _ \| |
6  *                             / __| | | | |_) | |
7  *                            | (__| |_| |  _ <| |___
8  *                             \___|\___/|_| \_\_____|
9  *
10  * Copyright (C) 1998 - 2022, 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(__POCC__)
102 #  if (__POCC__ < 280)
103 #    define CURL_TYPEOF_CURL_OFF_T     long
104 #    define CURL_FORMAT_CURL_OFF_T     "ld"
105 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
106 #    define CURL_SUFFIX_CURL_OFF_T     L
107 #    define CURL_SUFFIX_CURL_OFF_TU    UL
108 #  elif defined(_MSC_VER)
109 #    define CURL_TYPEOF_CURL_OFF_T     __int64
110 #    define CURL_FORMAT_CURL_OFF_T     "I64d"
111 #    define CURL_FORMAT_CURL_OFF_TU    "I64u"
112 #    define CURL_SUFFIX_CURL_OFF_T     i64
113 #    define CURL_SUFFIX_CURL_OFF_TU    ui64
114 #  else
115 #    define CURL_TYPEOF_CURL_OFF_T     long long
116 #    define CURL_FORMAT_CURL_OFF_T     "lld"
117 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
118 #    define CURL_SUFFIX_CURL_OFF_T     LL
119 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
120 #  endif
121 #  define CURL_TYPEOF_CURL_SOCKLEN_T int
122
123 #elif defined(__LCC__)
124 #  if defined(__MCST__) /* MCST eLbrus Compiler Collection */
125 #    define CURL_TYPEOF_CURL_OFF_T     long
126 #    define CURL_FORMAT_CURL_OFF_T     "ld"
127 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
128 #    define CURL_SUFFIX_CURL_OFF_T     L
129 #    define CURL_SUFFIX_CURL_OFF_TU    UL
130 #    define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
131 #    define CURL_PULL_SYS_TYPES_H      1
132 #    define CURL_PULL_SYS_SOCKET_H     1
133 #  else                /* Local (or Little) C Compiler */
134 #    define CURL_TYPEOF_CURL_OFF_T     long
135 #    define CURL_FORMAT_CURL_OFF_T     "ld"
136 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
137 #    define CURL_SUFFIX_CURL_OFF_T     L
138 #    define CURL_SUFFIX_CURL_OFF_TU    UL
139 #    define CURL_TYPEOF_CURL_SOCKLEN_T int
140 #  endif
141
142 #elif defined(__SYMBIAN32__)
143 #  if defined(__EABI__) /* Treat all ARM compilers equally */
144 #    define CURL_TYPEOF_CURL_OFF_T     long long
145 #    define CURL_FORMAT_CURL_OFF_T     "lld"
146 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
147 #    define CURL_SUFFIX_CURL_OFF_T     LL
148 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
149 #  elif defined(__CW32__)
150 #    pragma longlong on
151 #    define CURL_TYPEOF_CURL_OFF_T     long long
152 #    define CURL_FORMAT_CURL_OFF_T     "lld"
153 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
154 #    define CURL_SUFFIX_CURL_OFF_T     LL
155 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
156 #  elif defined(__VC32__)
157 #    define CURL_TYPEOF_CURL_OFF_T     __int64
158 #    define CURL_FORMAT_CURL_OFF_T     "lld"
159 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
160 #    define CURL_SUFFIX_CURL_OFF_T     LL
161 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
162 #  endif
163 #  define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
164
165 #elif defined(__MWERKS__)
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 #  define CURL_TYPEOF_CURL_SOCKLEN_T int
172
173 #elif defined(_WIN32_WCE)
174 #  define CURL_TYPEOF_CURL_OFF_T     __int64
175 #  define CURL_FORMAT_CURL_OFF_T     "I64d"
176 #  define CURL_FORMAT_CURL_OFF_TU    "I64u"
177 #  define CURL_SUFFIX_CURL_OFF_T     i64
178 #  define CURL_SUFFIX_CURL_OFF_TU    ui64
179 #  define CURL_TYPEOF_CURL_SOCKLEN_T int
180
181 #elif defined(__MINGW32__)
182 #  define CURL_TYPEOF_CURL_OFF_T     long long
183 #  define CURL_FORMAT_CURL_OFF_T     "I64d"
184 #  define CURL_FORMAT_CURL_OFF_TU    "I64u"
185 #  define CURL_SUFFIX_CURL_OFF_T     LL
186 #  define CURL_SUFFIX_CURL_OFF_TU    ULL
187 #  define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
188 #  define CURL_PULL_SYS_TYPES_H      1
189 #  define CURL_PULL_WS2TCPIP_H       1
190
191 #elif defined(__VMS)
192 #  if defined(__VAX)
193 #    define CURL_TYPEOF_CURL_OFF_T     long
194 #    define CURL_FORMAT_CURL_OFF_T     "ld"
195 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
196 #    define CURL_SUFFIX_CURL_OFF_T     L
197 #    define CURL_SUFFIX_CURL_OFF_TU    UL
198 #  else
199 #    define CURL_TYPEOF_CURL_OFF_T     long long
200 #    define CURL_FORMAT_CURL_OFF_T     "lld"
201 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
202 #    define CURL_SUFFIX_CURL_OFF_T     LL
203 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
204 #  endif
205 #  define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
206
207 #elif defined(__OS400__)
208 #  if defined(__ILEC400__)
209 #    define CURL_TYPEOF_CURL_OFF_T     long long
210 #    define CURL_FORMAT_CURL_OFF_T     "lld"
211 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
212 #    define CURL_SUFFIX_CURL_OFF_T     LL
213 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
214 #    define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
215 #    define CURL_PULL_SYS_TYPES_H      1
216 #    define CURL_PULL_SYS_SOCKET_H     1
217 #  endif
218
219 #elif defined(__MVS__)
220 #  if defined(__IBMC__) || defined(__IBMCPP__)
221 #    if defined(_ILP32)
222 #    elif defined(_LP64)
223 #    endif
224 #    if defined(_LONG_LONG)
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 #    elif defined(_LP64)
231 #      define CURL_TYPEOF_CURL_OFF_T     long
232 #      define CURL_FORMAT_CURL_OFF_T     "ld"
233 #      define CURL_FORMAT_CURL_OFF_TU    "lu"
234 #      define CURL_SUFFIX_CURL_OFF_T     L
235 #      define CURL_SUFFIX_CURL_OFF_TU    UL
236 #    else
237 #      define CURL_TYPEOF_CURL_OFF_T     long
238 #      define CURL_FORMAT_CURL_OFF_T     "ld"
239 #      define CURL_FORMAT_CURL_OFF_TU    "lu"
240 #      define CURL_SUFFIX_CURL_OFF_T     L
241 #      define CURL_SUFFIX_CURL_OFF_TU    UL
242 #    endif
243 #    define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
244 #    define CURL_PULL_SYS_TYPES_H      1
245 #    define CURL_PULL_SYS_SOCKET_H     1
246 #  endif
247
248 #elif defined(__370__)
249 #  if defined(__IBMC__) || defined(__IBMCPP__)
250 #    if defined(_ILP32)
251 #    elif defined(_LP64)
252 #    endif
253 #    if defined(_LONG_LONG)
254 #      define CURL_TYPEOF_CURL_OFF_T     long long
255 #      define CURL_FORMAT_CURL_OFF_T     "lld"
256 #      define CURL_FORMAT_CURL_OFF_TU    "llu"
257 #      define CURL_SUFFIX_CURL_OFF_T     LL
258 #      define CURL_SUFFIX_CURL_OFF_TU    ULL
259 #    elif defined(_LP64)
260 #      define CURL_TYPEOF_CURL_OFF_T     long
261 #      define CURL_FORMAT_CURL_OFF_T     "ld"
262 #      define CURL_FORMAT_CURL_OFF_TU    "lu"
263 #      define CURL_SUFFIX_CURL_OFF_T     L
264 #      define CURL_SUFFIX_CURL_OFF_TU    UL
265 #    else
266 #      define CURL_TYPEOF_CURL_OFF_T     long
267 #      define CURL_FORMAT_CURL_OFF_T     "ld"
268 #      define CURL_FORMAT_CURL_OFF_TU    "lu"
269 #      define CURL_SUFFIX_CURL_OFF_T     L
270 #      define CURL_SUFFIX_CURL_OFF_TU    UL
271 #    endif
272 #    define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
273 #    define CURL_PULL_SYS_TYPES_H      1
274 #    define CURL_PULL_SYS_SOCKET_H     1
275 #  endif
276
277 #elif defined(TPF)
278 #  define CURL_TYPEOF_CURL_OFF_T     long
279 #  define CURL_FORMAT_CURL_OFF_T     "ld"
280 #  define CURL_FORMAT_CURL_OFF_TU    "lu"
281 #  define CURL_SUFFIX_CURL_OFF_T     L
282 #  define CURL_SUFFIX_CURL_OFF_TU    UL
283 #  define CURL_TYPEOF_CURL_SOCKLEN_T int
284
285 #elif defined(__TINYC__) /* also known as tcc */
286 #  define CURL_TYPEOF_CURL_OFF_T     long long
287 #  define CURL_FORMAT_CURL_OFF_T     "lld"
288 #  define CURL_FORMAT_CURL_OFF_TU    "llu"
289 #  define CURL_SUFFIX_CURL_OFF_T     LL
290 #  define CURL_SUFFIX_CURL_OFF_TU    ULL
291 #  define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
292 #  define CURL_PULL_SYS_TYPES_H      1
293 #  define CURL_PULL_SYS_SOCKET_H     1
294
295 #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */
296 #  if !defined(__LP64) && (defined(__ILP32) ||                          \
297                            defined(__i386) ||                           \
298                            defined(__sparcv8) ||                        \
299                            defined(__sparcv8plus))
300 #    define CURL_TYPEOF_CURL_OFF_T     long long
301 #    define CURL_FORMAT_CURL_OFF_T     "lld"
302 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
303 #    define CURL_SUFFIX_CURL_OFF_T     LL
304 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
305 #  elif defined(__LP64) || \
306         defined(__amd64) || defined(__sparcv9)
307 #    define CURL_TYPEOF_CURL_OFF_T     long
308 #    define CURL_FORMAT_CURL_OFF_T     "ld"
309 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
310 #    define CURL_SUFFIX_CURL_OFF_T     L
311 #    define CURL_SUFFIX_CURL_OFF_TU    UL
312 #  endif
313 #  define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
314 #  define CURL_PULL_SYS_TYPES_H      1
315 #  define CURL_PULL_SYS_SOCKET_H     1
316
317 #elif defined(__xlc__) /* IBM xlc compiler */
318 #  if !defined(_LP64)
319 #    define CURL_TYPEOF_CURL_OFF_T     long long
320 #    define CURL_FORMAT_CURL_OFF_T     "lld"
321 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
322 #    define CURL_SUFFIX_CURL_OFF_T     LL
323 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
324 #  else
325 #    define CURL_TYPEOF_CURL_OFF_T     long
326 #    define CURL_FORMAT_CURL_OFF_T     "ld"
327 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
328 #    define CURL_SUFFIX_CURL_OFF_T     L
329 #    define CURL_SUFFIX_CURL_OFF_TU    UL
330 #  endif
331 #  define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
332 #  define CURL_PULL_SYS_TYPES_H      1
333 #  define CURL_PULL_SYS_SOCKET_H     1
334
335 /* ===================================== */
336 /*    KEEP MSVC THE PENULTIMATE ENTRY    */
337 /* ===================================== */
338
339 #elif defined(_MSC_VER)
340 #  if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
341 #    define CURL_TYPEOF_CURL_OFF_T     __int64
342 #    define CURL_FORMAT_CURL_OFF_T     "I64d"
343 #    define CURL_FORMAT_CURL_OFF_TU    "I64u"
344 #    define CURL_SUFFIX_CURL_OFF_T     i64
345 #    define CURL_SUFFIX_CURL_OFF_TU    ui64
346 #  else
347 #    define CURL_TYPEOF_CURL_OFF_T     long
348 #    define CURL_FORMAT_CURL_OFF_T     "ld"
349 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
350 #    define CURL_SUFFIX_CURL_OFF_T     L
351 #    define CURL_SUFFIX_CURL_OFF_TU    UL
352 #  endif
353 #  define CURL_TYPEOF_CURL_SOCKLEN_T int
354
355 /* ===================================== */
356 /*    KEEP GENERIC GCC THE LAST ENTRY    */
357 /* ===================================== */
358
359 #elif defined(__GNUC__) && !defined(_SCO_DS)
360 #  if !defined(__LP64__) &&                                             \
361   (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) ||      \
362    defined(__ppc__) || defined(__powerpc__) || defined(__arm__) ||      \
363    defined(__sparc__) || defined(__mips__) || defined(__sh__) ||        \
364    defined(__XTENSA__) ||                                               \
365    (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4)  ||               \
366    (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L))
367 #    define CURL_TYPEOF_CURL_OFF_T     long long
368 #    define CURL_FORMAT_CURL_OFF_T     "lld"
369 #    define CURL_FORMAT_CURL_OFF_TU    "llu"
370 #    define CURL_SUFFIX_CURL_OFF_T     LL
371 #    define CURL_SUFFIX_CURL_OFF_TU    ULL
372 #  elif defined(__LP64__) || \
373         defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \
374         defined(__e2k__) || \
375         (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \
376         (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L)
377 #    define CURL_TYPEOF_CURL_OFF_T     long
378 #    define CURL_FORMAT_CURL_OFF_T     "ld"
379 #    define CURL_FORMAT_CURL_OFF_TU    "lu"
380 #    define CURL_SUFFIX_CURL_OFF_T     L
381 #    define CURL_SUFFIX_CURL_OFF_TU    UL
382 #  endif
383 #  define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
384 #  define CURL_PULL_SYS_TYPES_H      1
385 #  define CURL_PULL_SYS_SOCKET_H     1
386
387 #else
388 /* generic "safe guess" on old 32 bit style */
389 # define CURL_TYPEOF_CURL_OFF_T     long
390 # define CURL_FORMAT_CURL_OFF_T     "ld"
391 # define CURL_FORMAT_CURL_OFF_TU    "lu"
392 # define CURL_SUFFIX_CURL_OFF_T     L
393 # define CURL_SUFFIX_CURL_OFF_TU    UL
394 # define CURL_TYPEOF_CURL_SOCKLEN_T int
395 #endif
396
397 #ifdef _AIX
398 /* AIX needs <sys/poll.h> */
399 #define CURL_PULL_SYS_POLL_H
400 #endif
401
402
403 /* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file  */
404 /* ws2tcpip.h is required here to properly make type definitions below. */
405 #ifdef CURL_PULL_WS2TCPIP_H
406 #  include <winsock2.h>
407 #  include <windows.h>
408 #  include <ws2tcpip.h>
409 #endif
410
411 /* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file  */
412 /* sys/types.h is required here to properly make type definitions below. */
413 #ifdef CURL_PULL_SYS_TYPES_H
414 #  include <sys/types.h>
415 #endif
416
417 /* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file  */
418 /* sys/socket.h is required here to properly make type definitions below. */
419 #ifdef CURL_PULL_SYS_SOCKET_H
420 #  include <sys/socket.h>
421 #endif
422
423 /* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file    */
424 /* sys/poll.h is required here to properly make type definitions below.   */
425 #ifdef CURL_PULL_SYS_POLL_H
426 #  include <sys/poll.h>
427 #endif
428
429 /* Data type definition of curl_socklen_t. */
430 #ifdef CURL_TYPEOF_CURL_SOCKLEN_T
431   typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
432 #endif
433
434 /* Data type definition of curl_off_t. */
435
436 #ifdef CURL_TYPEOF_CURL_OFF_T
437   typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
438 #endif
439
440 /*
441  * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
442  * these to be visible and exported by the external libcurl interface API,
443  * while also making them visible to the library internals, simply including
444  * curl_setup.h, without actually needing to include curl.h internally.
445  * If some day this section would grow big enough, all this should be moved
446  * to its own header file.
447  */
448
449 /*
450  * Figure out if we can use the ## preprocessor operator, which is supported
451  * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
452  * or  __cplusplus so we need to carefully check for them too.
453  */
454
455 #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
456   defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
457   defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
458   defined(__ILEC400__)
459   /* This compiler is believed to have an ISO compatible preprocessor */
460 #define CURL_ISOCPP
461 #else
462   /* This compiler is believed NOT to have an ISO compatible preprocessor */
463 #undef CURL_ISOCPP
464 #endif
465
466 /*
467  * Macros for minimum-width signed and unsigned curl_off_t integer constants.
468  */
469
470 #if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
471 #  define CURLINC_OFF_T_C_HLPR2(x) x
472 #  define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x)
473 #  define CURL_OFF_T_C(Val)  CURLINC_OFF_T_C_HLPR1(Val) ## \
474                              CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
475 #  define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
476                              CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
477 #else
478 #  ifdef CURL_ISOCPP
479 #    define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
480 #  else
481 #    define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
482 #  endif
483 #  define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix)
484 #  define CURL_OFF_T_C(Val)  CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
485 #  define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
486 #endif
487
488 #endif /* CURLINC_SYSTEM_H */