Annotation of embedaddon/curl/CMake/CurlTests.c, revision 1.1.1.1
1.1 misho 1: /***************************************************************************
2: * _ _ ____ _
3: * Project ___| | | | _ \| |
4: * / __| | | | |_) | |
5: * | (__| |_| | _ <| |___
6: * \___|\___/|_| \_\_____|
7: *
8: * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
9: *
10: * This software is licensed as described in the file COPYING, which
11: * you should have received as part of this distribution. The terms
12: * are also available at https://curl.haxx.se/docs/copyright.html.
13: *
14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15: * copies of the Software, and permit persons to whom the Software is
16: * furnished to do so, under the terms of the COPYING file.
17: *
18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19: * KIND, either express or implied.
20: *
21: ***************************************************************************/
22: #ifdef TIME_WITH_SYS_TIME
23: /* Time with sys/time test */
24:
25: #include <sys/types.h>
26: #include <sys/time.h>
27: #include <time.h>
28:
29: int
30: main ()
31: {
32: if ((struct tm *) 0)
33: return 0;
34: ;
35: return 0;
36: }
37:
38: #endif
39:
40: #ifdef HAVE_FCNTL_O_NONBLOCK
41:
42: /* headers for FCNTL_O_NONBLOCK test */
43: #include <sys/types.h>
44: #include <unistd.h>
45: #include <fcntl.h>
46: /* */
47: #if defined(sun) || defined(__sun__) || \
48: defined(__SUNPRO_C) || defined(__SUNPRO_CC)
49: # if defined(__SVR4) || defined(__srv4__)
50: # define PLATFORM_SOLARIS
51: # else
52: # define PLATFORM_SUNOS4
53: # endif
54: #endif
55: #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
56: # define PLATFORM_AIX_V3
57: #endif
58: /* */
59: #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
60: #error "O_NONBLOCK does not work on this platform"
61: #endif
62:
63: int
64: main ()
65: {
66: /* O_NONBLOCK source test */
67: int flags = 0;
68: if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
69: return 1;
70: return 0;
71: }
72: #endif
73:
74: /* tests for gethostbyaddr_r or gethostbyname_r */
75: #if defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
76: defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
77: defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
78: defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
79: defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
80: defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
81: # define _REENTRANT
82: /* no idea whether _REENTRANT is always set, just invent a new flag */
83: # define TEST_GETHOSTBYFOO_REENTRANT
84: #endif
85: #if defined(HAVE_GETHOSTBYADDR_R_5) || \
86: defined(HAVE_GETHOSTBYADDR_R_7) || \
87: defined(HAVE_GETHOSTBYADDR_R_8) || \
88: defined(HAVE_GETHOSTBYNAME_R_3) || \
89: defined(HAVE_GETHOSTBYNAME_R_5) || \
90: defined(HAVE_GETHOSTBYNAME_R_6) || \
91: defined(TEST_GETHOSTBYFOO_REENTRANT)
92: #include <sys/types.h>
93: #include <netdb.h>
94: int main(void)
95: {
96: char *address = "example.com";
97: int length = 0;
98: int type = 0;
99: struct hostent h;
100: int rc = 0;
101: #if defined(HAVE_GETHOSTBYADDR_R_5) || \
102: defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
103: \
104: defined(HAVE_GETHOSTBYNAME_R_3) || \
105: defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
106: struct hostent_data hdata;
107: #elif defined(HAVE_GETHOSTBYADDR_R_7) || \
108: defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
109: defined(HAVE_GETHOSTBYADDR_R_8) || \
110: defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
111: \
112: defined(HAVE_GETHOSTBYNAME_R_5) || \
113: defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
114: defined(HAVE_GETHOSTBYNAME_R_6) || \
115: defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
116: char buffer[8192];
117: int h_errnop;
118: struct hostent *hp;
119: #endif
120:
121: #ifndef gethostbyaddr_r
122: (void)gethostbyaddr_r;
123: #endif
124:
125: #if defined(HAVE_GETHOSTBYADDR_R_5) || \
126: defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT)
127: rc = gethostbyaddr_r(address, length, type, &h, &hdata);
128: (void)rc;
129: #elif defined(HAVE_GETHOSTBYADDR_R_7) || \
130: defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT)
131: hp = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &h_errnop);
132: (void)hp;
133: #elif defined(HAVE_GETHOSTBYADDR_R_8) || \
134: defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT)
135: rc = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &hp, &h_errnop);
136: (void)rc;
137: #endif
138:
139: #if defined(HAVE_GETHOSTBYNAME_R_3) || \
140: defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
141: rc = gethostbyname_r(address, &h, &hdata);
142: #elif defined(HAVE_GETHOSTBYNAME_R_5) || \
143: defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
144: rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop);
145: (void)hp; /* not used for test */
146: #elif defined(HAVE_GETHOSTBYNAME_R_6) || \
147: defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
148: rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop);
149: #endif
150:
151: (void)length;
152: (void)type;
153: (void)rc;
154: return 0;
155: }
156: #endif
157:
158: #ifdef HAVE_SOCKLEN_T
159: #ifdef _WIN32
160: #include <ws2tcpip.h>
161: #else
162: #include <sys/types.h>
163: #include <sys/socket.h>
164: #endif
165: int
166: main ()
167: {
168: if ((socklen_t *) 0)
169: return 0;
170: if (sizeof (socklen_t))
171: return 0;
172: ;
173: return 0;
174: }
175: #endif
176: #ifdef HAVE_IN_ADDR_T
177: #include <sys/types.h>
178: #include <sys/socket.h>
179: #include <arpa/inet.h>
180:
181: int
182: main ()
183: {
184: if ((in_addr_t *) 0)
185: return 0;
186: if (sizeof (in_addr_t))
187: return 0;
188: ;
189: return 0;
190: }
191: #endif
192:
193: #ifdef HAVE_BOOL_T
194: #ifdef HAVE_SYS_TYPES_H
195: #include <sys/types.h>
196: #endif
197: #ifdef HAVE_STDBOOL_H
198: #include <stdbool.h>
199: #endif
200: int
201: main ()
202: {
203: if (sizeof (bool *) )
204: return 0;
205: ;
206: return 0;
207: }
208: #endif
209:
210: #ifdef STDC_HEADERS
211: #include <stdlib.h>
212: #include <stdarg.h>
213: #include <string.h>
214: #include <float.h>
215: int main() { return 0; }
216: #endif
217: #ifdef RETSIGTYPE_TEST
218: #include <sys/types.h>
219: #include <signal.h>
220: #ifdef signal
221: # undef signal
222: #endif
223: #ifdef __cplusplus
224: extern "C" void (*signal (int, void (*)(int)))(int);
225: #else
226: void (*signal ()) ();
227: #endif
228:
229: int
230: main ()
231: {
232: return 0;
233: }
234: #endif
235: #ifdef HAVE_INET_NTOA_R_DECL
236: #include <arpa/inet.h>
237:
238: typedef void (*func_type)();
239:
240: int main()
241: {
242: #ifndef inet_ntoa_r
243: func_type func;
244: func = (func_type)inet_ntoa_r;
245: (void)func;
246: #endif
247: return 0;
248: }
249: #endif
250: #ifdef HAVE_INET_NTOA_R_DECL_REENTRANT
251: #define _REENTRANT
252: #include <arpa/inet.h>
253:
254: typedef void (*func_type)();
255:
256: int main()
257: {
258: #ifndef inet_ntoa_r
259: func_type func;
260: func = (func_type)&inet_ntoa_r;
261: (void)func;
262: #endif
263: return 0;
264: }
265: #endif
266: #ifdef HAVE_GETADDRINFO
267: #include <netdb.h>
268: #include <sys/types.h>
269: #include <sys/socket.h>
270:
271: int main(void) {
272: struct addrinfo hints, *ai;
273: int error;
274:
275: memset(&hints, 0, sizeof(hints));
276: hints.ai_family = AF_UNSPEC;
277: hints.ai_socktype = SOCK_STREAM;
278: #ifndef getaddrinfo
279: (void)getaddrinfo;
280: #endif
281: error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
282: if (error) {
283: return 1;
284: }
285: return 0;
286: }
287: #endif
288: #ifdef HAVE_FILE_OFFSET_BITS
289: #ifdef _FILE_OFFSET_BITS
290: #undef _FILE_OFFSET_BITS
291: #endif
292: #define _FILE_OFFSET_BITS 64
293: #include <sys/types.h>
294: /* Check that off_t can represent 2**63 - 1 correctly.
295: We can't simply define LARGE_OFF_T to be 9223372036854775807,
296: since some C++ compilers masquerading as C compilers
297: incorrectly reject 9223372036854775807. */
298: #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
299: int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
300: && LARGE_OFF_T % 2147483647 == 1)
301: ? 1 : -1];
302: int main () { ; return 0; }
303: #endif
304: #ifdef HAVE_IOCTLSOCKET
305: /* includes start */
306: #ifdef HAVE_WINDOWS_H
307: # ifndef WIN32_LEAN_AND_MEAN
308: # define WIN32_LEAN_AND_MEAN
309: # endif
310: # include <windows.h>
311: # ifdef HAVE_WINSOCK2_H
312: # include <winsock2.h>
313: # else
314: # ifdef HAVE_WINSOCK_H
315: # include <winsock.h>
316: # endif
317: # endif
318: #endif
319:
320: int
321: main ()
322: {
323:
324: /* ioctlsocket source code */
325: int socket;
326: unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
327:
328: ;
329: return 0;
330: }
331:
332: #endif
333: #ifdef HAVE_IOCTLSOCKET_CAMEL
334: /* includes start */
335: #ifdef HAVE_WINDOWS_H
336: # ifndef WIN32_LEAN_AND_MEAN
337: # define WIN32_LEAN_AND_MEAN
338: # endif
339: # include <windows.h>
340: # ifdef HAVE_WINSOCK2_H
341: # include <winsock2.h>
342: # else
343: # ifdef HAVE_WINSOCK_H
344: # include <winsock.h>
345: # endif
346: # endif
347: #endif
348:
349: int
350: main ()
351: {
352:
353: /* IoctlSocket source code */
354: if(0 != IoctlSocket(0, 0, 0))
355: return 1;
356: ;
357: return 0;
358: }
359: #endif
360: #ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
361: /* includes start */
362: #ifdef HAVE_WINDOWS_H
363: # ifndef WIN32_LEAN_AND_MEAN
364: # define WIN32_LEAN_AND_MEAN
365: # endif
366: # include <windows.h>
367: # ifdef HAVE_WINSOCK2_H
368: # include <winsock2.h>
369: # else
370: # ifdef HAVE_WINSOCK_H
371: # include <winsock.h>
372: # endif
373: # endif
374: #endif
375:
376: int
377: main ()
378: {
379:
380: /* IoctlSocket source code */
381: long flags = 0;
382: if(0 != ioctlsocket(0, FIONBIO, &flags))
383: return 1;
384: ;
385: return 0;
386: }
387: #endif
388: #ifdef HAVE_IOCTLSOCKET_FIONBIO
389: /* includes start */
390: #ifdef HAVE_WINDOWS_H
391: # ifndef WIN32_LEAN_AND_MEAN
392: # define WIN32_LEAN_AND_MEAN
393: # endif
394: # include <windows.h>
395: # ifdef HAVE_WINSOCK2_H
396: # include <winsock2.h>
397: # else
398: # ifdef HAVE_WINSOCK_H
399: # include <winsock.h>
400: # endif
401: # endif
402: #endif
403:
404: int
405: main ()
406: {
407:
408: int flags = 0;
409: if(0 != ioctlsocket(0, FIONBIO, &flags))
410: return 1;
411:
412: ;
413: return 0;
414: }
415: #endif
416: #ifdef HAVE_IOCTL_FIONBIO
417: /* headers for FIONBIO test */
418: /* includes start */
419: #ifdef HAVE_SYS_TYPES_H
420: # include <sys/types.h>
421: #endif
422: #ifdef HAVE_UNISTD_H
423: # include <unistd.h>
424: #endif
425: #ifdef HAVE_SYS_SOCKET_H
426: # include <sys/socket.h>
427: #endif
428: #ifdef HAVE_SYS_IOCTL_H
429: # include <sys/ioctl.h>
430: #endif
431: #ifdef HAVE_STROPTS_H
432: # include <stropts.h>
433: #endif
434:
435: int
436: main ()
437: {
438:
439: int flags = 0;
440: if(0 != ioctl(0, FIONBIO, &flags))
441: return 1;
442:
443: ;
444: return 0;
445: }
446: #endif
447: #ifdef HAVE_IOCTL_SIOCGIFADDR
448: /* headers for FIONBIO test */
449: /* includes start */
450: #ifdef HAVE_SYS_TYPES_H
451: # include <sys/types.h>
452: #endif
453: #ifdef HAVE_UNISTD_H
454: # include <unistd.h>
455: #endif
456: #ifdef HAVE_SYS_SOCKET_H
457: # include <sys/socket.h>
458: #endif
459: #ifdef HAVE_SYS_IOCTL_H
460: # include <sys/ioctl.h>
461: #endif
462: #ifdef HAVE_STROPTS_H
463: # include <stropts.h>
464: #endif
465: #include <net/if.h>
466:
467: int
468: main ()
469: {
470: struct ifreq ifr;
471: if(0 != ioctl(0, SIOCGIFADDR, &ifr))
472: return 1;
473:
474: ;
475: return 0;
476: }
477: #endif
478: #ifdef HAVE_SETSOCKOPT_SO_NONBLOCK
479: /* includes start */
480: #ifdef HAVE_WINDOWS_H
481: # ifndef WIN32_LEAN_AND_MEAN
482: # define WIN32_LEAN_AND_MEAN
483: # endif
484: # include <windows.h>
485: # ifdef HAVE_WINSOCK2_H
486: # include <winsock2.h>
487: # else
488: # ifdef HAVE_WINSOCK_H
489: # include <winsock.h>
490: # endif
491: # endif
492: #endif
493: /* includes start */
494: #ifdef HAVE_SYS_TYPES_H
495: # include <sys/types.h>
496: #endif
497: #ifdef HAVE_SYS_SOCKET_H
498: # include <sys/socket.h>
499: #endif
500: /* includes end */
501:
502: int
503: main ()
504: {
505: if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
506: return 1;
507: ;
508: return 0;
509: }
510: #endif
511: #ifdef HAVE_GLIBC_STRERROR_R
512: #include <string.h>
513: #include <errno.h>
514:
515: void check(char c) {}
516:
517: int
518: main () {
519: char buffer[1024];
520: /* This will not compile if strerror_r does not return a char* */
521: check(strerror_r(EACCES, buffer, sizeof(buffer))[0]);
522: return 0;
523: }
524: #endif
525: #ifdef HAVE_POSIX_STRERROR_R
526: #include <string.h>
527: #include <errno.h>
528:
529: /* float, because a pointer can't be implicitly cast to float */
530: void check(float f) {}
531:
532: int
533: main () {
534: char buffer[1024];
535: /* This will not compile if strerror_r does not return an int */
536: check(strerror_r(EACCES, buffer, sizeof(buffer)));
537: return 0;
538: }
539: #endif
540: #ifdef HAVE_FSETXATTR_6
541: #include <sys/xattr.h> /* header from libc, not from libattr */
542: int
543: main() {
544: fsetxattr(0, 0, 0, 0, 0, 0);
545: return 0;
546: }
547: #endif
548: #ifdef HAVE_FSETXATTR_5
549: #include <sys/xattr.h> /* header from libc, not from libattr */
550: int
551: main() {
552: fsetxattr(0, 0, 0, 0, 0);
553: return 0;
554: }
555: #endif
556: #ifdef HAVE_CLOCK_GETTIME_MONOTONIC
557: #include <time.h>
558: int
559: main() {
560: struct timespec ts = {0, 0};
561: clock_gettime(CLOCK_MONOTONIC, &ts);
562: return 0;
563: }
564: #endif
565: #ifdef HAVE_BUILTIN_AVAILABLE
566: int
567: main() {
568: if(__builtin_available(macOS 10.12, *)) {}
569: return 0;
570: }
571: #endif
572: #ifdef HAVE_VARIADIC_MACROS_C99
573: #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
574: #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
575:
576: int fun3(int arg1, int arg2, int arg3);
577: int fun2(int arg1, int arg2);
578:
579: int fun3(int arg1, int arg2, int arg3) {
580: return arg1 + arg2 + arg3;
581: }
582: int fun2(int arg1, int arg2) {
583: return arg1 + arg2;
584: }
585:
586: int
587: main() {
588: int res3 = c99_vmacro3(1, 2, 3);
589: int res2 = c99_vmacro2(1, 2);
590: (void)res3;
591: (void)res2;
592: return 0;
593: }
594: #endif
595: #ifdef HAVE_VARIADIC_MACROS_GCC
596: #define gcc_vmacro3(first, args...) fun3(first, args)
597: #define gcc_vmacro2(first, args...) fun2(first, args)
598:
599: int fun3(int arg1, int arg2, int arg3);
600: int fun2(int arg1, int arg2);
601:
602: int fun3(int arg1, int arg2, int arg3) {
603: return arg1 + arg2 + arg3;
604: }
605: int fun2(int arg1, int arg2) {
606: return arg1 + arg2;
607: }
608:
609: int
610: main() {
611: int res3 = gcc_vmacro3(1, 2, 3);
612: int res2 = gcc_vmacro2(1, 2);
613: (void)res3;
614: (void)res2;
615: return 0;
616: }
617: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>