Annotation of embedaddon/curl/CMake/CurlTests.c, revision 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>