xref: /freebsd/crypto/openssl/e_os.h (revision b077aed3)
1e71b7053SJung-uk Kim /*
2b077aed3SPierre Pronchery  * Copyright 1995-2022 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 */
_strlen31(const char * str)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>
ossl_sleep(unsigned long millis)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);
299b077aed3SPierre Pronchery # elif defined(__TANDEM)
300b077aed3SPierre Pronchery #  if !defined(_REENTRANT)
301b077aed3SPierre Pronchery #   include <cextdecs.h(PROCESS_DELAY_)>
302b077aed3SPierre Pronchery     /* HPNS does not support usleep for non threaded apps */
303b077aed3SPierre Pronchery     PROCESS_DELAY_(millis * 1000);
304b077aed3SPierre Pronchery #  elif defined(_SPT_MODEL_)
305b077aed3SPierre Pronchery #   include <spthread.h>
306b077aed3SPierre Pronchery #   include <spt_extensions.h>
307b077aed3SPierre Pronchery     usleep(millis * 1000);
308b077aed3SPierre Pronchery #  else
309b077aed3SPierre Pronchery     usleep(millis * 1000);
310b077aed3SPierre Pronchery #  endif
311b077aed3SPierre Pronchery # else
312b077aed3SPierre Pronchery     usleep(millis * 1000);
313b077aed3SPierre Pronchery # endif
314b077aed3SPierre Pronchery }
315b077aed3SPierre Pronchery #elif defined(_WIN32)
316b077aed3SPierre Pronchery # include <windows.h>
ossl_sleep(unsigned long millis)317b077aed3SPierre Pronchery static ossl_inline void ossl_sleep(unsigned long millis)
318b077aed3SPierre Pronchery {
319b077aed3SPierre Pronchery     Sleep(millis);
320b077aed3SPierre Pronchery }
321b077aed3SPierre Pronchery #else
322b077aed3SPierre Pronchery /* Fallback to a busy wait */
ossl_sleep(unsigned long millis)323b077aed3SPierre Pronchery static ossl_inline void ossl_sleep(unsigned long millis)
324b077aed3SPierre Pronchery {
325b077aed3SPierre Pronchery     struct timeval start, now;
326b077aed3SPierre Pronchery     unsigned long elapsedms;
327b077aed3SPierre Pronchery 
328b077aed3SPierre Pronchery     gettimeofday(&start, NULL);
329b077aed3SPierre Pronchery     do {
330b077aed3SPierre Pronchery         gettimeofday(&now, NULL);
331b077aed3SPierre Pronchery         elapsedms = (((now.tv_sec - start.tv_sec) * 1000000)
332b077aed3SPierre Pronchery                      + now.tv_usec - start.tv_usec) / 1000;
333b077aed3SPierre Pronchery     } while (elapsedms < millis);
334b077aed3SPierre Pronchery }
335b077aed3SPierre Pronchery #endif /* defined OPENSSL_SYS_UNIX */
336b077aed3SPierre Pronchery 
337b077aed3SPierre Pronchery /* ----------------------------- HP NonStop -------------------------------- */
338b077aed3SPierre Pronchery /* Required to support platform variant without getpid() and pid_t. */
339b077aed3SPierre Pronchery # if defined(__TANDEM) && defined(_GUARDIAN_TARGET)
340b077aed3SPierre Pronchery #  include <strings.h>
341b077aed3SPierre Pronchery #  include <netdb.h>
342b077aed3SPierre Pronchery #  define getservbyname(name,proto)          getservbyname((char*)name,proto)
343b077aed3SPierre Pronchery #  define gethostbyname(name)                gethostbyname((char*)name)
344b077aed3SPierre Pronchery #  define ioctlsocket(a,b,c)	ioctl(a,b,c)
345b077aed3SPierre Pronchery #  ifdef NO_GETPID
346b077aed3SPierre Pronchery inline int nssgetpid();
347b077aed3SPierre Pronchery #   ifndef NSSGETPID_MACRO
348b077aed3SPierre Pronchery #    define NSSGETPID_MACRO
349b077aed3SPierre Pronchery #    include <cextdecs.h(PROCESSHANDLE_GETMINE_)>
350b077aed3SPierre Pronchery #    include <cextdecs.h(PROCESSHANDLE_DECOMPOSE_)>
nssgetpid()351b077aed3SPierre Pronchery        inline int nssgetpid()
352b077aed3SPierre Pronchery        {
353b077aed3SPierre Pronchery          short phandle[10]={0};
354b077aed3SPierre Pronchery          union pseudo_pid {
355b077aed3SPierre Pronchery           struct {
356b077aed3SPierre Pronchery            short cpu;
357b077aed3SPierre Pronchery            short pin;
358b077aed3SPierre Pronchery          } cpu_pin ;
359b077aed3SPierre Pronchery          int ppid;
360b077aed3SPierre Pronchery         } ppid = { 0 };
361b077aed3SPierre Pronchery         PROCESSHANDLE_GETMINE_(phandle);
362b077aed3SPierre Pronchery         PROCESSHANDLE_DECOMPOSE_(phandle, &ppid.cpu_pin.cpu, &ppid.cpu_pin.pin);
363b077aed3SPierre Pronchery         return ppid.ppid;
364b077aed3SPierre Pronchery        }
365b077aed3SPierre Pronchery #    define getpid(a) nssgetpid(a)
366b077aed3SPierre Pronchery #   endif /* NSSGETPID_MACRO */
367b077aed3SPierre Pronchery #  endif /* NO_GETPID */
368b077aed3SPierre Pronchery /*#  define setsockopt(a,b,c,d,f) setsockopt(a,b,c,(char*)d,f)*/
369b077aed3SPierre Pronchery /*#  define getsockopt(a,b,c,d,f) getsockopt(a,b,c,(char*)d,f)*/
370b077aed3SPierre Pronchery /*#  define connect(a,b,c) connect(a,(struct sockaddr *)b,c)*/
371b077aed3SPierre Pronchery /*#  define bind(a,b,c) bind(a,(struct sockaddr *)b,c)*/
372b077aed3SPierre Pronchery /*#  define sendto(a,b,c,d,e,f) sendto(a,(char*)b,c,d,(struct sockaddr *)e,f)*/
373b077aed3SPierre Pronchery #  if defined(OPENSSL_THREADS) && !defined(_PUT_MODEL_)
374b077aed3SPierre Pronchery   /*
375b077aed3SPierre Pronchery    * HPNS SPT threads
376b077aed3SPierre Pronchery    */
377b077aed3SPierre Pronchery #   define  SPT_THREAD_SIGNAL 1
378b077aed3SPierre Pronchery #   define  SPT_THREAD_AWARE 1
379b077aed3SPierre Pronchery #   include <spthread.h>
380b077aed3SPierre Pronchery #   undef close
381b077aed3SPierre Pronchery #   define close spt_close
382b077aed3SPierre Pronchery /*
383b077aed3SPierre Pronchery #   define get_last_socket_error()	errno
384b077aed3SPierre Pronchery #   define clear_socket_error()	errno=0
385b077aed3SPierre Pronchery #   define ioctlsocket(a,b,c)	ioctl(a,b,c)
386b077aed3SPierre Pronchery #   define closesocket(s)		close(s)
387b077aed3SPierre Pronchery #   define readsocket(s,b,n)	read((s),(char*)(b),(n))
388b077aed3SPierre Pronchery #   define writesocket(s,b,n)	write((s),(char*)(b),(n)
389b077aed3SPierre Pronchery */
390b077aed3SPierre Pronchery #   define accept(a,b,c)        accept(a,(struct sockaddr *)b,c)
391b077aed3SPierre Pronchery #   define recvfrom(a,b,c,d,e,f) recvfrom(a,b,(socklen_t)c,d,e,f)
392b077aed3SPierre Pronchery #  endif
393b077aed3SPierre Pronchery # endif
394b077aed3SPierre Pronchery 
395e71b7053SJung-uk Kim # ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
396e71b7053SJung-uk Kim #  define CRYPTO_memcmp memcmp
39774664626SKris Kennaway # endif
39874664626SKris Kennaway 
399b077aed3SPierre Pronchery # ifndef OPENSSL_NO_SECURE_MEMORY
400c9cf7b5cSJung-uk Kim    /* unistd.h defines _POSIX_VERSION */
401b077aed3SPierre Pronchery #  if (defined(OPENSSL_SYS_UNIX) \
402c9cf7b5cSJung-uk Kim         && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L)      \
403c9cf7b5cSJung-uk Kim              || defined(__sun) || defined(__hpux) || defined(__sgi)      \
404b077aed3SPierre Pronchery              || defined(__osf__) )) \
405b077aed3SPierre Pronchery       || defined(_WIN32)
406b077aed3SPierre Pronchery       /* secure memory is implemented */
407b077aed3SPierre Pronchery #   else
408b077aed3SPierre Pronchery #     define OPENSSL_NO_SECURE_MEMORY
409c9cf7b5cSJung-uk Kim #   endif
41074664626SKris Kennaway # endif
411b077aed3SPierre Pronchery 
412b077aed3SPierre Pronchery /*
413b077aed3SPierre Pronchery  * str[n]casecmp_l is defined in POSIX 2008-01. Value is taken accordingly
414b077aed3SPierre Pronchery  * https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
415b077aed3SPierre Pronchery  * There are also equivalent functions on Windows.
416b077aed3SPierre Pronchery  * There is no locale_t on NONSTOP.
417b077aed3SPierre Pronchery  */
418b077aed3SPierre Pronchery # if defined(OPENSSL_SYS_WINDOWS)
419b077aed3SPierre Pronchery #  define locale_t _locale_t
420b077aed3SPierre Pronchery #  define freelocale _free_locale
421b077aed3SPierre Pronchery #  define strcasecmp_l _stricmp_l
422b077aed3SPierre Pronchery #  define strncasecmp_l _strnicmp_l
423b077aed3SPierre Pronchery #  define strcasecmp _stricmp
424b077aed3SPierre Pronchery #  define strncasecmp _strnicmp
425b077aed3SPierre Pronchery # elif !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L \
426b077aed3SPierre Pronchery      || defined(OPENSSL_SYS_TANDEM)
427b077aed3SPierre Pronchery #  ifndef OPENSSL_NO_LOCALE
428b077aed3SPierre Pronchery #   define OPENSSL_NO_LOCALE
429b077aed3SPierre Pronchery #  endif
430b077aed3SPierre Pronchery # endif
431b077aed3SPierre Pronchery 
432b077aed3SPierre Pronchery #endif
433