1e71b7053SJung-uk Kim /* 2*44096ebdSEnji Cooper * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. 374664626SKris Kennaway * 4b077aed3SPierre Pronchery * Licensed under the Apache License 2.0 (the "License"). You may not use 5e71b7053SJung-uk Kim * this file except in compliance with the License. You can obtain a copy 6e71b7053SJung-uk Kim * in the file LICENSE in the source distribution or at 7e71b7053SJung-uk Kim * https://www.openssl.org/source/license.html 874664626SKris Kennaway */ 974664626SKris Kennaway 1017f01e99SJung-uk Kim #ifndef OSSL_E_OS_H 1117f01e99SJung-uk Kim # define OSSL_E_OS_H 1274664626SKris Kennaway 13e71b7053SJung-uk Kim # include <limits.h> 1474664626SKris Kennaway # include <openssl/opensslconf.h> 1574664626SKris Kennaway 1674664626SKris Kennaway # include <openssl/e_os2.h> 17e71b7053SJung-uk Kim # include <openssl/crypto.h> 18e71b7053SJung-uk Kim # include "internal/nelem.h" 19e71b7053SJung-uk Kim 206f9291ceSJung-uk Kim /* 216f9291ceSJung-uk Kim * <openssl/e_os2.h> contains what we can justify to make visible to the 226f9291ceSJung-uk Kim * outside; this file e_os.h is not part of the exported interface. 236f9291ceSJung-uk Kim */ 2474664626SKris Kennaway 25e71b7053SJung-uk Kim # if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) 26c1803d78SJacques Vidrine # define NO_CHMOD 27c1803d78SJacques Vidrine # define NO_SYSLOG 28c1803d78SJacques Vidrine # endif 29c1803d78SJacques Vidrine 30e71b7053SJung-uk Kim # define get_last_sys_error() errno 31e71b7053SJung-uk Kim # define clear_sys_error() errno=0 326935a639SJung-uk Kim # define set_sys_error(e) errno=(e) 33f579bf8eSKris Kennaway 3474664626SKris Kennaway /******************************************************************** 3574664626SKris Kennaway The Microsoft section 3674664626SKris Kennaway ********************************************************************/ 375c87c606SMark Murray # if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) 38f579bf8eSKris Kennaway # define WIN32 39f579bf8eSKris Kennaway # endif 405c87c606SMark Murray # if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) 4174664626SKris Kennaway # define WINDOWS 4274664626SKris Kennaway # endif 435c87c606SMark Murray # if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS) 4474664626SKris Kennaway # define MSDOS 4574664626SKris Kennaway # endif 4674664626SKris Kennaway 4774664626SKris Kennaway # ifdef WIN32 48e71b7053SJung-uk Kim # undef get_last_sys_error 49e71b7053SJung-uk Kim # undef clear_sys_error 506935a639SJung-uk Kim # undef set_sys_error 5174664626SKris Kennaway # define get_last_sys_error() GetLastError() 5274664626SKris Kennaway # define clear_sys_error() SetLastError(0) 536935a639SJung-uk Kim # define set_sys_error(e) SetLastError(e) 5474664626SKris Kennaway # if !defined(WINNT) 5574664626SKris Kennaway # define WIN_CONSOLE_BUG 5674664626SKris Kennaway # endif 5774664626SKris Kennaway # else 5874664626SKris Kennaway # endif 5974664626SKris Kennaway 605c87c606SMark Murray # if (defined(WINDOWS) || defined(MSDOS)) 615c87c606SMark Murray 625c87c606SMark Murray # ifdef __DJGPP__ 635c87c606SMark Murray # include <unistd.h> 645c87c606SMark Murray # include <sys/stat.h> 655c87c606SMark Murray # define _setmode setmode 665c87c606SMark Murray # define _O_TEXT O_TEXT 675c87c606SMark Murray # define _O_BINARY O_BINARY 68e71b7053SJung-uk Kim # undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd' sockets. */ 693b4e3dcbSSimon L. B. Nielsen # undef DEVRANDOM 703b4e3dcbSSimon L. B. Nielsen # define DEVRANDOM "/dev/urandom\x24" 715c87c606SMark Murray # endif /* __DJGPP__ */ 7274664626SKris Kennaway 7374664626SKris Kennaway # ifndef S_IFDIR 7474664626SKris Kennaway # define S_IFDIR _S_IFDIR 7574664626SKris Kennaway # endif 7674664626SKris Kennaway 7774664626SKris Kennaway # ifndef S_IFMT 7874664626SKris Kennaway # define S_IFMT _S_IFMT 79f579bf8eSKris Kennaway # endif 8074664626SKris Kennaway 815c87c606SMark Murray # if !defined(WINNT) && !defined(__DJGPP__) 8274664626SKris Kennaway # define NO_SYSLOG 8374664626SKris Kennaway # endif 8474664626SKris Kennaway 8574664626SKris Kennaway # ifdef WINDOWS 863b4e3dcbSSimon L. B. Nielsen # if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) 873b4e3dcbSSimon L. B. Nielsen /* 883b4e3dcbSSimon L. B. Nielsen * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." 893b4e3dcbSSimon L. B. Nielsen * Most notably we ought to check for availability of each specific 90e71b7053SJung-uk Kim * routine that was introduced after denoted _WIN32_WINNT with 91e71b7053SJung-uk Kim * GetProcAddress(). Normally newer functions are masked with higher 92e71b7053SJung-uk Kim * _WIN32_WINNT in SDK headers. So that if you wish to use them in 93e71b7053SJung-uk Kim * some module, you'd need to override _WIN32_WINNT definition in 94e71b7053SJung-uk Kim * the target module in order to "reach for" prototypes, but replace 95e71b7053SJung-uk Kim * calls to new functions with indirect calls. Alternatively it 96e71b7053SJung-uk Kim * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs 97e71b7053SJung-uk Kim * and check for current OS version instead. 983b4e3dcbSSimon L. B. Nielsen */ 99e71b7053SJung-uk Kim # define _WIN32_WINNT 0x0501 1003b4e3dcbSSimon L. B. Nielsen # endif 101e71b7053SJung-uk Kim # if defined(_WIN32_WINNT) || defined(_WIN32_WCE) 1021f13597dSJung-uk Kim /* 1031f13597dSJung-uk Kim * Just like defining _WIN32_WINNT including winsock2.h implies 1041f13597dSJung-uk Kim * certain "discipline" for maintaining [broad] binary compatibility. 1051f13597dSJung-uk Kim * As long as structures are invariant among Winsock versions, 1061f13597dSJung-uk Kim * it's sufficient to check for specific Winsock2 API availability 1071f13597dSJung-uk Kim * at run-time [DSO_global_lookup is recommended]... 1081f13597dSJung-uk Kim */ 1091f13597dSJung-uk Kim # include <winsock2.h> 1101f13597dSJung-uk Kim # include <ws2tcpip.h> 111b077aed3SPierre Pronchery /* 112b077aed3SPierre Pronchery * Clang-based C++Builder 10.3.3 toolchains cannot find C inline 113b077aed3SPierre Pronchery * definitions at link-time. This header defines WspiapiLoad() as an 114b077aed3SPierre Pronchery * __inline function. https://quality.embarcadero.com/browse/RSP-33806 115b077aed3SPierre Pronchery */ 116b077aed3SPierre Pronchery # if !defined(__BORLANDC__) || !defined(__clang__) 117b077aed3SPierre Pronchery # include <wspiapi.h> 118b077aed3SPierre Pronchery # endif 1191f13597dSJung-uk Kim /* yes, they have to be #included prior to <windows.h> */ 1201f13597dSJung-uk Kim # endif 12174664626SKris Kennaway # include <windows.h> 122db522d3aSSimon L. B. Nielsen # include <stdio.h> 12374664626SKris Kennaway # include <stddef.h> 12474664626SKris Kennaway # include <errno.h> 1257bded2dbSJung-uk Kim # if defined(_WIN32_WCE) && !defined(EACCES) 1267bded2dbSJung-uk Kim # define EACCES 13 1277bded2dbSJung-uk Kim # endif 12874664626SKris Kennaway # include <string.h> 1293b4e3dcbSSimon L. B. Nielsen # ifdef _WIN64 1303b4e3dcbSSimon L. B. Nielsen # define strlen(s) _strlen31(s) 1313b4e3dcbSSimon L. B. Nielsen /* cut strings to 2GB */ 132751d2991SJung-uk Kim static __inline unsigned int _strlen31(const char *str) 1333b4e3dcbSSimon L. B. Nielsen { 1343b4e3dcbSSimon L. B. Nielsen unsigned int len = 0; 1356f9291ceSJung-uk Kim while (*str && len < 0x80000000U) 1366f9291ceSJung-uk Kim str++, len++; 1373b4e3dcbSSimon L. B. Nielsen return len & 0x7FFFFFFF; 1383b4e3dcbSSimon L. B. Nielsen } 1393b4e3dcbSSimon L. B. Nielsen # endif 14074664626SKris Kennaway # include <malloc.h> 1417bded2dbSJung-uk Kim # if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin) 1427bded2dbSJung-uk Kim # if _MSC_VER>=1300 && _MSC_VER<1600 143db522d3aSSimon L. B. Nielsen # undef stdin 144db522d3aSSimon L. B. Nielsen # undef stdout 145db522d3aSSimon L. B. Nielsen # undef stderr 146db522d3aSSimon L. B. Nielsen FILE *__iob_func(); 147db522d3aSSimon L. B. Nielsen # define stdin (&__iob_func()[0]) 148db522d3aSSimon L. B. Nielsen # define stdout (&__iob_func()[1]) 149db522d3aSSimon L. B. Nielsen # define stderr (&__iob_func()[2]) 150db522d3aSSimon L. B. Nielsen # endif 151db522d3aSSimon L. B. Nielsen # endif 15274664626SKris Kennaway # endif 15374664626SKris Kennaway # include <io.h> 15474664626SKris Kennaway # include <fcntl.h> 15574664626SKris Kennaway 1565c87c606SMark Murray # ifdef OPENSSL_SYS_WINCE 1571f13597dSJung-uk Kim # define OPENSSL_NO_POSIX_IO 1585c87c606SMark Murray # endif 1595c87c606SMark Murray 16050ef0093SJacques Vidrine # define EXIT(n) exit(n) 16174664626SKris Kennaway # define LIST_SEPARATOR_CHAR ';' 16274664626SKris Kennaway # ifndef W_OK 16374664626SKris Kennaway # define W_OK 2 16474664626SKris Kennaway # endif 16574664626SKris Kennaway # ifndef R_OK 16674664626SKris Kennaway # define R_OK 4 16774664626SKris Kennaway # endif 1685c87c606SMark Murray # ifdef OPENSSL_SYS_WINCE 1695c87c606SMark Murray # define DEFAULT_HOME "" 1705c87c606SMark Murray # else 17126d191b4SKris Kennaway # define DEFAULT_HOME "C:" 1725c87c606SMark Murray # endif 17374664626SKris Kennaway 174dc2b908fSJung-uk Kim /* Avoid Visual Studio 13 GetVersion deprecated problems */ 175560ede85SJung-uk Kim # if defined(_MSC_VER) && _MSC_VER>=1800 176560ede85SJung-uk Kim # define check_winnt() (1) 177dc2b908fSJung-uk Kim # define check_win_minplat(x) (1) 178560ede85SJung-uk Kim # else 179560ede85SJung-uk Kim # define check_winnt() (GetVersion() < 0x80000000) 180dc2b908fSJung-uk Kim # define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x)) 181560ede85SJung-uk Kim # endif 182560ede85SJung-uk Kim 1831f13597dSJung-uk Kim # else /* The non-microsoft world */ 18474664626SKris Kennaway 185e71b7053SJung-uk Kim # if defined(OPENSSL_SYS_VXWORKS) 186b077aed3SPierre Pronchery # include <time.h> 187e71b7053SJung-uk Kim # else 188e71b7053SJung-uk Kim # include <sys/time.h> 189e71b7053SJung-uk Kim # endif 190e71b7053SJung-uk Kim 1915c87c606SMark Murray # ifdef OPENSSL_SYS_VMS 19274664626SKris Kennaway # define VMS 1 1936f9291ceSJung-uk Kim /* 1946f9291ceSJung-uk Kim * some programs don't include stdlib, so exit() and others give implicit 1956f9291ceSJung-uk Kim * function warnings 1966f9291ceSJung-uk Kim */ 19774664626SKris Kennaway # include <stdlib.h> 19874664626SKris Kennaway # if defined(__DECC) 19974664626SKris Kennaway # include <unistd.h> 20074664626SKris Kennaway # else 20174664626SKris Kennaway # include <unixlib.h> 20274664626SKris Kennaway # endif 20374664626SKris Kennaway # define LIST_SEPARATOR_CHAR ',' 2045c87c606SMark Murray /* We don't have any well-defined random devices on VMS, yet... */ 2055c87c606SMark Murray # undef DEVRANDOM 2066f9291ceSJung-uk Kim /*- 2076f9291ceSJung-uk Kim We need to do this since VMS has the following coding on status codes: 208f579bf8eSKris Kennaway 209f579bf8eSKris Kennaway Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... 210f579bf8eSKris Kennaway The important thing to know is that odd numbers are considered 211f579bf8eSKris Kennaway good, while even ones are considered errors. 212f579bf8eSKris Kennaway Bits 3-15: actual status number 213f579bf8eSKris Kennaway Bits 16-27: facility number. 0 is considered "unknown" 214f579bf8eSKris Kennaway Bits 28-31: control bits. If bit 28 is set, the shell won't try to 215f579bf8eSKris Kennaway output the message (which, for random codes, just looks ugly) 216f579bf8eSKris Kennaway 217f579bf8eSKris Kennaway So, what we do here is to change 0 to 1 to get the default success status, 218f579bf8eSKris Kennaway and everything else is shifted up to fit into the status number field, and 219e71b7053SJung-uk Kim the status is tagged as an error, which is what is wanted here. 220e71b7053SJung-uk Kim 221e71b7053SJung-uk Kim Finally, we add the VMS C facility code 0x35a000, because there are some 222e71b7053SJung-uk Kim programs, such as Perl, that will reinterpret the code back to something 223c9cf7b5cSJung-uk Kim POSIX. 'man perlvms' explains it further. 224e71b7053SJung-uk Kim 225e71b7053SJung-uk Kim NOTE: the perlvms manual wants to turn all codes 2 to 255 into success 226e71b7053SJung-uk Kim codes (status type = 1). I couldn't disagree more. Fortunately, the 227e71b7053SJung-uk Kim status type doesn't seem to bother Perl. 228f579bf8eSKris Kennaway -- Richard Levitte 229f579bf8eSKris Kennaway */ 230e71b7053SJung-uk Kim # define EXIT(n) exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1) 2313b4e3dcbSSimon L. B. Nielsen 232e71b7053SJung-uk Kim # define DEFAULT_HOME "SYS$LOGIN:" 2333b4e3dcbSSimon L. B. Nielsen 23474664626SKris Kennaway # else 23574664626SKris Kennaway /* !defined VMS */ 236f579bf8eSKris Kennaway # include <unistd.h> 237f579bf8eSKris Kennaway # include <sys/types.h> 2381f13597dSJung-uk Kim # ifdef OPENSSL_SYS_WIN32_CYGWIN 2391f13597dSJung-uk Kim # include <io.h> 2401f13597dSJung-uk Kim # include <fcntl.h> 2411f13597dSJung-uk Kim # endif 24274664626SKris Kennaway 24374664626SKris Kennaway # define LIST_SEPARATOR_CHAR ':' 2445c87c606SMark Murray # define EXIT(n) exit(n) 24574664626SKris Kennaway # endif 24674664626SKris Kennaway 2475c87c606SMark Murray # endif 2485c87c606SMark Murray 24974664626SKris Kennaway /***********************************************/ 25074664626SKris Kennaway 2516be8ae07SJacques Vidrine # if defined(OPENSSL_SYS_WINDOWS) 25258f35182SJung-uk Kim # if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) 253e71b7053SJung-uk Kim # define open _open 254e71b7053SJung-uk Kim # define fdopen _fdopen 255e71b7053SJung-uk Kim # define close _close 256e71b7053SJung-uk Kim # ifndef strdup 257e71b7053SJung-uk Kim # define strdup _strdup 2586be8ae07SJacques Vidrine # endif 259e71b7053SJung-uk Kim # define unlink _unlink 260e71b7053SJung-uk Kim # define fileno _fileno 261e71b7053SJung-uk Kim # endif 262e71b7053SJung-uk Kim # else 263e71b7053SJung-uk Kim # include <strings.h> 26474664626SKris Kennaway # endif 2655c87c606SMark Murray 2665c87c606SMark Murray /* vxworks */ 2675c87c606SMark Murray # if defined(OPENSSL_SYS_VXWORKS) 2685c87c606SMark Murray # include <ioLib.h> 2695c87c606SMark Murray # include <tickLib.h> 2705c87c606SMark Murray # include <sysLib.h> 2715c87c606SMark Murray # include <vxWorks.h> 2725c87c606SMark Murray # include <sockLib.h> 2735c87c606SMark Murray # include <taskLib.h> 2745c87c606SMark Murray 275e71b7053SJung-uk Kim # define TTY_STRUCT int 276e71b7053SJung-uk Kim # define sleep(a) taskDelay((a) * sysClkRateGet()) 2775c87c606SMark Murray 2786f9291ceSJung-uk Kim /* 2796f9291ceSJung-uk Kim * NOTE: these are implemented by helpers in database app! if the database is 280e71b7053SJung-uk Kim * not linked, we need to implement them elsewhere 2816f9291ceSJung-uk Kim */ 2825c87c606SMark Murray struct hostent *gethostbyname(const char *name); 2835c87c606SMark Murray struct hostent *gethostbyaddr(const char *addr, int length, int type); 2845c87c606SMark Murray struct servent *getservbyname(const char *name, const char *proto); 2855c87c606SMark Murray 2865c87c606SMark Murray # endif 2875c87c606SMark Murray /* end vxworks */ 28874664626SKris Kennaway 289b077aed3SPierre Pronchery /* system-specific variants defining ossl_sleep() */ 290b077aed3SPierre Pronchery #if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) 291b077aed3SPierre Pronchery # include <unistd.h> 292b077aed3SPierre Pronchery static ossl_inline void ossl_sleep(unsigned long millis) 293b077aed3SPierre Pronchery { 294b077aed3SPierre Pronchery # ifdef OPENSSL_SYS_VXWORKS 295b077aed3SPierre Pronchery struct timespec ts; 296b077aed3SPierre Pronchery ts.tv_sec = (long int) (millis / 1000); 297b077aed3SPierre Pronchery ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; 298b077aed3SPierre Pronchery nanosleep(&ts, NULL); 299*44096ebdSEnji Cooper # elif defined(__TANDEM) && !defined(_REENTRANT) 300b077aed3SPierre Pronchery # include <cextdecs.h(PROCESS_DELAY_)> 301*44096ebdSEnji Cooper 302b077aed3SPierre Pronchery /* HPNS does not support usleep for non threaded apps */ 303b077aed3SPierre Pronchery PROCESS_DELAY_(millis * 1000); 304b077aed3SPierre Pronchery # else 305*44096ebdSEnji Cooper unsigned int s = (unsigned int)(millis / 1000); 306*44096ebdSEnji Cooper unsigned int us = (unsigned int)((millis % 1000) * 1000); 307*44096ebdSEnji Cooper 308*44096ebdSEnji Cooper if (s > 0) 309*44096ebdSEnji Cooper sleep(s); 310*44096ebdSEnji Cooper usleep(us); 311b077aed3SPierre Pronchery # endif 312b077aed3SPierre Pronchery } 313b077aed3SPierre Pronchery #elif defined(_WIN32) 314b077aed3SPierre Pronchery # include <windows.h> 315b077aed3SPierre Pronchery static ossl_inline void ossl_sleep(unsigned long millis) 316b077aed3SPierre Pronchery { 317b077aed3SPierre Pronchery Sleep(millis); 318b077aed3SPierre Pronchery } 319b077aed3SPierre Pronchery #else 320b077aed3SPierre Pronchery /* Fallback to a busy wait */ 321b077aed3SPierre Pronchery static ossl_inline void ossl_sleep(unsigned long millis) 322b077aed3SPierre Pronchery { 323b077aed3SPierre Pronchery struct timeval start, now; 324b077aed3SPierre Pronchery unsigned long elapsedms; 325b077aed3SPierre Pronchery 326b077aed3SPierre Pronchery gettimeofday(&start, NULL); 327b077aed3SPierre Pronchery do { 328b077aed3SPierre Pronchery gettimeofday(&now, NULL); 329b077aed3SPierre Pronchery elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) 330b077aed3SPierre Pronchery + now.tv_usec - start.tv_usec) / 1000; 331b077aed3SPierre Pronchery } while (elapsedms < millis); 332b077aed3SPierre Pronchery } 333b077aed3SPierre Pronchery #endif /* defined OPENSSL_SYS_UNIX */ 334b077aed3SPierre Pronchery 335b077aed3SPierre Pronchery /* ----------------------------- HP NonStop -------------------------------- */ 336b077aed3SPierre Pronchery /* Required to support platform variant without getpid() and pid_t. */ 337b077aed3SPierre Pronchery # if defined(__TANDEM) && defined(_GUARDIAN_TARGET) 338b077aed3SPierre Pronchery # include <strings.h> 339b077aed3SPierre Pronchery # include <netdb.h> 340b077aed3SPierre Pronchery # define getservbyname(name,proto) getservbyname((char*)name,proto) 341b077aed3SPierre Pronchery # define gethostbyname(name) gethostbyname((char*)name) 342b077aed3SPierre Pronchery # define ioctlsocket(a,b,c) ioctl(a,b,c) 343b077aed3SPierre Pronchery # ifdef NO_GETPID 344b077aed3SPierre Pronchery inline int nssgetpid(); 345b077aed3SPierre Pronchery # ifndef NSSGETPID_MACRO 346b077aed3SPierre Pronchery # define NSSGETPID_MACRO 347b077aed3SPierre Pronchery # include <cextdecs.h(PROCESSHANDLE_GETMINE_)> 348b077aed3SPierre Pronchery # include <cextdecs.h(PROCESSHANDLE_DECOMPOSE_)> 349b077aed3SPierre Pronchery inline int nssgetpid() 350b077aed3SPierre Pronchery { 351b077aed3SPierre Pronchery short phandle[10]={0}; 352b077aed3SPierre Pronchery union pseudo_pid { 353b077aed3SPierre Pronchery struct { 354b077aed3SPierre Pronchery short cpu; 355b077aed3SPierre Pronchery short pin; 356b077aed3SPierre Pronchery } cpu_pin ; 357b077aed3SPierre Pronchery int ppid; 358b077aed3SPierre Pronchery } ppid = { 0 }; 359b077aed3SPierre Pronchery PROCESSHANDLE_GETMINE_(phandle); 360b077aed3SPierre Pronchery PROCESSHANDLE_DECOMPOSE_(phandle, &ppid.cpu_pin.cpu, &ppid.cpu_pin.pin); 361b077aed3SPierre Pronchery return ppid.ppid; 362b077aed3SPierre Pronchery } 363b077aed3SPierre Pronchery # define getpid(a) nssgetpid(a) 364b077aed3SPierre Pronchery # endif /* NSSGETPID_MACRO */ 365b077aed3SPierre Pronchery # endif /* NO_GETPID */ 366b077aed3SPierre Pronchery /*# define setsockopt(a,b,c,d,f) setsockopt(a,b,c,(char*)d,f)*/ 367b077aed3SPierre Pronchery /*# define getsockopt(a,b,c,d,f) getsockopt(a,b,c,(char*)d,f)*/ 368b077aed3SPierre Pronchery /*# define connect(a,b,c) connect(a,(struct sockaddr *)b,c)*/ 369b077aed3SPierre Pronchery /*# define bind(a,b,c) bind(a,(struct sockaddr *)b,c)*/ 370b077aed3SPierre Pronchery /*# define sendto(a,b,c,d,e,f) sendto(a,(char*)b,c,d,(struct sockaddr *)e,f)*/ 371b077aed3SPierre Pronchery # if defined(OPENSSL_THREADS) && !defined(_PUT_MODEL_) 372b077aed3SPierre Pronchery /* 373b077aed3SPierre Pronchery * HPNS SPT threads 374b077aed3SPierre Pronchery */ 375b077aed3SPierre Pronchery # define SPT_THREAD_SIGNAL 1 376b077aed3SPierre Pronchery # define SPT_THREAD_AWARE 1 377b077aed3SPierre Pronchery # include <spthread.h> 378b077aed3SPierre Pronchery # undef close 379b077aed3SPierre Pronchery # define close spt_close 380b077aed3SPierre Pronchery /* 381b077aed3SPierre Pronchery # define get_last_socket_error() errno 382b077aed3SPierre Pronchery # define clear_socket_error() errno=0 383b077aed3SPierre Pronchery # define ioctlsocket(a,b,c) ioctl(a,b,c) 384b077aed3SPierre Pronchery # define closesocket(s) close(s) 385b077aed3SPierre Pronchery # define readsocket(s,b,n) read((s),(char*)(b),(n)) 386b077aed3SPierre Pronchery # define writesocket(s,b,n) write((s),(char*)(b),(n) 387b077aed3SPierre Pronchery */ 388b077aed3SPierre Pronchery # define accept(a,b,c) accept(a,(struct sockaddr *)b,c) 389b077aed3SPierre Pronchery # define recvfrom(a,b,c,d,e,f) recvfrom(a,b,(socklen_t)c,d,e,f) 390b077aed3SPierre Pronchery # endif 391b077aed3SPierre Pronchery # endif 392b077aed3SPierre Pronchery 393e71b7053SJung-uk Kim # ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION 394e71b7053SJung-uk Kim # define CRYPTO_memcmp memcmp 39574664626SKris Kennaway # endif 39674664626SKris Kennaway 397b077aed3SPierre Pronchery # ifndef OPENSSL_NO_SECURE_MEMORY 398c9cf7b5cSJung-uk Kim /* unistd.h defines _POSIX_VERSION */ 399b077aed3SPierre Pronchery # if (defined(OPENSSL_SYS_UNIX) \ 400c9cf7b5cSJung-uk Kim && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) \ 401c9cf7b5cSJung-uk Kim || defined(__sun) || defined(__hpux) || defined(__sgi) \ 402b077aed3SPierre Pronchery || defined(__osf__) )) \ 403b077aed3SPierre Pronchery || defined(_WIN32) 404b077aed3SPierre Pronchery /* secure memory is implemented */ 405b077aed3SPierre Pronchery # else 406b077aed3SPierre Pronchery # define OPENSSL_NO_SECURE_MEMORY 407c9cf7b5cSJung-uk Kim # endif 40874664626SKris Kennaway # endif 409b077aed3SPierre Pronchery 410b077aed3SPierre Pronchery /* 411b077aed3SPierre Pronchery * str[n]casecmp_l is defined in POSIX 2008-01. Value is taken accordingly 412b077aed3SPierre Pronchery * https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html 413b077aed3SPierre Pronchery * There are also equivalent functions on Windows. 414b077aed3SPierre Pronchery * There is no locale_t on NONSTOP. 415b077aed3SPierre Pronchery */ 416b077aed3SPierre Pronchery # if defined(OPENSSL_SYS_WINDOWS) 417b077aed3SPierre Pronchery # define locale_t _locale_t 418b077aed3SPierre Pronchery # define freelocale _free_locale 419b077aed3SPierre Pronchery # define strcasecmp_l _stricmp_l 420b077aed3SPierre Pronchery # define strncasecmp_l _strnicmp_l 421b077aed3SPierre Pronchery # define strcasecmp _stricmp 422b077aed3SPierre Pronchery # define strncasecmp _strnicmp 423b077aed3SPierre Pronchery # elif !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L \ 424b077aed3SPierre Pronchery || defined(OPENSSL_SYS_TANDEM) 425b077aed3SPierre Pronchery # ifndef OPENSSL_NO_LOCALE 426b077aed3SPierre Pronchery # define OPENSSL_NO_LOCALE 427b077aed3SPierre Pronchery # endif 428b077aed3SPierre Pronchery # endif 429b077aed3SPierre Pronchery 430b077aed3SPierre Pronchery #endif 431