xref: /aosp_15_r20/external/curl/lib/curl_setup_once.h (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_SETUP_ONCE_H
2*6236dae4SAndroid Build Coastguard Worker #define HEADER_CURL_SETUP_ONCE_H
3*6236dae4SAndroid Build Coastguard Worker /***************************************************************************
4*6236dae4SAndroid Build Coastguard Worker  *                                  _   _ ____  _
5*6236dae4SAndroid Build Coastguard Worker  *  Project                     ___| | | |  _ \| |
6*6236dae4SAndroid Build Coastguard Worker  *                             / __| | | | |_) | |
7*6236dae4SAndroid Build Coastguard Worker  *                            | (__| |_| |  _ <| |___
8*6236dae4SAndroid Build Coastguard Worker  *                             \___|\___/|_| \_\_____|
9*6236dae4SAndroid Build Coastguard Worker  *
10*6236dae4SAndroid Build Coastguard Worker  * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
11*6236dae4SAndroid Build Coastguard Worker  *
12*6236dae4SAndroid Build Coastguard Worker  * This software is licensed as described in the file COPYING, which
13*6236dae4SAndroid Build Coastguard Worker  * you should have received as part of this distribution. The terms
14*6236dae4SAndroid Build Coastguard Worker  * are also available at https://curl.se/docs/copyright.html.
15*6236dae4SAndroid Build Coastguard Worker  *
16*6236dae4SAndroid Build Coastguard Worker  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17*6236dae4SAndroid Build Coastguard Worker  * copies of the Software, and permit persons to whom the Software is
18*6236dae4SAndroid Build Coastguard Worker  * furnished to do so, under the terms of the COPYING file.
19*6236dae4SAndroid Build Coastguard Worker  *
20*6236dae4SAndroid Build Coastguard Worker  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21*6236dae4SAndroid Build Coastguard Worker  * KIND, either express or implied.
22*6236dae4SAndroid Build Coastguard Worker  *
23*6236dae4SAndroid Build Coastguard Worker  * SPDX-License-Identifier: curl
24*6236dae4SAndroid Build Coastguard Worker  *
25*6236dae4SAndroid Build Coastguard Worker  ***************************************************************************/
26*6236dae4SAndroid Build Coastguard Worker 
27*6236dae4SAndroid Build Coastguard Worker 
28*6236dae4SAndroid Build Coastguard Worker /*
29*6236dae4SAndroid Build Coastguard Worker  * Inclusion of common header files.
30*6236dae4SAndroid Build Coastguard Worker  */
31*6236dae4SAndroid Build Coastguard Worker 
32*6236dae4SAndroid Build Coastguard Worker #include <stdio.h>
33*6236dae4SAndroid Build Coastguard Worker #include <stdlib.h>
34*6236dae4SAndroid Build Coastguard Worker #include <string.h>
35*6236dae4SAndroid Build Coastguard Worker #include <stdarg.h>
36*6236dae4SAndroid Build Coastguard Worker #include <time.h>
37*6236dae4SAndroid Build Coastguard Worker #include <errno.h>
38*6236dae4SAndroid Build Coastguard Worker 
39*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TYPES_H
40*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h>
41*6236dae4SAndroid Build Coastguard Worker #endif
42*6236dae4SAndroid Build Coastguard Worker 
43*6236dae4SAndroid Build Coastguard Worker #ifdef NEED_MALLOC_H
44*6236dae4SAndroid Build Coastguard Worker #include <malloc.h>
45*6236dae4SAndroid Build Coastguard Worker #endif
46*6236dae4SAndroid Build Coastguard Worker 
47*6236dae4SAndroid Build Coastguard Worker #ifdef NEED_MEMORY_H
48*6236dae4SAndroid Build Coastguard Worker #include <memory.h>
49*6236dae4SAndroid Build Coastguard Worker #endif
50*6236dae4SAndroid Build Coastguard Worker 
51*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_STAT_H
52*6236dae4SAndroid Build Coastguard Worker #include <sys/stat.h>
53*6236dae4SAndroid Build Coastguard Worker #endif
54*6236dae4SAndroid Build Coastguard Worker 
55*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TIME_H
56*6236dae4SAndroid Build Coastguard Worker #include <sys/time.h>
57*6236dae4SAndroid Build Coastguard Worker #endif
58*6236dae4SAndroid Build Coastguard Worker 
59*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
60*6236dae4SAndroid Build Coastguard Worker #include <io.h>
61*6236dae4SAndroid Build Coastguard Worker #include <fcntl.h>
62*6236dae4SAndroid Build Coastguard Worker #endif
63*6236dae4SAndroid Build Coastguard Worker 
64*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_STDBOOL_H) && defined(HAVE_BOOL_T)
65*6236dae4SAndroid Build Coastguard Worker #include <stdbool.h>
66*6236dae4SAndroid Build Coastguard Worker #endif
67*6236dae4SAndroid Build Coastguard Worker 
68*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_UNISTD_H
69*6236dae4SAndroid Build Coastguard Worker #include <unistd.h>
70*6236dae4SAndroid Build Coastguard Worker #endif
71*6236dae4SAndroid Build Coastguard Worker 
72*6236dae4SAndroid Build Coastguard Worker #ifdef USE_WOLFSSL
73*6236dae4SAndroid Build Coastguard Worker #include <stdint.h>
74*6236dae4SAndroid Build Coastguard Worker #endif
75*6236dae4SAndroid Build Coastguard Worker 
76*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SCHANNEL
77*6236dae4SAndroid Build Coastguard Worker /* Must set this before <schannel.h> is included directly or indirectly by
78*6236dae4SAndroid Build Coastguard Worker    another Windows header. */
79*6236dae4SAndroid Build Coastguard Worker #  define SCHANNEL_USE_BLACKLISTS 1
80*6236dae4SAndroid Build Coastguard Worker #endif
81*6236dae4SAndroid Build Coastguard Worker 
82*6236dae4SAndroid Build Coastguard Worker #ifdef __hpux
83*6236dae4SAndroid Build Coastguard Worker #  if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL)
84*6236dae4SAndroid Build Coastguard Worker #    ifdef _APP32_64BIT_OFF_T
85*6236dae4SAndroid Build Coastguard Worker #      define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T
86*6236dae4SAndroid Build Coastguard Worker #      undef _APP32_64BIT_OFF_T
87*6236dae4SAndroid Build Coastguard Worker #    else
88*6236dae4SAndroid Build Coastguard Worker #      undef OLD_APP32_64BIT_OFF_T
89*6236dae4SAndroid Build Coastguard Worker #    endif
90*6236dae4SAndroid Build Coastguard Worker #  endif
91*6236dae4SAndroid Build Coastguard Worker #endif
92*6236dae4SAndroid Build Coastguard Worker 
93*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_SOCKET_H
94*6236dae4SAndroid Build Coastguard Worker #include <sys/socket.h>
95*6236dae4SAndroid Build Coastguard Worker #endif
96*6236dae4SAndroid Build Coastguard Worker 
97*6236dae4SAndroid Build Coastguard Worker #include "functypes.h"
98*6236dae4SAndroid Build Coastguard Worker 
99*6236dae4SAndroid Build Coastguard Worker #ifdef __hpux
100*6236dae4SAndroid Build Coastguard Worker #  if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL)
101*6236dae4SAndroid Build Coastguard Worker #    ifdef OLD_APP32_64BIT_OFF_T
102*6236dae4SAndroid Build Coastguard Worker #      define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T
103*6236dae4SAndroid Build Coastguard Worker #      undef OLD_APP32_64BIT_OFF_T
104*6236dae4SAndroid Build Coastguard Worker #    endif
105*6236dae4SAndroid Build Coastguard Worker #  endif
106*6236dae4SAndroid Build Coastguard Worker #endif
107*6236dae4SAndroid Build Coastguard Worker 
108*6236dae4SAndroid Build Coastguard Worker /*
109*6236dae4SAndroid Build Coastguard Worker  * Definition of timeval struct for platforms that do not have it.
110*6236dae4SAndroid Build Coastguard Worker  */
111*6236dae4SAndroid Build Coastguard Worker 
112*6236dae4SAndroid Build Coastguard Worker #ifndef HAVE_STRUCT_TIMEVAL
113*6236dae4SAndroid Build Coastguard Worker struct timeval {
114*6236dae4SAndroid Build Coastguard Worker  long tv_sec;
115*6236dae4SAndroid Build Coastguard Worker  long tv_usec;
116*6236dae4SAndroid Build Coastguard Worker };
117*6236dae4SAndroid Build Coastguard Worker #endif
118*6236dae4SAndroid Build Coastguard Worker 
119*6236dae4SAndroid Build Coastguard Worker 
120*6236dae4SAndroid Build Coastguard Worker /*
121*6236dae4SAndroid Build Coastguard Worker  * If we have the MSG_NOSIGNAL define, make sure we use
122*6236dae4SAndroid Build Coastguard Worker  * it as the fourth argument of function send()
123*6236dae4SAndroid Build Coastguard Worker  */
124*6236dae4SAndroid Build Coastguard Worker 
125*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_MSG_NOSIGNAL
126*6236dae4SAndroid Build Coastguard Worker #define SEND_4TH_ARG MSG_NOSIGNAL
127*6236dae4SAndroid Build Coastguard Worker #else
128*6236dae4SAndroid Build Coastguard Worker #define SEND_4TH_ARG 0
129*6236dae4SAndroid Build Coastguard Worker #endif
130*6236dae4SAndroid Build Coastguard Worker 
131*6236dae4SAndroid Build Coastguard Worker 
132*6236dae4SAndroid Build Coastguard Worker #if defined(__minix)
133*6236dae4SAndroid Build Coastguard Worker /* Minix does not support recv on TCP sockets */
134*6236dae4SAndroid Build Coastguard Worker #define sread(x,y,z) (ssize_t)read((RECV_TYPE_ARG1)(x), \
135*6236dae4SAndroid Build Coastguard Worker                                    (RECV_TYPE_ARG2)(y), \
136*6236dae4SAndroid Build Coastguard Worker                                    (RECV_TYPE_ARG3)(z))
137*6236dae4SAndroid Build Coastguard Worker 
138*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_RECV)
139*6236dae4SAndroid Build Coastguard Worker /*
140*6236dae4SAndroid Build Coastguard Worker  * The definitions for the return type and arguments types
141*6236dae4SAndroid Build Coastguard Worker  * of functions recv() and send() belong and come from the
142*6236dae4SAndroid Build Coastguard Worker  * configuration file. Do not define them in any other place.
143*6236dae4SAndroid Build Coastguard Worker  *
144*6236dae4SAndroid Build Coastguard Worker  * HAVE_RECV is defined if you have a function named recv()
145*6236dae4SAndroid Build Coastguard Worker  * which is used to read incoming data from sockets. If your
146*6236dae4SAndroid Build Coastguard Worker  * function has another name then do not define HAVE_RECV.
147*6236dae4SAndroid Build Coastguard Worker  *
148*6236dae4SAndroid Build Coastguard Worker  * If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2,
149*6236dae4SAndroid Build Coastguard Worker  * RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also
150*6236dae4SAndroid Build Coastguard Worker  * be defined.
151*6236dae4SAndroid Build Coastguard Worker  *
152*6236dae4SAndroid Build Coastguard Worker  * HAVE_SEND is defined if you have a function named send()
153*6236dae4SAndroid Build Coastguard Worker  * which is used to write outgoing data on a connected socket.
154*6236dae4SAndroid Build Coastguard Worker  * If yours has another name then do not define HAVE_SEND.
155*6236dae4SAndroid Build Coastguard Worker  *
156*6236dae4SAndroid Build Coastguard Worker  * If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
157*6236dae4SAndroid Build Coastguard Worker  * SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
158*6236dae4SAndroid Build Coastguard Worker  * SEND_TYPE_RETV must also be defined.
159*6236dae4SAndroid Build Coastguard Worker  */
160*6236dae4SAndroid Build Coastguard Worker 
161*6236dae4SAndroid Build Coastguard Worker #define sread(x,y,z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
162*6236dae4SAndroid Build Coastguard Worker                                    (RECV_TYPE_ARG2)(y), \
163*6236dae4SAndroid Build Coastguard Worker                                    (RECV_TYPE_ARG3)(z), \
164*6236dae4SAndroid Build Coastguard Worker                                    (RECV_TYPE_ARG4)(0))
165*6236dae4SAndroid Build Coastguard Worker #else /* HAVE_RECV */
166*6236dae4SAndroid Build Coastguard Worker #ifndef sread
167*6236dae4SAndroid Build Coastguard Worker #error "Missing definition of macro sread!"
168*6236dae4SAndroid Build Coastguard Worker #endif
169*6236dae4SAndroid Build Coastguard Worker #endif /* HAVE_RECV */
170*6236dae4SAndroid Build Coastguard Worker 
171*6236dae4SAndroid Build Coastguard Worker 
172*6236dae4SAndroid Build Coastguard Worker #if defined(__minix)
173*6236dae4SAndroid Build Coastguard Worker /* Minix does not support send on TCP sockets */
174*6236dae4SAndroid Build Coastguard Worker #define swrite(x,y,z) (ssize_t)write((SEND_TYPE_ARG1)(x), \
175*6236dae4SAndroid Build Coastguard Worker                                     (SEND_TYPE_ARG2)(y), \
176*6236dae4SAndroid Build Coastguard Worker                                     (SEND_TYPE_ARG3)(z))
177*6236dae4SAndroid Build Coastguard Worker 
178*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_SEND)
179*6236dae4SAndroid Build Coastguard Worker #define swrite(x,y,z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
180*6236dae4SAndroid Build Coastguard Worker                                     (SEND_QUAL_ARG2 SEND_TYPE_ARG2)(y), \
181*6236dae4SAndroid Build Coastguard Worker                                     (SEND_TYPE_ARG3)(z), \
182*6236dae4SAndroid Build Coastguard Worker                                     (SEND_TYPE_ARG4)(SEND_4TH_ARG))
183*6236dae4SAndroid Build Coastguard Worker #else /* HAVE_SEND */
184*6236dae4SAndroid Build Coastguard Worker #ifndef swrite
185*6236dae4SAndroid Build Coastguard Worker #error "Missing definition of macro swrite!"
186*6236dae4SAndroid Build Coastguard Worker #endif
187*6236dae4SAndroid Build Coastguard Worker #endif /* HAVE_SEND */
188*6236dae4SAndroid Build Coastguard Worker 
189*6236dae4SAndroid Build Coastguard Worker 
190*6236dae4SAndroid Build Coastguard Worker /*
191*6236dae4SAndroid Build Coastguard Worker  * Function-like macro definition used to close a socket.
192*6236dae4SAndroid Build Coastguard Worker  */
193*6236dae4SAndroid Build Coastguard Worker 
194*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_CLOSESOCKET)
195*6236dae4SAndroid Build Coastguard Worker #  define sclose(x)  closesocket((x))
196*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_CLOSESOCKET_CAMEL)
197*6236dae4SAndroid Build Coastguard Worker #  define sclose(x)  CloseSocket((x))
198*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_CLOSE_S)
199*6236dae4SAndroid Build Coastguard Worker #  define sclose(x)  close_s((x))
200*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_LWIPSOCK)
201*6236dae4SAndroid Build Coastguard Worker #  define sclose(x)  lwip_close((x))
202*6236dae4SAndroid Build Coastguard Worker #else
203*6236dae4SAndroid Build Coastguard Worker #  define sclose(x)  close((x))
204*6236dae4SAndroid Build Coastguard Worker #endif
205*6236dae4SAndroid Build Coastguard Worker 
206*6236dae4SAndroid Build Coastguard Worker /*
207*6236dae4SAndroid Build Coastguard Worker  * Stack-independent version of fcntl() on sockets:
208*6236dae4SAndroid Build Coastguard Worker  */
209*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LWIPSOCK)
210*6236dae4SAndroid Build Coastguard Worker #  define sfcntl  lwip_fcntl
211*6236dae4SAndroid Build Coastguard Worker #else
212*6236dae4SAndroid Build Coastguard Worker #  define sfcntl  fcntl
213*6236dae4SAndroid Build Coastguard Worker #endif
214*6236dae4SAndroid Build Coastguard Worker 
215*6236dae4SAndroid Build Coastguard Worker /*
216*6236dae4SAndroid Build Coastguard Worker  * 'bool' stuff compatible with HP-UX headers.
217*6236dae4SAndroid Build Coastguard Worker  */
218*6236dae4SAndroid Build Coastguard Worker 
219*6236dae4SAndroid Build Coastguard Worker #if defined(__hpux) && !defined(HAVE_BOOL_T)
220*6236dae4SAndroid Build Coastguard Worker    typedef int bool;
221*6236dae4SAndroid Build Coastguard Worker #  define false 0
222*6236dae4SAndroid Build Coastguard Worker #  define true 1
223*6236dae4SAndroid Build Coastguard Worker #  define HAVE_BOOL_T
224*6236dae4SAndroid Build Coastguard Worker #endif
225*6236dae4SAndroid Build Coastguard Worker 
226*6236dae4SAndroid Build Coastguard Worker 
227*6236dae4SAndroid Build Coastguard Worker /*
228*6236dae4SAndroid Build Coastguard Worker  * 'bool' exists on platforms with <stdbool.h>, i.e. C99 platforms.
229*6236dae4SAndroid Build Coastguard Worker  * On non-C99 platforms there is no bool, so define an enum for that.
230*6236dae4SAndroid Build Coastguard Worker  * On C99 platforms 'false' and 'true' also exist. Enum uses a
231*6236dae4SAndroid Build Coastguard Worker  * global namespace though, so use bool_false and bool_true.
232*6236dae4SAndroid Build Coastguard Worker  */
233*6236dae4SAndroid Build Coastguard Worker 
234*6236dae4SAndroid Build Coastguard Worker #ifndef HAVE_BOOL_T
235*6236dae4SAndroid Build Coastguard Worker   typedef enum {
236*6236dae4SAndroid Build Coastguard Worker       bool_false = 0,
237*6236dae4SAndroid Build Coastguard Worker       bool_true  = 1
238*6236dae4SAndroid Build Coastguard Worker   } bool;
239*6236dae4SAndroid Build Coastguard Worker 
240*6236dae4SAndroid Build Coastguard Worker /*
241*6236dae4SAndroid Build Coastguard Worker  * Use a define to let 'true' and 'false' use those enums. There
242*6236dae4SAndroid Build Coastguard Worker  * are currently no use of true and false in libcurl proper, but
243*6236dae4SAndroid Build Coastguard Worker  * there are some in the examples. This will cater for any later
244*6236dae4SAndroid Build Coastguard Worker  * code happening to use true and false.
245*6236dae4SAndroid Build Coastguard Worker  */
246*6236dae4SAndroid Build Coastguard Worker #  define false bool_false
247*6236dae4SAndroid Build Coastguard Worker #  define true  bool_true
248*6236dae4SAndroid Build Coastguard Worker #  define HAVE_BOOL_T
249*6236dae4SAndroid Build Coastguard Worker #endif
250*6236dae4SAndroid Build Coastguard Worker 
251*6236dae4SAndroid Build Coastguard Worker /* the type we use for storing a single boolean bit */
252*6236dae4SAndroid Build Coastguard Worker #ifdef _MSC_VER
253*6236dae4SAndroid Build Coastguard Worker typedef bool bit;
254*6236dae4SAndroid Build Coastguard Worker #define BIT(x) bool x
255*6236dae4SAndroid Build Coastguard Worker #else
256*6236dae4SAndroid Build Coastguard Worker typedef unsigned int bit;
257*6236dae4SAndroid Build Coastguard Worker #define BIT(x) bit x:1
258*6236dae4SAndroid Build Coastguard Worker #endif
259*6236dae4SAndroid Build Coastguard Worker 
260*6236dae4SAndroid Build Coastguard Worker /*
261*6236dae4SAndroid Build Coastguard Worker  * Redefine TRUE and FALSE too, to catch current use. With this
262*6236dae4SAndroid Build Coastguard Worker  * change, 'bool found = 1' will give a warning on MIPSPro, but
263*6236dae4SAndroid Build Coastguard Worker  * 'bool found = TRUE' will not. Change tested on IRIX/MIPSPro,
264*6236dae4SAndroid Build Coastguard Worker  * AIX 5.1/Xlc, Tru64 5.1/cc, w/make test too.
265*6236dae4SAndroid Build Coastguard Worker  */
266*6236dae4SAndroid Build Coastguard Worker 
267*6236dae4SAndroid Build Coastguard Worker #ifndef TRUE
268*6236dae4SAndroid Build Coastguard Worker #define TRUE true
269*6236dae4SAndroid Build Coastguard Worker #endif
270*6236dae4SAndroid Build Coastguard Worker #ifndef FALSE
271*6236dae4SAndroid Build Coastguard Worker #define FALSE false
272*6236dae4SAndroid Build Coastguard Worker #endif
273*6236dae4SAndroid Build Coastguard Worker 
274*6236dae4SAndroid Build Coastguard Worker #include "curl_ctype.h"
275*6236dae4SAndroid Build Coastguard Worker 
276*6236dae4SAndroid Build Coastguard Worker 
277*6236dae4SAndroid Build Coastguard Worker /*
278*6236dae4SAndroid Build Coastguard Worker  * Macro used to include code only in debug builds.
279*6236dae4SAndroid Build Coastguard Worker  */
280*6236dae4SAndroid Build Coastguard Worker 
281*6236dae4SAndroid Build Coastguard Worker #ifdef DEBUGBUILD
282*6236dae4SAndroid Build Coastguard Worker #define DEBUGF(x) x
283*6236dae4SAndroid Build Coastguard Worker #else
284*6236dae4SAndroid Build Coastguard Worker #define DEBUGF(x) do { } while(0)
285*6236dae4SAndroid Build Coastguard Worker #endif
286*6236dae4SAndroid Build Coastguard Worker 
287*6236dae4SAndroid Build Coastguard Worker 
288*6236dae4SAndroid Build Coastguard Worker /*
289*6236dae4SAndroid Build Coastguard Worker  * Macro used to include assertion code only in debug builds.
290*6236dae4SAndroid Build Coastguard Worker  */
291*6236dae4SAndroid Build Coastguard Worker 
292*6236dae4SAndroid Build Coastguard Worker #undef DEBUGASSERT
293*6236dae4SAndroid Build Coastguard Worker #if defined(DEBUGBUILD)
294*6236dae4SAndroid Build Coastguard Worker #define DEBUGASSERT(x) assert(x)
295*6236dae4SAndroid Build Coastguard Worker #else
296*6236dae4SAndroid Build Coastguard Worker #define DEBUGASSERT(x) do { } while(0)
297*6236dae4SAndroid Build Coastguard Worker #endif
298*6236dae4SAndroid Build Coastguard Worker 
299*6236dae4SAndroid Build Coastguard Worker 
300*6236dae4SAndroid Build Coastguard Worker /*
301*6236dae4SAndroid Build Coastguard Worker  * Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno
302*6236dae4SAndroid Build Coastguard Worker  * (or equivalent) on this platform to hide platform details to code using it.
303*6236dae4SAndroid Build Coastguard Worker  */
304*6236dae4SAndroid Build Coastguard Worker 
305*6236dae4SAndroid Build Coastguard Worker #ifdef USE_WINSOCK
306*6236dae4SAndroid Build Coastguard Worker #define SOCKERRNO         ((int)WSAGetLastError())
307*6236dae4SAndroid Build Coastguard Worker #define SET_SOCKERRNO(x)  (WSASetLastError((int)(x)))
308*6236dae4SAndroid Build Coastguard Worker #else
309*6236dae4SAndroid Build Coastguard Worker #define SOCKERRNO         (errno)
310*6236dae4SAndroid Build Coastguard Worker #define SET_SOCKERRNO(x)  (errno = (x))
311*6236dae4SAndroid Build Coastguard Worker #endif
312*6236dae4SAndroid Build Coastguard Worker 
313*6236dae4SAndroid Build Coastguard Worker 
314*6236dae4SAndroid Build Coastguard Worker /*
315*6236dae4SAndroid Build Coastguard Worker  * Portable error number symbolic names defined to Winsock error codes.
316*6236dae4SAndroid Build Coastguard Worker  */
317*6236dae4SAndroid Build Coastguard Worker 
318*6236dae4SAndroid Build Coastguard Worker #ifdef USE_WINSOCK
319*6236dae4SAndroid Build Coastguard Worker #undef  EBADF            /* override definition in errno.h */
320*6236dae4SAndroid Build Coastguard Worker #define EBADF            WSAEBADF
321*6236dae4SAndroid Build Coastguard Worker #undef  EINTR            /* override definition in errno.h */
322*6236dae4SAndroid Build Coastguard Worker #define EINTR            WSAEINTR
323*6236dae4SAndroid Build Coastguard Worker #undef  EINVAL           /* override definition in errno.h */
324*6236dae4SAndroid Build Coastguard Worker #define EINVAL           WSAEINVAL
325*6236dae4SAndroid Build Coastguard Worker #undef  EWOULDBLOCK      /* override definition in errno.h */
326*6236dae4SAndroid Build Coastguard Worker #define EWOULDBLOCK      WSAEWOULDBLOCK
327*6236dae4SAndroid Build Coastguard Worker #undef  EINPROGRESS      /* override definition in errno.h */
328*6236dae4SAndroid Build Coastguard Worker #define EINPROGRESS      WSAEINPROGRESS
329*6236dae4SAndroid Build Coastguard Worker #undef  EALREADY         /* override definition in errno.h */
330*6236dae4SAndroid Build Coastguard Worker #define EALREADY         WSAEALREADY
331*6236dae4SAndroid Build Coastguard Worker #undef  ENOTSOCK         /* override definition in errno.h */
332*6236dae4SAndroid Build Coastguard Worker #define ENOTSOCK         WSAENOTSOCK
333*6236dae4SAndroid Build Coastguard Worker #undef  EDESTADDRREQ     /* override definition in errno.h */
334*6236dae4SAndroid Build Coastguard Worker #define EDESTADDRREQ     WSAEDESTADDRREQ
335*6236dae4SAndroid Build Coastguard Worker #undef  EMSGSIZE         /* override definition in errno.h */
336*6236dae4SAndroid Build Coastguard Worker #define EMSGSIZE         WSAEMSGSIZE
337*6236dae4SAndroid Build Coastguard Worker #undef  EPROTOTYPE       /* override definition in errno.h */
338*6236dae4SAndroid Build Coastguard Worker #define EPROTOTYPE       WSAEPROTOTYPE
339*6236dae4SAndroid Build Coastguard Worker #undef  ENOPROTOOPT      /* override definition in errno.h */
340*6236dae4SAndroid Build Coastguard Worker #define ENOPROTOOPT      WSAENOPROTOOPT
341*6236dae4SAndroid Build Coastguard Worker #undef  EPROTONOSUPPORT  /* override definition in errno.h */
342*6236dae4SAndroid Build Coastguard Worker #define EPROTONOSUPPORT  WSAEPROTONOSUPPORT
343*6236dae4SAndroid Build Coastguard Worker #define ESOCKTNOSUPPORT  WSAESOCKTNOSUPPORT
344*6236dae4SAndroid Build Coastguard Worker #undef  EOPNOTSUPP       /* override definition in errno.h */
345*6236dae4SAndroid Build Coastguard Worker #define EOPNOTSUPP       WSAEOPNOTSUPP
346*6236dae4SAndroid Build Coastguard Worker #define EPFNOSUPPORT     WSAEPFNOSUPPORT
347*6236dae4SAndroid Build Coastguard Worker #undef  EAFNOSUPPORT     /* override definition in errno.h */
348*6236dae4SAndroid Build Coastguard Worker #define EAFNOSUPPORT     WSAEAFNOSUPPORT
349*6236dae4SAndroid Build Coastguard Worker #undef  EADDRINUSE       /* override definition in errno.h */
350*6236dae4SAndroid Build Coastguard Worker #define EADDRINUSE       WSAEADDRINUSE
351*6236dae4SAndroid Build Coastguard Worker #undef  EADDRNOTAVAIL    /* override definition in errno.h */
352*6236dae4SAndroid Build Coastguard Worker #define EADDRNOTAVAIL    WSAEADDRNOTAVAIL
353*6236dae4SAndroid Build Coastguard Worker #undef  ENETDOWN         /* override definition in errno.h */
354*6236dae4SAndroid Build Coastguard Worker #define ENETDOWN         WSAENETDOWN
355*6236dae4SAndroid Build Coastguard Worker #undef  ENETUNREACH      /* override definition in errno.h */
356*6236dae4SAndroid Build Coastguard Worker #define ENETUNREACH      WSAENETUNREACH
357*6236dae4SAndroid Build Coastguard Worker #undef  ENETRESET        /* override definition in errno.h */
358*6236dae4SAndroid Build Coastguard Worker #define ENETRESET        WSAENETRESET
359*6236dae4SAndroid Build Coastguard Worker #undef  ECONNABORTED     /* override definition in errno.h */
360*6236dae4SAndroid Build Coastguard Worker #define ECONNABORTED     WSAECONNABORTED
361*6236dae4SAndroid Build Coastguard Worker #undef  ECONNRESET       /* override definition in errno.h */
362*6236dae4SAndroid Build Coastguard Worker #define ECONNRESET       WSAECONNRESET
363*6236dae4SAndroid Build Coastguard Worker #undef  ENOBUFS          /* override definition in errno.h */
364*6236dae4SAndroid Build Coastguard Worker #define ENOBUFS          WSAENOBUFS
365*6236dae4SAndroid Build Coastguard Worker #undef  EISCONN          /* override definition in errno.h */
366*6236dae4SAndroid Build Coastguard Worker #define EISCONN          WSAEISCONN
367*6236dae4SAndroid Build Coastguard Worker #undef  ENOTCONN         /* override definition in errno.h */
368*6236dae4SAndroid Build Coastguard Worker #define ENOTCONN         WSAENOTCONN
369*6236dae4SAndroid Build Coastguard Worker #define ESHUTDOWN        WSAESHUTDOWN
370*6236dae4SAndroid Build Coastguard Worker #define ETOOMANYREFS     WSAETOOMANYREFS
371*6236dae4SAndroid Build Coastguard Worker #undef  ETIMEDOUT        /* override definition in errno.h */
372*6236dae4SAndroid Build Coastguard Worker #define ETIMEDOUT        WSAETIMEDOUT
373*6236dae4SAndroid Build Coastguard Worker #undef  ECONNREFUSED     /* override definition in errno.h */
374*6236dae4SAndroid Build Coastguard Worker #define ECONNREFUSED     WSAECONNREFUSED
375*6236dae4SAndroid Build Coastguard Worker #undef  ELOOP            /* override definition in errno.h */
376*6236dae4SAndroid Build Coastguard Worker #define ELOOP            WSAELOOP
377*6236dae4SAndroid Build Coastguard Worker #ifndef ENAMETOOLONG     /* possible previous definition in errno.h */
378*6236dae4SAndroid Build Coastguard Worker #define ENAMETOOLONG     WSAENAMETOOLONG
379*6236dae4SAndroid Build Coastguard Worker #endif
380*6236dae4SAndroid Build Coastguard Worker #define EHOSTDOWN        WSAEHOSTDOWN
381*6236dae4SAndroid Build Coastguard Worker #undef  EHOSTUNREACH     /* override definition in errno.h */
382*6236dae4SAndroid Build Coastguard Worker #define EHOSTUNREACH     WSAEHOSTUNREACH
383*6236dae4SAndroid Build Coastguard Worker #ifndef ENOTEMPTY        /* possible previous definition in errno.h */
384*6236dae4SAndroid Build Coastguard Worker #define ENOTEMPTY        WSAENOTEMPTY
385*6236dae4SAndroid Build Coastguard Worker #endif
386*6236dae4SAndroid Build Coastguard Worker #define EPROCLIM         WSAEPROCLIM
387*6236dae4SAndroid Build Coastguard Worker #define EUSERS           WSAEUSERS
388*6236dae4SAndroid Build Coastguard Worker #define EDQUOT           WSAEDQUOT
389*6236dae4SAndroid Build Coastguard Worker #define ESTALE           WSAESTALE
390*6236dae4SAndroid Build Coastguard Worker #define EREMOTE          WSAEREMOTE
391*6236dae4SAndroid Build Coastguard Worker #endif
392*6236dae4SAndroid Build Coastguard Worker 
393*6236dae4SAndroid Build Coastguard Worker /*
394*6236dae4SAndroid Build Coastguard Worker  * Macro argv_item_t hides platform details to code using it.
395*6236dae4SAndroid Build Coastguard Worker  */
396*6236dae4SAndroid Build Coastguard Worker 
397*6236dae4SAndroid Build Coastguard Worker #ifdef __VMS
398*6236dae4SAndroid Build Coastguard Worker #define argv_item_t  __char_ptr32
399*6236dae4SAndroid Build Coastguard Worker #elif defined(_UNICODE)
400*6236dae4SAndroid Build Coastguard Worker #define argv_item_t wchar_t *
401*6236dae4SAndroid Build Coastguard Worker #else
402*6236dae4SAndroid Build Coastguard Worker #define argv_item_t  char *
403*6236dae4SAndroid Build Coastguard Worker #endif
404*6236dae4SAndroid Build Coastguard Worker 
405*6236dae4SAndroid Build Coastguard Worker 
406*6236dae4SAndroid Build Coastguard Worker /*
407*6236dae4SAndroid Build Coastguard Worker  * We use this ZERO_NULL to avoid picky compiler warnings,
408*6236dae4SAndroid Build Coastguard Worker  * when assigning a NULL pointer to a function pointer var.
409*6236dae4SAndroid Build Coastguard Worker  */
410*6236dae4SAndroid Build Coastguard Worker 
411*6236dae4SAndroid Build Coastguard Worker #define ZERO_NULL 0
412*6236dae4SAndroid Build Coastguard Worker 
413*6236dae4SAndroid Build Coastguard Worker 
414*6236dae4SAndroid Build Coastguard Worker #endif /* HEADER_CURL_SETUP_ONCE_H */
415