1*6236dae4SAndroid Build Coastguard Worker /***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _
3*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| |
4*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___
6*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker *
8*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker *
10*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker *
14*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker *
18*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker *
21*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker *
23*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/
24*6236dae4SAndroid Build Coastguard Worker
25*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_FCNTL_O_NONBLOCK
26*6236dae4SAndroid Build Coastguard Worker /* headers for FCNTL_O_NONBLOCK test */
27*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h>
28*6236dae4SAndroid Build Coastguard Worker #include <unistd.h>
29*6236dae4SAndroid Build Coastguard Worker #include <fcntl.h>
30*6236dae4SAndroid Build Coastguard Worker /* */
31*6236dae4SAndroid Build Coastguard Worker #if defined(sun) || defined(__sun__) || \
32*6236dae4SAndroid Build Coastguard Worker defined(__SUNPRO_C) || defined(__SUNPRO_CC)
33*6236dae4SAndroid Build Coastguard Worker # if defined(__SVR4) || defined(__srv4__)
34*6236dae4SAndroid Build Coastguard Worker # define PLATFORM_SOLARIS
35*6236dae4SAndroid Build Coastguard Worker # else
36*6236dae4SAndroid Build Coastguard Worker # define PLATFORM_SUNOS4
37*6236dae4SAndroid Build Coastguard Worker # endif
38*6236dae4SAndroid Build Coastguard Worker #endif
39*6236dae4SAndroid Build Coastguard Worker #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
40*6236dae4SAndroid Build Coastguard Worker # define PLATFORM_AIX_V3
41*6236dae4SAndroid Build Coastguard Worker #endif
42*6236dae4SAndroid Build Coastguard Worker /* */
43*6236dae4SAndroid Build Coastguard Worker #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3)
44*6236dae4SAndroid Build Coastguard Worker #error "O_NONBLOCK does not work on this platform"
45*6236dae4SAndroid Build Coastguard Worker #endif
46*6236dae4SAndroid Build Coastguard Worker
main(void)47*6236dae4SAndroid Build Coastguard Worker int main(void)
48*6236dae4SAndroid Build Coastguard Worker {
49*6236dae4SAndroid Build Coastguard Worker /* O_NONBLOCK source test */
50*6236dae4SAndroid Build Coastguard Worker int flags = 0;
51*6236dae4SAndroid Build Coastguard Worker if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
52*6236dae4SAndroid Build Coastguard Worker return 1;
53*6236dae4SAndroid Build Coastguard Worker ;
54*6236dae4SAndroid Build Coastguard Worker return 0;
55*6236dae4SAndroid Build Coastguard Worker }
56*6236dae4SAndroid Build Coastguard Worker #endif
57*6236dae4SAndroid Build Coastguard Worker
58*6236dae4SAndroid Build Coastguard Worker /* tests for gethostbyname_r */
59*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
60*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
61*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
62*6236dae4SAndroid Build Coastguard Worker # define _REENTRANT
63*6236dae4SAndroid Build Coastguard Worker /* no idea whether _REENTRANT is always set, just invent a new flag */
64*6236dae4SAndroid Build Coastguard Worker # define TEST_GETHOSTBYFOO_REENTRANT
65*6236dae4SAndroid Build Coastguard Worker #endif
66*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_GETHOSTBYNAME_R_3) || \
67*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_5) || \
68*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_6) || \
69*6236dae4SAndroid Build Coastguard Worker defined(TEST_GETHOSTBYFOO_REENTRANT)
70*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h>
71*6236dae4SAndroid Build Coastguard Worker #include <netdb.h>
main(void)72*6236dae4SAndroid Build Coastguard Worker int main(void)
73*6236dae4SAndroid Build Coastguard Worker {
74*6236dae4SAndroid Build Coastguard Worker char *address = "example.com";
75*6236dae4SAndroid Build Coastguard Worker int length = 0;
76*6236dae4SAndroid Build Coastguard Worker int type = 0;
77*6236dae4SAndroid Build Coastguard Worker struct hostent h;
78*6236dae4SAndroid Build Coastguard Worker int rc = 0;
79*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_GETHOSTBYNAME_R_3) || \
80*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
81*6236dae4SAndroid Build Coastguard Worker struct hostent_data hdata;
82*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_GETHOSTBYNAME_R_5) || \
83*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
84*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_6) || \
85*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
86*6236dae4SAndroid Build Coastguard Worker char buffer[8192];
87*6236dae4SAndroid Build Coastguard Worker int h_errnop;
88*6236dae4SAndroid Build Coastguard Worker struct hostent *hp;
89*6236dae4SAndroid Build Coastguard Worker #endif
90*6236dae4SAndroid Build Coastguard Worker
91*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_GETHOSTBYNAME_R_3) || \
92*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
93*6236dae4SAndroid Build Coastguard Worker rc = gethostbyname_r(address, &h, &hdata);
94*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_GETHOSTBYNAME_R_5) || \
95*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
96*6236dae4SAndroid Build Coastguard Worker rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop);
97*6236dae4SAndroid Build Coastguard Worker (void)hp; /* not used for test */
98*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_GETHOSTBYNAME_R_6) || \
99*6236dae4SAndroid Build Coastguard Worker defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
100*6236dae4SAndroid Build Coastguard Worker rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop);
101*6236dae4SAndroid Build Coastguard Worker #endif
102*6236dae4SAndroid Build Coastguard Worker
103*6236dae4SAndroid Build Coastguard Worker (void)length;
104*6236dae4SAndroid Build Coastguard Worker (void)type;
105*6236dae4SAndroid Build Coastguard Worker (void)rc;
106*6236dae4SAndroid Build Coastguard Worker return 0;
107*6236dae4SAndroid Build Coastguard Worker }
108*6236dae4SAndroid Build Coastguard Worker #endif
109*6236dae4SAndroid Build Coastguard Worker
110*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_IN_ADDR_T
111*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h>
112*6236dae4SAndroid Build Coastguard Worker #include <sys/socket.h>
113*6236dae4SAndroid Build Coastguard Worker #include <arpa/inet.h>
main(void)114*6236dae4SAndroid Build Coastguard Worker int main(void)
115*6236dae4SAndroid Build Coastguard Worker {
116*6236dae4SAndroid Build Coastguard Worker if((in_addr_t *) 0)
117*6236dae4SAndroid Build Coastguard Worker return 0;
118*6236dae4SAndroid Build Coastguard Worker if(sizeof(in_addr_t))
119*6236dae4SAndroid Build Coastguard Worker return 0;
120*6236dae4SAndroid Build Coastguard Worker ;
121*6236dae4SAndroid Build Coastguard Worker return 0;
122*6236dae4SAndroid Build Coastguard Worker }
123*6236dae4SAndroid Build Coastguard Worker #endif
124*6236dae4SAndroid Build Coastguard Worker
125*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_BOOL_T
126*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TYPES_H
127*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h>
128*6236dae4SAndroid Build Coastguard Worker #endif
129*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_STDBOOL_H
130*6236dae4SAndroid Build Coastguard Worker #include <stdbool.h>
131*6236dae4SAndroid Build Coastguard Worker #endif
main(void)132*6236dae4SAndroid Build Coastguard Worker int main(void)
133*6236dae4SAndroid Build Coastguard Worker {
134*6236dae4SAndroid Build Coastguard Worker if(sizeof(bool *))
135*6236dae4SAndroid Build Coastguard Worker return 0;
136*6236dae4SAndroid Build Coastguard Worker ;
137*6236dae4SAndroid Build Coastguard Worker return 0;
138*6236dae4SAndroid Build Coastguard Worker }
139*6236dae4SAndroid Build Coastguard Worker #endif
140*6236dae4SAndroid Build Coastguard Worker
141*6236dae4SAndroid Build Coastguard Worker #ifdef STDC_HEADERS
142*6236dae4SAndroid Build Coastguard Worker #include <stdlib.h>
143*6236dae4SAndroid Build Coastguard Worker #include <stdarg.h>
144*6236dae4SAndroid Build Coastguard Worker #include <string.h>
145*6236dae4SAndroid Build Coastguard Worker #include <float.h>
main(void)146*6236dae4SAndroid Build Coastguard Worker int main(void) { return 0; }
147*6236dae4SAndroid Build Coastguard Worker #endif
148*6236dae4SAndroid Build Coastguard Worker
149*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_FILE_OFFSET_BITS
150*6236dae4SAndroid Build Coastguard Worker #ifdef _FILE_OFFSET_BITS
151*6236dae4SAndroid Build Coastguard Worker #undef _FILE_OFFSET_BITS
152*6236dae4SAndroid Build Coastguard Worker #endif
153*6236dae4SAndroid Build Coastguard Worker #define _FILE_OFFSET_BITS 64
154*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h>
155*6236dae4SAndroid Build Coastguard Worker /* Check that off_t can represent 2**63 - 1 correctly.
156*6236dae4SAndroid Build Coastguard Worker We cannot simply define LARGE_OFF_T to be 9223372036854775807,
157*6236dae4SAndroid Build Coastguard Worker since some C++ compilers masquerading as C compilers
158*6236dae4SAndroid Build Coastguard Worker incorrectly reject 9223372036854775807. */
159*6236dae4SAndroid Build Coastguard Worker #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
160*6236dae4SAndroid Build Coastguard Worker int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
161*6236dae4SAndroid Build Coastguard Worker && LARGE_OFF_T % 2147483647 == 1)
162*6236dae4SAndroid Build Coastguard Worker ? 1 : -1];
main(void)163*6236dae4SAndroid Build Coastguard Worker int main(void) { return 0; }
164*6236dae4SAndroid Build Coastguard Worker #endif
165*6236dae4SAndroid Build Coastguard Worker
166*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_IOCTLSOCKET
167*6236dae4SAndroid Build Coastguard Worker /* includes start */
168*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
169*6236dae4SAndroid Build Coastguard Worker # include <winsock2.h>
170*6236dae4SAndroid Build Coastguard Worker #endif
main(void)171*6236dae4SAndroid Build Coastguard Worker int main(void)
172*6236dae4SAndroid Build Coastguard Worker {
173*6236dae4SAndroid Build Coastguard Worker /* ioctlsocket source code */
174*6236dae4SAndroid Build Coastguard Worker int socket;
175*6236dae4SAndroid Build Coastguard Worker unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
176*6236dae4SAndroid Build Coastguard Worker ;
177*6236dae4SAndroid Build Coastguard Worker return 0;
178*6236dae4SAndroid Build Coastguard Worker }
179*6236dae4SAndroid Build Coastguard Worker
180*6236dae4SAndroid Build Coastguard Worker #endif
181*6236dae4SAndroid Build Coastguard Worker
182*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_IOCTLSOCKET_CAMEL
183*6236dae4SAndroid Build Coastguard Worker /* includes start */
184*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
185*6236dae4SAndroid Build Coastguard Worker # include <winsock2.h>
186*6236dae4SAndroid Build Coastguard Worker #endif
main(void)187*6236dae4SAndroid Build Coastguard Worker int main(void)
188*6236dae4SAndroid Build Coastguard Worker {
189*6236dae4SAndroid Build Coastguard Worker /* IoctlSocket source code */
190*6236dae4SAndroid Build Coastguard Worker if(0 != IoctlSocket(0, 0, 0))
191*6236dae4SAndroid Build Coastguard Worker return 1;
192*6236dae4SAndroid Build Coastguard Worker ;
193*6236dae4SAndroid Build Coastguard Worker return 0;
194*6236dae4SAndroid Build Coastguard Worker }
195*6236dae4SAndroid Build Coastguard Worker #endif
196*6236dae4SAndroid Build Coastguard Worker
197*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
198*6236dae4SAndroid Build Coastguard Worker /* includes start */
199*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
200*6236dae4SAndroid Build Coastguard Worker # include <winsock2.h>
201*6236dae4SAndroid Build Coastguard Worker #endif
main(void)202*6236dae4SAndroid Build Coastguard Worker int main(void)
203*6236dae4SAndroid Build Coastguard Worker {
204*6236dae4SAndroid Build Coastguard Worker /* IoctlSocket source code */
205*6236dae4SAndroid Build Coastguard Worker long flags = 0;
206*6236dae4SAndroid Build Coastguard Worker if(0 != IoctlSocket(0, FIONBIO, &flags))
207*6236dae4SAndroid Build Coastguard Worker return 1;
208*6236dae4SAndroid Build Coastguard Worker ;
209*6236dae4SAndroid Build Coastguard Worker return 0;
210*6236dae4SAndroid Build Coastguard Worker }
211*6236dae4SAndroid Build Coastguard Worker #endif
212*6236dae4SAndroid Build Coastguard Worker
213*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_IOCTLSOCKET_FIONBIO
214*6236dae4SAndroid Build Coastguard Worker /* includes start */
215*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
216*6236dae4SAndroid Build Coastguard Worker # include <winsock2.h>
217*6236dae4SAndroid Build Coastguard Worker #endif
main(void)218*6236dae4SAndroid Build Coastguard Worker int main(void)
219*6236dae4SAndroid Build Coastguard Worker {
220*6236dae4SAndroid Build Coastguard Worker unsigned long flags = 0;
221*6236dae4SAndroid Build Coastguard Worker if(0 != ioctlsocket(0, FIONBIO, &flags))
222*6236dae4SAndroid Build Coastguard Worker return 1;
223*6236dae4SAndroid Build Coastguard Worker ;
224*6236dae4SAndroid Build Coastguard Worker return 0;
225*6236dae4SAndroid Build Coastguard Worker }
226*6236dae4SAndroid Build Coastguard Worker #endif
227*6236dae4SAndroid Build Coastguard Worker
228*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_IOCTL_FIONBIO
229*6236dae4SAndroid Build Coastguard Worker /* headers for FIONBIO test */
230*6236dae4SAndroid Build Coastguard Worker /* includes start */
231*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TYPES_H
232*6236dae4SAndroid Build Coastguard Worker # include <sys/types.h>
233*6236dae4SAndroid Build Coastguard Worker #endif
234*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_UNISTD_H
235*6236dae4SAndroid Build Coastguard Worker # include <unistd.h>
236*6236dae4SAndroid Build Coastguard Worker #endif
237*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_SOCKET_H
238*6236dae4SAndroid Build Coastguard Worker # include <sys/socket.h>
239*6236dae4SAndroid Build Coastguard Worker #endif
240*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_IOCTL_H
241*6236dae4SAndroid Build Coastguard Worker # include <sys/ioctl.h>
242*6236dae4SAndroid Build Coastguard Worker #endif
243*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_STROPTS_H
244*6236dae4SAndroid Build Coastguard Worker # include <stropts.h>
245*6236dae4SAndroid Build Coastguard Worker #endif
main(void)246*6236dae4SAndroid Build Coastguard Worker int main(void)
247*6236dae4SAndroid Build Coastguard Worker {
248*6236dae4SAndroid Build Coastguard Worker int flags = 0;
249*6236dae4SAndroid Build Coastguard Worker if(0 != ioctl(0, FIONBIO, &flags))
250*6236dae4SAndroid Build Coastguard Worker return 1;
251*6236dae4SAndroid Build Coastguard Worker ;
252*6236dae4SAndroid Build Coastguard Worker return 0;
253*6236dae4SAndroid Build Coastguard Worker }
254*6236dae4SAndroid Build Coastguard Worker #endif
255*6236dae4SAndroid Build Coastguard Worker
256*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_IOCTL_SIOCGIFADDR
257*6236dae4SAndroid Build Coastguard Worker /* headers for FIONBIO test */
258*6236dae4SAndroid Build Coastguard Worker /* includes start */
259*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TYPES_H
260*6236dae4SAndroid Build Coastguard Worker # include <sys/types.h>
261*6236dae4SAndroid Build Coastguard Worker #endif
262*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_UNISTD_H
263*6236dae4SAndroid Build Coastguard Worker # include <unistd.h>
264*6236dae4SAndroid Build Coastguard Worker #endif
265*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_SOCKET_H
266*6236dae4SAndroid Build Coastguard Worker # include <sys/socket.h>
267*6236dae4SAndroid Build Coastguard Worker #endif
268*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_IOCTL_H
269*6236dae4SAndroid Build Coastguard Worker # include <sys/ioctl.h>
270*6236dae4SAndroid Build Coastguard Worker #endif
271*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_STROPTS_H
272*6236dae4SAndroid Build Coastguard Worker # include <stropts.h>
273*6236dae4SAndroid Build Coastguard Worker #endif
274*6236dae4SAndroid Build Coastguard Worker #include <net/if.h>
main(void)275*6236dae4SAndroid Build Coastguard Worker int main(void)
276*6236dae4SAndroid Build Coastguard Worker {
277*6236dae4SAndroid Build Coastguard Worker struct ifreq ifr;
278*6236dae4SAndroid Build Coastguard Worker if(0 != ioctl(0, SIOCGIFADDR, &ifr))
279*6236dae4SAndroid Build Coastguard Worker return 1;
280*6236dae4SAndroid Build Coastguard Worker ;
281*6236dae4SAndroid Build Coastguard Worker return 0;
282*6236dae4SAndroid Build Coastguard Worker }
283*6236dae4SAndroid Build Coastguard Worker #endif
284*6236dae4SAndroid Build Coastguard Worker
285*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SETSOCKOPT_SO_NONBLOCK
286*6236dae4SAndroid Build Coastguard Worker /* includes start */
287*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
288*6236dae4SAndroid Build Coastguard Worker # include <winsock2.h>
289*6236dae4SAndroid Build Coastguard Worker #endif
290*6236dae4SAndroid Build Coastguard Worker /* includes start */
291*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TYPES_H
292*6236dae4SAndroid Build Coastguard Worker # include <sys/types.h>
293*6236dae4SAndroid Build Coastguard Worker #endif
294*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_SOCKET_H
295*6236dae4SAndroid Build Coastguard Worker # include <sys/socket.h>
296*6236dae4SAndroid Build Coastguard Worker #endif
297*6236dae4SAndroid Build Coastguard Worker /* includes end */
main(void)298*6236dae4SAndroid Build Coastguard Worker int main(void)
299*6236dae4SAndroid Build Coastguard Worker {
300*6236dae4SAndroid Build Coastguard Worker if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
301*6236dae4SAndroid Build Coastguard Worker return 1;
302*6236dae4SAndroid Build Coastguard Worker ;
303*6236dae4SAndroid Build Coastguard Worker return 0;
304*6236dae4SAndroid Build Coastguard Worker }
305*6236dae4SAndroid Build Coastguard Worker #endif
306*6236dae4SAndroid Build Coastguard Worker
307*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_GLIBC_STRERROR_R
308*6236dae4SAndroid Build Coastguard Worker #include <string.h>
309*6236dae4SAndroid Build Coastguard Worker #include <errno.h>
310*6236dae4SAndroid Build Coastguard Worker
check(char c)311*6236dae4SAndroid Build Coastguard Worker void check(char c) {}
312*6236dae4SAndroid Build Coastguard Worker
main(void)313*6236dae4SAndroid Build Coastguard Worker int main(void)
314*6236dae4SAndroid Build Coastguard Worker {
315*6236dae4SAndroid Build Coastguard Worker char buffer[1024];
316*6236dae4SAndroid Build Coastguard Worker /* This will not compile if strerror_r does not return a char* */
317*6236dae4SAndroid Build Coastguard Worker check(strerror_r(EACCES, buffer, sizeof(buffer))[0]);
318*6236dae4SAndroid Build Coastguard Worker return 0;
319*6236dae4SAndroid Build Coastguard Worker }
320*6236dae4SAndroid Build Coastguard Worker #endif
321*6236dae4SAndroid Build Coastguard Worker
322*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_POSIX_STRERROR_R
323*6236dae4SAndroid Build Coastguard Worker #include <string.h>
324*6236dae4SAndroid Build Coastguard Worker #include <errno.h>
325*6236dae4SAndroid Build Coastguard Worker
326*6236dae4SAndroid Build Coastguard Worker /* Float, because a pointer cannot be implicitly cast to float */
check(float f)327*6236dae4SAndroid Build Coastguard Worker void check(float f) {}
328*6236dae4SAndroid Build Coastguard Worker
main(void)329*6236dae4SAndroid Build Coastguard Worker int main(void)
330*6236dae4SAndroid Build Coastguard Worker {
331*6236dae4SAndroid Build Coastguard Worker char buffer[1024];
332*6236dae4SAndroid Build Coastguard Worker /* This will not compile if strerror_r does not return an int */
333*6236dae4SAndroid Build Coastguard Worker check(strerror_r(EACCES, buffer, sizeof(buffer)));
334*6236dae4SAndroid Build Coastguard Worker return 0;
335*6236dae4SAndroid Build Coastguard Worker }
336*6236dae4SAndroid Build Coastguard Worker #endif
337*6236dae4SAndroid Build Coastguard Worker
338*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_FSETXATTR_6
339*6236dae4SAndroid Build Coastguard Worker #include <sys/xattr.h> /* header from libc, not from libattr */
main(void)340*6236dae4SAndroid Build Coastguard Worker int main(void)
341*6236dae4SAndroid Build Coastguard Worker {
342*6236dae4SAndroid Build Coastguard Worker fsetxattr(0, 0, 0, 0, 0, 0);
343*6236dae4SAndroid Build Coastguard Worker return 0;
344*6236dae4SAndroid Build Coastguard Worker }
345*6236dae4SAndroid Build Coastguard Worker #endif
346*6236dae4SAndroid Build Coastguard Worker
347*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_FSETXATTR_5
348*6236dae4SAndroid Build Coastguard Worker #include <sys/xattr.h> /* header from libc, not from libattr */
main(void)349*6236dae4SAndroid Build Coastguard Worker int main(void)
350*6236dae4SAndroid Build Coastguard Worker {
351*6236dae4SAndroid Build Coastguard Worker fsetxattr(0, 0, 0, 0, 0);
352*6236dae4SAndroid Build Coastguard Worker return 0;
353*6236dae4SAndroid Build Coastguard Worker }
354*6236dae4SAndroid Build Coastguard Worker #endif
355*6236dae4SAndroid Build Coastguard Worker
356*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_CLOCK_GETTIME_MONOTONIC
357*6236dae4SAndroid Build Coastguard Worker #include <time.h>
main(void)358*6236dae4SAndroid Build Coastguard Worker int main(void)
359*6236dae4SAndroid Build Coastguard Worker {
360*6236dae4SAndroid Build Coastguard Worker struct timespec ts = {0, 0};
361*6236dae4SAndroid Build Coastguard Worker clock_gettime(CLOCK_MONOTONIC, &ts);
362*6236dae4SAndroid Build Coastguard Worker return 0;
363*6236dae4SAndroid Build Coastguard Worker }
364*6236dae4SAndroid Build Coastguard Worker #endif
365*6236dae4SAndroid Build Coastguard Worker
366*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_BUILTIN_AVAILABLE
main(void)367*6236dae4SAndroid Build Coastguard Worker int main(void)
368*6236dae4SAndroid Build Coastguard Worker {
369*6236dae4SAndroid Build Coastguard Worker if(__builtin_available(macOS 10.12, iOS 5.0, *)) {}
370*6236dae4SAndroid Build Coastguard Worker return 0;
371*6236dae4SAndroid Build Coastguard Worker }
372*6236dae4SAndroid Build Coastguard Worker #endif
373*6236dae4SAndroid Build Coastguard Worker
374*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_ATOMIC
375*6236dae4SAndroid Build Coastguard Worker /* includes start */
376*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TYPES_H
377*6236dae4SAndroid Build Coastguard Worker # include <sys/types.h>
378*6236dae4SAndroid Build Coastguard Worker #endif
379*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_UNISTD_H
380*6236dae4SAndroid Build Coastguard Worker # include <unistd.h>
381*6236dae4SAndroid Build Coastguard Worker #endif
382*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_STDATOMIC_H
383*6236dae4SAndroid Build Coastguard Worker # include <stdatomic.h>
384*6236dae4SAndroid Build Coastguard Worker #endif
385*6236dae4SAndroid Build Coastguard Worker /* includes end */
386*6236dae4SAndroid Build Coastguard Worker
main(void)387*6236dae4SAndroid Build Coastguard Worker int main(void)
388*6236dae4SAndroid Build Coastguard Worker {
389*6236dae4SAndroid Build Coastguard Worker _Atomic int i = 1;
390*6236dae4SAndroid Build Coastguard Worker i = 0; /* Force an atomic-write operation. */
391*6236dae4SAndroid Build Coastguard Worker return i;
392*6236dae4SAndroid Build Coastguard Worker }
393*6236dae4SAndroid Build Coastguard Worker #endif
394*6236dae4SAndroid Build Coastguard Worker
395*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_WIN32_WINNT
396*6236dae4SAndroid Build Coastguard Worker /* includes start */
397*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
398*6236dae4SAndroid Build Coastguard Worker # ifndef NOGDI
399*6236dae4SAndroid Build Coastguard Worker # define NOGDI
400*6236dae4SAndroid Build Coastguard Worker # endif
401*6236dae4SAndroid Build Coastguard Worker # include <windows.h>
402*6236dae4SAndroid Build Coastguard Worker #endif
403*6236dae4SAndroid Build Coastguard Worker /* includes end */
404*6236dae4SAndroid Build Coastguard Worker
405*6236dae4SAndroid Build Coastguard Worker #define enquote(x) #x
406*6236dae4SAndroid Build Coastguard Worker #define expand(x) enquote(x)
407*6236dae4SAndroid Build Coastguard Worker #pragma message("_WIN32_WINNT=" expand(_WIN32_WINNT))
408*6236dae4SAndroid Build Coastguard Worker
main(void)409*6236dae4SAndroid Build Coastguard Worker int main(void)
410*6236dae4SAndroid Build Coastguard Worker {
411*6236dae4SAndroid Build Coastguard Worker return 0;
412*6236dae4SAndroid Build Coastguard Worker }
413*6236dae4SAndroid Build Coastguard Worker #endif
414