xref: /freebsd/crypto/openssl/e_os.h (revision 6f9291ce)
174664626SKris Kennaway /* e_os.h */
274664626SKris Kennaway /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
374664626SKris Kennaway  * All rights reserved.
474664626SKris Kennaway  *
574664626SKris Kennaway  * This package is an SSL implementation written
674664626SKris Kennaway  * by Eric Young (eay@cryptsoft.com).
774664626SKris Kennaway  * The implementation was written so as to conform with Netscapes SSL.
874664626SKris Kennaway  *
974664626SKris Kennaway  * This library is free for commercial and non-commercial use as long as
1074664626SKris Kennaway  * the following conditions are aheared to.  The following conditions
1174664626SKris Kennaway  * apply to all code found in this distribution, be it the RC4, RSA,
1274664626SKris Kennaway  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
1374664626SKris Kennaway  * included with this distribution is covered by the same copyright terms
1474664626SKris Kennaway  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
1574664626SKris Kennaway  *
1674664626SKris Kennaway  * Copyright remains Eric Young's, and as such any Copyright notices in
1774664626SKris Kennaway  * the code are not to be removed.
1874664626SKris Kennaway  * If this package is used in a product, Eric Young should be given attribution
1974664626SKris Kennaway  * as the author of the parts of the library used.
2074664626SKris Kennaway  * This can be in the form of a textual message at program startup or
2174664626SKris Kennaway  * in documentation (online or textual) provided with the package.
2274664626SKris Kennaway  *
2374664626SKris Kennaway  * Redistribution and use in source and binary forms, with or without
2474664626SKris Kennaway  * modification, are permitted provided that the following conditions
2574664626SKris Kennaway  * are met:
2674664626SKris Kennaway  * 1. Redistributions of source code must retain the copyright
2774664626SKris Kennaway  *    notice, this list of conditions and the following disclaimer.
2874664626SKris Kennaway  * 2. Redistributions in binary form must reproduce the above copyright
2974664626SKris Kennaway  *    notice, this list of conditions and the following disclaimer in the
3074664626SKris Kennaway  *    documentation and/or other materials provided with the distribution.
3174664626SKris Kennaway  * 3. All advertising materials mentioning features or use of this software
3274664626SKris Kennaway  *    must display the following acknowledgement:
3374664626SKris Kennaway  *    "This product includes cryptographic software written by
3474664626SKris Kennaway  *     Eric Young (eay@cryptsoft.com)"
3574664626SKris Kennaway  *    The word 'cryptographic' can be left out if the rouines from the library
3674664626SKris Kennaway  *    being used are not cryptographic related :-).
3774664626SKris Kennaway  * 4. If you include any Windows specific code (or a derivative thereof) from
3874664626SKris Kennaway  *    the apps directory (application code) you must include an acknowledgement:
3974664626SKris Kennaway  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
4074664626SKris Kennaway  *
4174664626SKris Kennaway  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
4274664626SKris Kennaway  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4374664626SKris Kennaway  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4474664626SKris Kennaway  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
4574664626SKris Kennaway  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
4674664626SKris Kennaway  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
4774664626SKris Kennaway  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4874664626SKris Kennaway  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
4974664626SKris Kennaway  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5074664626SKris Kennaway  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5174664626SKris Kennaway  * SUCH DAMAGE.
5274664626SKris Kennaway  *
5374664626SKris Kennaway  * The licence and distribution terms for any publically available version or
5474664626SKris Kennaway  * derivative of this code cannot be changed.  i.e. this code cannot simply be
5574664626SKris Kennaway  * copied and put under another distribution licence
5674664626SKris Kennaway  * [including the GNU Public Licence.]
5774664626SKris Kennaway  */
5874664626SKris Kennaway 
5974664626SKris Kennaway #ifndef HEADER_E_OS_H
6074664626SKris Kennaway # define HEADER_E_OS_H
6174664626SKris Kennaway 
6274664626SKris Kennaway # include <openssl/opensslconf.h>
6374664626SKris Kennaway 
6474664626SKris Kennaway # include <openssl/e_os2.h>
656f9291ceSJung-uk Kim /*
666f9291ceSJung-uk Kim  * <openssl/e_os2.h> contains what we can justify to make visible to the
676f9291ceSJung-uk Kim  * outside; this file e_os.h is not part of the exported interface.
686f9291ceSJung-uk Kim  */
6974664626SKris Kennaway 
7074664626SKris Kennaway #ifdef  __cplusplus
7174664626SKris Kennaway extern "C" {
7274664626SKris Kennaway #endif
7374664626SKris Kennaway 
7474664626SKris Kennaway /* Used to checking reference counts, most while doing perl5 stuff :-) */
7574664626SKris Kennaway # ifdef REF_PRINT
7674664626SKris Kennaway #  undef REF_PRINT
7774664626SKris Kennaway #  define REF_PRINT(a,b)  fprintf(stderr,"%08X:%4d:%s\n",(int)b,b->references,a)
7874664626SKris Kennaway # endif
7974664626SKris Kennaway 
8074664626SKris Kennaway # ifndef DEVRANDOM
816f9291ceSJung-uk Kim /*
826f9291ceSJung-uk Kim  * set this to a comma-separated list of 'random' device files to try out. My
836f9291ceSJung-uk Kim  * default, we will try to read at least one of these files
846f9291ceSJung-uk Kim  */
855c87c606SMark Murray #  define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
865c87c606SMark Murray # endif
875c87c606SMark Murray # ifndef DEVRANDOM_EGD
886f9291ceSJung-uk Kim /*
896f9291ceSJung-uk Kim  * set this to a comma-seperated list of 'egd' sockets to try out. These
906f9291ceSJung-uk Kim  * sockets will be tried in the order listed in case accessing the device
916f9291ceSJung-uk Kim  * files listed in DEVRANDOM did not return enough entropy.
926f9291ceSJung-uk Kim  */
935c87c606SMark Murray #  define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
9474664626SKris Kennaway # endif
9574664626SKris Kennaway 
965c87c606SMark Murray # if defined(OPENSSL_SYS_VXWORKS)
97c1803d78SJacques Vidrine #  define NO_SYS_PARAM_H
98c1803d78SJacques Vidrine #  define NO_CHMOD
99c1803d78SJacques Vidrine #  define NO_SYSLOG
100c1803d78SJacques Vidrine # endif
101c1803d78SJacques Vidrine 
1025c87c606SMark Murray # if defined(OPENSSL_SYS_MACINTOSH_CLASSIC)
103f579bf8eSKris Kennaway #  if macintosh==1
104f579bf8eSKris Kennaway #   ifndef MAC_OS_GUSI_SOURCE
105f579bf8eSKris Kennaway #    define MAC_OS_pre_X
106f579bf8eSKris Kennaway #    define NO_SYS_TYPES_H
107f579bf8eSKris Kennaway #   endif
108f579bf8eSKris Kennaway #   define NO_SYS_PARAM_H
109f579bf8eSKris Kennaway #   define NO_CHMOD
110f579bf8eSKris Kennaway #   define NO_SYSLOG
111f579bf8eSKris Kennaway #   undef  DEVRANDOM
112f579bf8eSKris Kennaway #   define GETPID_IS_MEANINGLESS
113f579bf8eSKris Kennaway #  endif
114f579bf8eSKris Kennaway # endif
115f579bf8eSKris Kennaway 
11674664626SKris Kennaway /********************************************************************
11774664626SKris Kennaway  The Microsoft section
11874664626SKris Kennaway  ********************************************************************/
1196f9291ceSJung-uk Kim /*
1206f9291ceSJung-uk Kim  * The following is used because of the small stack in some Microsoft
1216f9291ceSJung-uk Kim  * operating systems
1226f9291ceSJung-uk Kim  */
1235c87c606SMark Murray # if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYSNAME_WIN32)
12474664626SKris Kennaway #  define MS_STATIC     static
12574664626SKris Kennaway # else
12674664626SKris Kennaway #  define MS_STATIC
12774664626SKris Kennaway # endif
12874664626SKris Kennaway 
1295c87c606SMark Murray # if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
130f579bf8eSKris Kennaway #  define WIN32
131f579bf8eSKris Kennaway # endif
1325c87c606SMark Murray # if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
13374664626SKris Kennaway #  define WINDOWS
13474664626SKris Kennaway # endif
1355c87c606SMark Murray # if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
13674664626SKris Kennaway #  define MSDOS
13774664626SKris Kennaway # endif
13874664626SKris Kennaway 
139f579bf8eSKris Kennaway # if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS)
140f579bf8eSKris Kennaway #  define GETPID_IS_MEANINGLESS
141f579bf8eSKris Kennaway # endif
142f579bf8eSKris Kennaway 
14374664626SKris Kennaway # ifdef WIN32
14474664626SKris Kennaway #  define get_last_sys_error()    GetLastError()
14574664626SKris Kennaway #  define clear_sys_error()       SetLastError(0)
14674664626SKris Kennaway #  if !defined(WINNT)
14774664626SKris Kennaway #   define WIN_CONSOLE_BUG
14874664626SKris Kennaway #  endif
14974664626SKris Kennaway # else
15074664626SKris Kennaway #  define get_last_sys_error()    errno
15174664626SKris Kennaway #  define clear_sys_error()       errno=0
15274664626SKris Kennaway # endif
15374664626SKris Kennaway 
1545c87c606SMark Murray # if defined(WINDOWS)
15574664626SKris Kennaway #  define get_last_socket_error() WSAGetLastError()
15674664626SKris Kennaway #  define clear_socket_error()    WSASetLastError(0)
15774664626SKris Kennaway #  define readsocket(s,b,n)       recv((s),(b),(n),0)
15874664626SKris Kennaway #  define writesocket(s,b,n)      send((s),(b),(n),0)
1595c87c606SMark Murray # elif defined(__DJGPP__)
1605c87c606SMark Murray #  define WATT32
1615c87c606SMark Murray #  define get_last_socket_error() errno
1625c87c606SMark Murray #  define clear_socket_error()    errno=0
1635c87c606SMark Murray #  define closesocket(s)          close_s(s)
1645c87c606SMark Murray #  define readsocket(s,b,n)       read_s(s,b,n)
1655c87c606SMark Murray #  define writesocket(s,b,n)      send(s,b,n,0)
166f579bf8eSKris Kennaway # elif defined(MAC_OS_pre_X)
167f579bf8eSKris Kennaway #  define get_last_socket_error() errno
168f579bf8eSKris Kennaway #  define clear_socket_error()    errno=0
169f579bf8eSKris Kennaway #  define closesocket(s)          MacSocket_close(s)
170f579bf8eSKris Kennaway #  define readsocket(s,b,n)       MacSocket_recv((s),(b),(n),true)
171f579bf8eSKris Kennaway #  define writesocket(s,b,n)      MacSocket_send((s),(b),(n))
1725c87c606SMark Murray # elif defined(OPENSSL_SYS_VMS)
173c1803d78SJacques Vidrine #  define get_last_socket_error() errno
174c1803d78SJacques Vidrine #  define clear_socket_error()    errno=0
175c1803d78SJacques Vidrine #  define ioctlsocket(a,b,c)      ioctl(a,b,c)
176c1803d78SJacques Vidrine #  define closesocket(s)          close(s)
177c1803d78SJacques Vidrine #  define readsocket(s,b,n)       recv((s),(b),(n),0)
178c1803d78SJacques Vidrine #  define writesocket(s,b,n)      send((s),(b),(n),0)
17950ef0093SJacques Vidrine # elif defined(OPENSSL_SYS_VXWORKS)
18050ef0093SJacques Vidrine #  define get_last_socket_error() errno
18150ef0093SJacques Vidrine #  define clear_socket_error()    errno=0
18250ef0093SJacques Vidrine #  define ioctlsocket(a,b,c)          ioctl((a),(b),(int)(c))
18350ef0093SJacques Vidrine #  define closesocket(s)              close(s)
18450ef0093SJacques Vidrine #  define readsocket(s,b,n)           read((s),(b),(n))
18550ef0093SJacques Vidrine #  define writesocket(s,b,n)          write((s),(char *)(b),(n))
1861f13597dSJung-uk Kim # elif defined(OPENSSL_SYS_BEOS_R5)
1871f13597dSJung-uk Kim #  define get_last_socket_error() errno
1881f13597dSJung-uk Kim #  define clear_socket_error()    errno=0
1891f13597dSJung-uk Kim #  define FIONBIO SO_NONBLOCK
1901f13597dSJung-uk Kim #  define ioctlsocket(a,b,c)                setsockopt((a),SOL_SOCKET,(b),(c),sizeof(*(c)))
1911f13597dSJung-uk Kim #  define readsocket(s,b,n)       recv((s),(b),(n),0)
1921f13597dSJung-uk Kim #  define writesocket(s,b,n)      send((s),(b),(n),0)
1933b4e3dcbSSimon L. B. Nielsen # elif defined(OPENSSL_SYS_NETWARE)
1943b4e3dcbSSimon L. B. Nielsen #  if defined(NETWARE_BSDSOCK)
1953b4e3dcbSSimon L. B. Nielsen #   define get_last_socket_error() errno
1963b4e3dcbSSimon L. B. Nielsen #   define clear_socket_error()    errno=0
1973b4e3dcbSSimon L. B. Nielsen #   define closesocket(s)          close(s)
198db522d3aSSimon L. B. Nielsen #   define ioctlsocket(a,b,c)      ioctl(a,b,c)
199db522d3aSSimon L. B. Nielsen #   if defined(NETWARE_LIBC)
2003b4e3dcbSSimon L. B. Nielsen #    define readsocket(s,b,n)       recv((s),(b),(n),0)
2013b4e3dcbSSimon L. B. Nielsen #    define writesocket(s,b,n)      send((s),(b),(n),0)
2023b4e3dcbSSimon L. B. Nielsen #   else
203db522d3aSSimon L. B. Nielsen #    define readsocket(s,b,n)       recv((s),(char*)(b),(n),0)
204db522d3aSSimon L. B. Nielsen #    define writesocket(s,b,n)      send((s),(char*)(b),(n),0)
205db522d3aSSimon L. B. Nielsen #   endif
206db522d3aSSimon L. B. Nielsen #  else
2073b4e3dcbSSimon L. B. Nielsen #   define get_last_socket_error() WSAGetLastError()
2083b4e3dcbSSimon L. B. Nielsen #   define clear_socket_error()    WSASetLastError(0)
2093b4e3dcbSSimon L. B. Nielsen #   define readsocket(s,b,n)               recv((s),(b),(n),0)
2103b4e3dcbSSimon L. B. Nielsen #   define writesocket(s,b,n)              send((s),(b),(n),0)
2113b4e3dcbSSimon L. B. Nielsen #  endif
21274664626SKris Kennaway # else
21374664626SKris Kennaway #  define get_last_socket_error() errno
21474664626SKris Kennaway #  define clear_socket_error()    errno=0
21574664626SKris Kennaway #  define ioctlsocket(a,b,c)      ioctl(a,b,c)
21674664626SKris Kennaway #  define closesocket(s)          close(s)
21774664626SKris Kennaway #  define readsocket(s,b,n)       read((s),(b),(n))
21874664626SKris Kennaway #  define writesocket(s,b,n)      write((s),(b),(n))
21974664626SKris Kennaway # endif
22074664626SKris Kennaway 
2211f13597dSJung-uk Kim # ifdef WIN16                   /* never the case */
22274664626SKris Kennaway #  define MS_CALLBACK   _far _loadds
22374664626SKris Kennaway #  define MS_FAR        _far
22474664626SKris Kennaway # else
22574664626SKris Kennaway #  define MS_CALLBACK
22674664626SKris Kennaway #  define MS_FAR
22774664626SKris Kennaway # endif
22874664626SKris Kennaway 
2295c87c606SMark Murray # ifdef OPENSSL_NO_STDIO
2303b4e3dcbSSimon L. B. Nielsen #  undef OPENSSL_NO_FP_API
2315c87c606SMark Murray #  define OPENSSL_NO_FP_API
23274664626SKris Kennaway # endif
23374664626SKris Kennaway 
2345c87c606SMark Murray # if (defined(WINDOWS) || defined(MSDOS))
2355c87c606SMark Murray 
2365c87c606SMark Murray #  ifdef __DJGPP__
2375c87c606SMark Murray #   include <unistd.h>
2385c87c606SMark Murray #   include <sys/stat.h>
2395c87c606SMark Murray #   include <sys/socket.h>
2405c87c606SMark Murray #   include <tcp.h>
2415c87c606SMark Murray #   include <netdb.h>
2425c87c606SMark Murray #   define _setmode setmode
2435c87c606SMark Murray #   define _O_TEXT O_TEXT
2445c87c606SMark Murray #   define _O_BINARY O_BINARY
2453b4e3dcbSSimon L. B. Nielsen #   undef DEVRANDOM
2463b4e3dcbSSimon L. B. Nielsen #   define DEVRANDOM "/dev/urandom\x24"
2475c87c606SMark Murray #  endif                        /* __DJGPP__ */
24874664626SKris Kennaway 
24974664626SKris Kennaway #  ifndef S_IFDIR
25074664626SKris Kennaway #   define S_IFDIR     _S_IFDIR
25174664626SKris Kennaway #  endif
25274664626SKris Kennaway 
25374664626SKris Kennaway #  ifndef S_IFMT
25474664626SKris Kennaway #   define S_IFMT      _S_IFMT
255f579bf8eSKris Kennaway #  endif
25674664626SKris Kennaway 
2575c87c606SMark Murray #  if !defined(WINNT) && !defined(__DJGPP__)
25874664626SKris Kennaway #   define NO_SYSLOG
25974664626SKris Kennaway #  endif
26074664626SKris Kennaway #  define NO_DIRENT
26174664626SKris Kennaway 
26274664626SKris Kennaway #  ifdef WINDOWS
2633b4e3dcbSSimon L. B. Nielsen #   if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT)
2643b4e3dcbSSimon L. B. Nielsen        /*
2653b4e3dcbSSimon L. B. Nielsen         * Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
2663b4e3dcbSSimon L. B. Nielsen         * Most notably we ought to check for availability of each specific
2671f13597dSJung-uk Kim         * routine with GetProcAddress() and/or guard NT-specific calls with
2683b4e3dcbSSimon L. B. Nielsen         * GetVersion() < 0x80000000. One can argue that in latter "or" case
2693b4e3dcbSSimon L. B. Nielsen         * we ought to /DELAYLOAD some .DLLs in order to protect ourselves
2703b4e3dcbSSimon L. B. Nielsen         * against run-time link errors. This doesn't seem to be necessary,
2713b4e3dcbSSimon L. B. Nielsen         * because it turned out that already Windows 95, first non-NT Win32
2723b4e3dcbSSimon L. B. Nielsen         * implementation, is equipped with at least NT 3.51 stubs, dummy
2733b4e3dcbSSimon L. B. Nielsen         * routines with same name, but which do nothing. Meaning that it's
2741f13597dSJung-uk Kim         * apparently sufficient to guard "vanilla" NT calls with GetVersion
2751f13597dSJung-uk Kim         * alone, while NT 4.0 and above interfaces ought to be linked with
2761f13597dSJung-uk Kim         * GetProcAddress at run-time.
2773b4e3dcbSSimon L. B. Nielsen         */
2783b4e3dcbSSimon L. B. Nielsen #    define _WIN32_WINNT 0x0400
2793b4e3dcbSSimon L. B. Nielsen #   endif
2801f13597dSJung-uk Kim #   if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT)
2811f13597dSJung-uk Kim        /*
2821f13597dSJung-uk Kim         * Just like defining _WIN32_WINNT including winsock2.h implies
2831f13597dSJung-uk Kim         * certain "discipline" for maintaining [broad] binary compatibility.
2841f13597dSJung-uk Kim         * As long as structures are invariant among Winsock versions,
2851f13597dSJung-uk Kim         * it's sufficient to check for specific Winsock2 API availability
2861f13597dSJung-uk Kim         * at run-time [DSO_global_lookup is recommended]...
2871f13597dSJung-uk Kim         */
2881f13597dSJung-uk Kim #    include <winsock2.h>
2891f13597dSJung-uk Kim #    include <ws2tcpip.h>
2901f13597dSJung-uk Kim        /* yes, they have to be #included prior to <windows.h> */
2911f13597dSJung-uk Kim #   endif
29274664626SKris Kennaway #   include <windows.h>
293db522d3aSSimon L. B. Nielsen #   include <stdio.h>
29474664626SKris Kennaway #   include <stddef.h>
29574664626SKris Kennaway #   include <errno.h>
29674664626SKris Kennaway #   include <string.h>
2973b4e3dcbSSimon L. B. Nielsen #   ifdef _WIN64
2983b4e3dcbSSimon L. B. Nielsen #    define strlen(s) _strlen31(s)
2993b4e3dcbSSimon L. B. Nielsen /* cut strings to 2GB */
300751d2991SJung-uk Kim static __inline unsigned int _strlen31(const char *str)
3013b4e3dcbSSimon L. B. Nielsen {
3023b4e3dcbSSimon L. B. Nielsen     unsigned int len = 0;
3036f9291ceSJung-uk Kim     while (*str && len < 0x80000000U)
3046f9291ceSJung-uk Kim         str++, len++;
3053b4e3dcbSSimon L. B. Nielsen     return len & 0x7FFFFFFF;
3063b4e3dcbSSimon L. B. Nielsen }
3073b4e3dcbSSimon L. B. Nielsen #   endif
30874664626SKris Kennaway #   include <malloc.h>
309db522d3aSSimon L. B. Nielsen #   if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace)
310db522d3aSSimon L. B. Nielsen        /* compensate for bug in VC6 ctype.h */
311db522d3aSSimon L. B. Nielsen #    undef isspace
312db522d3aSSimon L. B. Nielsen #    undef isdigit
313db522d3aSSimon L. B. Nielsen #    undef isalnum
314db522d3aSSimon L. B. Nielsen #    undef isupper
315db522d3aSSimon L. B. Nielsen #    undef isxdigit
316db522d3aSSimon L. B. Nielsen #   endif
317db522d3aSSimon L. B. Nielsen #   if defined(_MSC_VER) && !defined(_DLL) && defined(stdin)
318db522d3aSSimon L. B. Nielsen #    if _MSC_VER>=1300
319db522d3aSSimon L. B. Nielsen #     undef stdin
320db522d3aSSimon L. B. Nielsen #     undef stdout
321db522d3aSSimon L. B. Nielsen #     undef stderr
322db522d3aSSimon L. B. Nielsen FILE *__iob_func();
323db522d3aSSimon L. B. Nielsen #     define stdin  (&__iob_func()[0])
324db522d3aSSimon L. B. Nielsen #     define stdout (&__iob_func()[1])
325db522d3aSSimon L. B. Nielsen #     define stderr (&__iob_func()[2])
326db522d3aSSimon L. B. Nielsen #    elif defined(I_CAN_LIVE_WITH_LNK4049)
327db522d3aSSimon L. B. Nielsen #     undef stdin
328db522d3aSSimon L. B. Nielsen #     undef stdout
329db522d3aSSimon L. B. Nielsen #     undef stderr
3306f9291ceSJung-uk Kim          /*
3316f9291ceSJung-uk Kim           * pre-1300 has __p__iob(), but it's available only in msvcrt.lib,
3326f9291ceSJung-uk Kim           * or in other words with /MD. Declaring implicit import, i.e. with
3336f9291ceSJung-uk Kim           * _imp_ prefix, works correctly with all compiler options, but
3346f9291ceSJung-uk Kim           * without /MD results in LINK warning LNK4049: 'locally defined
3356f9291ceSJung-uk Kim           * symbol "__iob" imported'.
336db522d3aSSimon L. B. Nielsen           */
337db522d3aSSimon L. B. Nielsen extern FILE *_imp___iob;
338db522d3aSSimon L. B. Nielsen #     define stdin  (&_imp___iob[0])
339db522d3aSSimon L. B. Nielsen #     define stdout (&_imp___iob[1])
340db522d3aSSimon L. B. Nielsen #     define stderr (&_imp___iob[2])
341db522d3aSSimon L. B. Nielsen #    endif
342db522d3aSSimon L. B. Nielsen #   endif
34374664626SKris Kennaway #  endif
34474664626SKris Kennaway #  include <io.h>
34574664626SKris Kennaway #  include <fcntl.h>
34674664626SKris Kennaway 
3475c87c606SMark Murray #  ifdef OPENSSL_SYS_WINCE
3481f13597dSJung-uk Kim #   define OPENSSL_NO_POSIX_IO
3495c87c606SMark Murray #  endif
3505c87c606SMark Murray 
35174664626SKris Kennaway #  if defined (__BORLANDC__)
35274664626SKris Kennaway #   define _setmode setmode
35374664626SKris Kennaway #   define _O_TEXT O_TEXT
35474664626SKris Kennaway #   define _O_BINARY O_BINARY
35574664626SKris Kennaway #   define _int64 __int64
356f579bf8eSKris Kennaway #   define _kbhit kbhit
35774664626SKris Kennaway #  endif
35874664626SKris Kennaway 
35950ef0093SJacques Vidrine #  define EXIT(n) exit(n)
36074664626SKris Kennaway #  define LIST_SEPARATOR_CHAR ';'
36174664626SKris Kennaway #  ifndef X_OK
36274664626SKris Kennaway #   define X_OK        0
36374664626SKris Kennaway #  endif
36474664626SKris Kennaway #  ifndef W_OK
36574664626SKris Kennaway #   define W_OK        2
36674664626SKris Kennaway #  endif
36774664626SKris Kennaway #  ifndef R_OK
36874664626SKris Kennaway #   define R_OK        4
36974664626SKris Kennaway #  endif
37074664626SKris Kennaway #  define OPENSSL_CONF  "openssl.cnf"
37174664626SKris Kennaway #  define SSLEAY_CONF   OPENSSL_CONF
37274664626SKris Kennaway #  define NUL_DEV       "nul"
37374664626SKris Kennaway #  define RFILE         ".rnd"
3745c87c606SMark Murray #  ifdef OPENSSL_SYS_WINCE
3755c87c606SMark Murray #   define DEFAULT_HOME  ""
3765c87c606SMark Murray #  else
37726d191b4SKris Kennaway #   define DEFAULT_HOME  "C:"
3785c87c606SMark Murray #  endif
37974664626SKris Kennaway 
380dc2b908fSJung-uk Kim /* Avoid Visual Studio 13 GetVersion deprecated problems */
381560ede85SJung-uk Kim #  if defined(_MSC_VER) && _MSC_VER>=1800
382560ede85SJung-uk Kim #   define check_winnt() (1)
383dc2b908fSJung-uk Kim #   define check_win_minplat(x) (1)
384560ede85SJung-uk Kim #  else
385560ede85SJung-uk Kim #   define check_winnt() (GetVersion() < 0x80000000)
386dc2b908fSJung-uk Kim #   define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x))
387560ede85SJung-uk Kim #  endif
388560ede85SJung-uk Kim 
3891f13597dSJung-uk Kim # else                          /* The non-microsoft world */
39074664626SKris Kennaway 
3915c87c606SMark Murray #  ifdef OPENSSL_SYS_VMS
39274664626SKris Kennaway #   define VMS 1
3936f9291ceSJung-uk Kim   /*
3946f9291ceSJung-uk Kim    * some programs don't include stdlib, so exit() and others give implicit
3956f9291ceSJung-uk Kim    * function warnings
3966f9291ceSJung-uk Kim    */
39774664626SKris Kennaway #   include <stdlib.h>
39874664626SKris Kennaway #   if defined(__DECC)
39974664626SKris Kennaway #    include <unistd.h>
40074664626SKris Kennaway #   else
40174664626SKris Kennaway #    include <unixlib.h>
40274664626SKris Kennaway #   endif
40374664626SKris Kennaway #   define OPENSSL_CONF        "openssl.cnf"
40474664626SKris Kennaway #   define SSLEAY_CONF         OPENSSL_CONF
40574664626SKris Kennaway #   define RFILE               ".rnd"
40674664626SKris Kennaway #   define LIST_SEPARATOR_CHAR ','
40774664626SKris Kennaway #   define NUL_DEV             "NLA0:"
4085c87c606SMark Murray   /* We don't have any well-defined random devices on VMS, yet... */
4095c87c606SMark Murray #   undef DEVRANDOM
4106f9291ceSJung-uk Kim   /*-
4116f9291ceSJung-uk Kim      We need to do this since VMS has the following coding on status codes:
412f579bf8eSKris Kennaway 
413f579bf8eSKris Kennaway      Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
414f579bf8eSKris Kennaway                The important thing to know is that odd numbers are considered
415f579bf8eSKris Kennaway                good, while even ones are considered errors.
416f579bf8eSKris Kennaway      Bits 3-15: actual status number
417f579bf8eSKris Kennaway      Bits 16-27: facility number.  0 is considered "unknown"
418f579bf8eSKris Kennaway      Bits 28-31: control bits.  If bit 28 is set, the shell won't try to
419f579bf8eSKris Kennaway                  output the message (which, for random codes, just looks ugly)
420f579bf8eSKris Kennaway 
421f579bf8eSKris Kennaway      So, what we do here is to change 0 to 1 to get the default success status,
422f579bf8eSKris Kennaway      and everything else is shifted up to fit into the status number field, and
423f579bf8eSKris Kennaway      the status is tagged as an error, which I believe is what is wanted here.
424f579bf8eSKris Kennaway      -- Richard Levitte
425f579bf8eSKris Kennaway   */
42674664626SKris Kennaway #   define EXIT(n)             do { int __VMS_EXIT = n; \
427f579bf8eSKris Kennaway                                      if (__VMS_EXIT == 0) \
428f579bf8eSKris Kennaway                                        __VMS_EXIT = 1; \
429f579bf8eSKris Kennaway                                      else \
430f579bf8eSKris Kennaway                                        __VMS_EXIT = (n << 3) | 2; \
43174664626SKris Kennaway                                      __VMS_EXIT |= 0x10000000; \
4325c87c606SMark Murray                                      exit(__VMS_EXIT); } while(0)
433f579bf8eSKris Kennaway #   define NO_SYS_PARAM_H
4343b4e3dcbSSimon L. B. Nielsen 
4353b4e3dcbSSimon L. B. Nielsen #  elif defined(OPENSSL_SYS_NETWARE)
4363b4e3dcbSSimon L. B. Nielsen #   include <fcntl.h>
4373b4e3dcbSSimon L. B. Nielsen #   include <unistd.h>
4383b4e3dcbSSimon L. B. Nielsen #   define NO_SYS_TYPES_H
4393b4e3dcbSSimon L. B. Nielsen #   undef  DEVRANDOM
4403b4e3dcbSSimon L. B. Nielsen #   ifdef NETWARE_CLIB
4413b4e3dcbSSimon L. B. Nielsen #    define getpid GetThreadID
442db522d3aSSimon L. B. Nielsen extern int GetThreadID(void);
443db522d3aSSimon L. B. Nielsen /* #      include <conio.h> */
444db522d3aSSimon L. B. Nielsen extern int kbhit(void);
445db522d3aSSimon L. B. Nielsen #   else
446db522d3aSSimon L. B. Nielsen #    include <screen.h>
4473b4e3dcbSSimon L. B. Nielsen #   endif
4483b4e3dcbSSimon L. B. Nielsen #   define NO_SYSLOG
4493b4e3dcbSSimon L. B. Nielsen #   define _setmode setmode
4503b4e3dcbSSimon L. B. Nielsen #   define _kbhit kbhit
4513b4e3dcbSSimon L. B. Nielsen #   define _O_TEXT O_TEXT
4523b4e3dcbSSimon L. B. Nielsen #   define _O_BINARY O_BINARY
4533b4e3dcbSSimon L. B. Nielsen #   define OPENSSL_CONF   "openssl.cnf"
4543b4e3dcbSSimon L. B. Nielsen #   define SSLEAY_CONF    OPENSSL_CONF
4553b4e3dcbSSimon L. B. Nielsen #   define RFILE    ".rnd"
4563b4e3dcbSSimon L. B. Nielsen #   define LIST_SEPARATOR_CHAR ';'
4573b4e3dcbSSimon L. B. Nielsen #   define EXIT(n)  { if (n) printf("ERROR: %d\n", (int)n); exit(n); }
4583b4e3dcbSSimon L. B. Nielsen 
45974664626SKris Kennaway #  else
46074664626SKris Kennaway      /* !defined VMS */
4615c87c606SMark Murray #   ifdef OPENSSL_SYS_MPE
462ddd58736SKris Kennaway #    define NO_SYS_PARAM_H
463ddd58736SKris Kennaway #   endif
464f579bf8eSKris Kennaway #   ifdef OPENSSL_UNISTD
46574664626SKris Kennaway #    include OPENSSL_UNISTD
466f579bf8eSKris Kennaway #   else
467f579bf8eSKris Kennaway #    include <unistd.h>
468f579bf8eSKris Kennaway #   endif
469f579bf8eSKris Kennaway #   ifndef NO_SYS_TYPES_H
470f579bf8eSKris Kennaway #    include <sys/types.h>
471f579bf8eSKris Kennaway #   endif
4725c87c606SMark Murray #   if defined(NeXT) || defined(OPENSSL_SYS_NEWS4)
473f579bf8eSKris Kennaway #    define pid_t int           /* pid_t is missing on NEXTSTEP/OPENSTEP
4746f9291ceSJung-uk Kim                                  * (unless when compiling with
4756f9291ceSJung-uk Kim                                  * -D_POSIX_SOURCE, which doesn't work for
4766f9291ceSJung-uk Kim                                  * us) */
47750ef0093SJacques Vidrine #   endif
4785c87c606SMark Murray #   ifdef OPENSSL_SYS_NEWS4     /* setvbuf is missing on mips-sony-bsd */
479ddd58736SKris Kennaway #    define setvbuf(a, b, c, d) setbuffer((a), (b), (d))
480ddd58736SKris Kennaway typedef unsigned long clock_t;
481ddd58736SKris Kennaway #   endif
4821f13597dSJung-uk Kim #   ifdef OPENSSL_SYS_WIN32_CYGWIN
4831f13597dSJung-uk Kim #    include <io.h>
4841f13597dSJung-uk Kim #    include <fcntl.h>
4851f13597dSJung-uk Kim #   endif
48674664626SKris Kennaway 
48774664626SKris Kennaway #   define OPENSSL_CONF        "openssl.cnf"
48874664626SKris Kennaway #   define SSLEAY_CONF         OPENSSL_CONF
48974664626SKris Kennaway #   define RFILE               ".rnd"
49074664626SKris Kennaway #   define LIST_SEPARATOR_CHAR ':'
49174664626SKris Kennaway #   define NUL_DEV             "/dev/null"
4925c87c606SMark Murray #   define EXIT(n)             exit(n)
49374664626SKris Kennaway #  endif
49474664626SKris Kennaway 
49574664626SKris Kennaway #  define SSLeay_getpid()       getpid()
49674664626SKris Kennaway 
49774664626SKris Kennaway # endif
49874664626SKris Kennaway 
49974664626SKris Kennaway /*************/
50074664626SKris Kennaway 
50174664626SKris Kennaway # ifdef USE_SOCKETS
50274664626SKris Kennaway #  if defined(WINDOWS) || defined(MSDOS)
50374664626SKris Kennaway       /* windows world */
50474664626SKris Kennaway 
5055c87c606SMark Murray #   ifdef OPENSSL_NO_SOCK
50674664626SKris Kennaway #    define SSLeay_Write(a,b,c)       (-1)
50774664626SKris Kennaway #    define SSLeay_Read(a,b,c)        (-1)
50874664626SKris Kennaway #    define SHUTDOWN(fd)              close(fd)
50974664626SKris Kennaway #    define SHUTDOWN2(fd)             close(fd)
5105c87c606SMark Murray #   elif !defined(__DJGPP__)
5111f13597dSJung-uk Kim #    if defined(_WIN32_WCE) && _WIN32_WCE<410
5121f13597dSJung-uk Kim #     define getservbyname _masked_declaration_getservbyname
5131f13597dSJung-uk Kim #    endif
5141f13597dSJung-uk Kim #    if !defined(IPPROTO_IP)
5151f13597dSJung-uk Kim          /* winsock[2].h was included already? */
51674664626SKris Kennaway #     include <winsock.h>
5171f13597dSJung-uk Kim #    endif
5181f13597dSJung-uk Kim #    ifdef getservbyname
5191f13597dSJung-uk Kim #     undef getservbyname
5201f13597dSJung-uk Kim          /* this is used to be wcecompat/include/winsock_extras.h */
5211f13597dSJung-uk Kim struct servent *PASCAL getservbyname(const char *, const char *);
5221f13597dSJung-uk Kim #    endif
5231f13597dSJung-uk Kim 
5243b4e3dcbSSimon L. B. Nielsen #    ifdef _WIN64
5253b4e3dcbSSimon L. B. Nielsen /*
5263b4e3dcbSSimon L. B. Nielsen  * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
5273b4e3dcbSSimon L. B. Nielsen  * the value constitutes an index in per-process table of limited size
5283b4e3dcbSSimon L. B. Nielsen  * and not a real pointer.
5293b4e3dcbSSimon L. B. Nielsen  */
5303b4e3dcbSSimon L. B. Nielsen #     define socket(d,t,p)   ((int)socket(d,t,p))
5313b4e3dcbSSimon L. B. Nielsen #     define accept(s,f,l)   ((int)accept(s,f,l))
5323b4e3dcbSSimon L. B. Nielsen #    endif
53374664626SKris Kennaway #    define SSLeay_Write(a,b,c)       send((a),(b),(c),0)
53474664626SKris Kennaway #    define SSLeay_Read(a,b,c)        recv((a),(b),(c),0)
53574664626SKris Kennaway #    define SHUTDOWN(fd)              { shutdown((fd),0); closesocket(fd); }
53674664626SKris Kennaway #    define SHUTDOWN2(fd)             { shutdown((fd),2); closesocket(fd); }
5375c87c606SMark Murray #   else
5385c87c606SMark Murray #    define SSLeay_Write(a,b,c)       write_s(a,b,c,0)
5395c87c606SMark Murray #    define SSLeay_Read(a,b,c)        read_s(a,b,c)
5405c87c606SMark Murray #    define SHUTDOWN(fd)              close_s(fd)
5415c87c606SMark Murray #    define SHUTDOWN2(fd)             close_s(fd)
54274664626SKris Kennaway #   endif
54374664626SKris Kennaway 
544f579bf8eSKris Kennaway #  elif defined(MAC_OS_pre_X)
545f579bf8eSKris Kennaway 
546f579bf8eSKris Kennaway #   include "MacSocket.h"
547f579bf8eSKris Kennaway #   define SSLeay_Write(a,b,c)         MacSocket_send((a),(b),(c))
548f579bf8eSKris Kennaway #   define SSLeay_Read(a,b,c)          MacSocket_recv((a),(b),(c),true)
549f579bf8eSKris Kennaway #   define SHUTDOWN(fd)                MacSocket_close(fd)
550f579bf8eSKris Kennaway #   define SHUTDOWN2(fd)               MacSocket_close(fd)
55174664626SKris Kennaway 
5523b4e3dcbSSimon L. B. Nielsen #  elif defined(OPENSSL_SYS_NETWARE)
5536f9291ceSJung-uk Kim          /*
5546f9291ceSJung-uk Kim           * NetWare uses the WinSock2 interfaces by default, but can be
5556f9291ceSJung-uk Kim           * configured for BSD
5563b4e3dcbSSimon L. B. Nielsen           */
5573b4e3dcbSSimon L. B. Nielsen #   if defined(NETWARE_BSDSOCK)
5583b4e3dcbSSimon L. B. Nielsen #    include <sys/socket.h>
5593b4e3dcbSSimon L. B. Nielsen #    include <netinet/in.h>
5603b4e3dcbSSimon L. B. Nielsen #    include <sys/time.h>
561db522d3aSSimon L. B. Nielsen #    if defined(NETWARE_CLIB)
562db522d3aSSimon L. B. Nielsen #     include <sys/bsdskt.h>
563db522d3aSSimon L. B. Nielsen #    else
5643b4e3dcbSSimon L. B. Nielsen #     include <sys/select.h>
565db522d3aSSimon L. B. Nielsen #    endif
5663b4e3dcbSSimon L. B. Nielsen #    define INVALID_SOCKET (int)(~0)
5673b4e3dcbSSimon L. B. Nielsen #   else
5683b4e3dcbSSimon L. B. Nielsen #    include <novsock2.h>
5693b4e3dcbSSimon L. B. Nielsen #   endif
5703b4e3dcbSSimon L. B. Nielsen #   define SSLeay_Write(a,b,c)   send((a),(b),(c),0)
5713b4e3dcbSSimon L. B. Nielsen #   define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
5723b4e3dcbSSimon L. B. Nielsen #   define SHUTDOWN(fd)    { shutdown((fd),0); closesocket(fd); }
5733b4e3dcbSSimon L. B. Nielsen #   define SHUTDOWN2(fd)      { shutdown((fd),2); closesocket(fd); }
5743b4e3dcbSSimon L. B. Nielsen 
57574664626SKris Kennaway #  else
57674664626SKris Kennaway 
577f579bf8eSKris Kennaway #   ifndef NO_SYS_PARAM_H
57874664626SKris Kennaway #    include <sys/param.h>
57974664626SKris Kennaway #   endif
5805c87c606SMark Murray #   ifdef OPENSSL_SYS_VXWORKS
581c1803d78SJacques Vidrine #    include <time.h>
5825c87c606SMark Murray #   elif !defined(OPENSSL_SYS_MPE)
58374664626SKris Kennaway #    include <sys/time.h>       /* Needed under linux for FD_XXX */
584ddd58736SKris Kennaway #   endif
58574664626SKris Kennaway 
58674664626SKris Kennaway #   include <netdb.h>
5875c87c606SMark Murray #   if defined(OPENSSL_SYS_VMS_NODECC)
58874664626SKris Kennaway #    include <socket.h>
58974664626SKris Kennaway #    include <in.h>
590de7cdddaSKris Kennaway #    include <inet.h>
59174664626SKris Kennaway #   else
59274664626SKris Kennaway #    include <sys/socket.h>
59374664626SKris Kennaway #    ifdef FILIO_H
59474664626SKris Kennaway #     include <sys/filio.h>     /* Added for FIONBIO under unixware */
59574664626SKris Kennaway #    endif
59674664626SKris Kennaway #    include <netinet/in.h>
5971f13597dSJung-uk Kim #    if !defined(OPENSSL_SYS_BEOS_R5)
598de7cdddaSKris Kennaway #     include <arpa/inet.h>
59974664626SKris Kennaway #    endif
6001f13597dSJung-uk Kim #   endif
60174664626SKris Kennaway 
60274664626SKris Kennaway #   if defined(NeXT) || defined(_NEXT_SOURCE)
60374664626SKris Kennaway #    include <sys/fcntl.h>
60474664626SKris Kennaway #    include <sys/types.h>
60574664626SKris Kennaway #   endif
60674664626SKris Kennaway 
6075c87c606SMark Murray #   ifdef OPENSSL_SYS_AIX
60874664626SKris Kennaway #    include <sys/select.h>
60974664626SKris Kennaway #   endif
61074664626SKris Kennaway 
611ddd58736SKris Kennaway #   ifdef __QNX__
612ddd58736SKris Kennaway #    include <sys/select.h>
613ddd58736SKris Kennaway #   endif
614ddd58736SKris Kennaway 
61574664626SKris Kennaway #   if defined(sun)
61674664626SKris Kennaway #    include <sys/filio.h>
61774664626SKris Kennaway #   else
61874664626SKris Kennaway #    ifndef VMS
61974664626SKris Kennaway #     include <sys/ioctl.h>
62074664626SKris Kennaway #    else
62174664626SKris Kennaway          /* ioctl is only in VMS > 7.0 and when socketshr is not used */
62274664626SKris Kennaway #     if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
62374664626SKris Kennaway #      include <sys/ioctl.h>
62474664626SKris Kennaway #     endif
62574664626SKris Kennaway #    endif
62674664626SKris Kennaway #   endif
62774664626SKris Kennaway 
62874664626SKris Kennaway #   ifdef VMS
62974664626SKris Kennaway #    include <unixio.h>
63074664626SKris Kennaway #    if defined(TCPIP_TYPE_SOCKETSHR)
63174664626SKris Kennaway #     include <socketshr.h>
63274664626SKris Kennaway #    endif
63374664626SKris Kennaway #   endif
63474664626SKris Kennaway 
63574664626SKris Kennaway #   define SSLeay_Read(a,b,c)     read((a),(b),(c))
63674664626SKris Kennaway #   define SSLeay_Write(a,b,c)    write((a),(b),(c))
637f579bf8eSKris Kennaway #   define SHUTDOWN(fd)    { shutdown((fd),0); closesocket((fd)); }
638f579bf8eSKris Kennaway #   define SHUTDOWN2(fd)   { shutdown((fd),2); closesocket((fd)); }
6395c87c606SMark Murray #   ifndef INVALID_SOCKET
64074664626SKris Kennaway #    define INVALID_SOCKET      (-1)
6415c87c606SMark Murray #   endif                       /* INVALID_SOCKET */
64274664626SKris Kennaway #  endif
6431f13597dSJung-uk Kim 
6446f9291ceSJung-uk Kim /*
6456f9291ceSJung-uk Kim  * Some IPv6 implementations are broken, disable them in known bad versions.
6461f13597dSJung-uk Kim  */
6471f13597dSJung-uk Kim #  if !defined(OPENSSL_USE_IPV6)
6481f13597dSJung-uk Kim #   if defined(AF_INET6) && !defined(OPENSSL_SYS_BEOS_BONE) && !defined(NETWARE_CLIB)
6491f13597dSJung-uk Kim #    define OPENSSL_USE_IPV6 1
6501f13597dSJung-uk Kim #   else
6511f13597dSJung-uk Kim #    define OPENSSL_USE_IPV6 0
6521f13597dSJung-uk Kim #   endif
65374664626SKris Kennaway #  endif
65474664626SKris Kennaway 
655f579bf8eSKris Kennaway # endif
656f579bf8eSKris Kennaway 
657ddd58736SKris Kennaway # if defined(sun) && !defined(__svr4__) && !defined(__SVR4)
658a21b1b38SKris Kennaway   /* include headers first, so our defines don't break it */
659a21b1b38SKris Kennaway #  include <stdlib.h>
660a21b1b38SKris Kennaway #  include <string.h>
661ddd58736SKris Kennaway   /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */
662ddd58736SKris Kennaway #  define memmove(s1,s2,n) bcopy((s2),(s1),(n))
663ddd58736SKris Kennaway #  define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b)))
6646f9291ceSJung-uk Kim extern char *sys_errlist[];
6656f9291ceSJung-uk Kim extern int sys_nerr;
666ddd58736SKris Kennaway #  define strerror(errnum) \
667ddd58736SKris Kennaway         (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum])
6683b4e3dcbSSimon L. B. Nielsen   /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */
6693b4e3dcbSSimon L. B. Nielsen #  include "crypto/o_str.h"
6703b4e3dcbSSimon L. B. Nielsen #  define memcmp OPENSSL_memcmp
671ddd58736SKris Kennaway # endif
672ddd58736SKris Kennaway 
6735c87c606SMark Murray # ifndef OPENSSL_EXIT
6745c87c606SMark Murray #  if defined(MONOLITH) && !defined(OPENSSL_C)
6755c87c606SMark Murray #   define OPENSSL_EXIT(n) return(n)
6765c87c606SMark Murray #  else
6775c87c606SMark Murray #   define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0)
6785c87c606SMark Murray #  endif
6795c87c606SMark Murray # endif
6805c87c606SMark Murray 
68174664626SKris Kennaway /***********************************************/
68274664626SKris Kennaway 
68374664626SKris Kennaway # define DG_GCC_BUG             /* gcc < 2.6.3 on DGUX */
68474664626SKris Kennaway 
68574664626SKris Kennaway # ifdef sgi
68674664626SKris Kennaway #  define IRIX_CC_BUG           /* all version of IRIX I've tested (4.* 5.*) */
68774664626SKris Kennaway # endif
6885c87c606SMark Murray # ifdef OPENSSL_SYS_SNI
6896f9291ceSJung-uk Kim #  define IRIX_CC_BUG           /* CDS++ up to V2.0Bsomething suffered from
6906f9291ceSJung-uk Kim                                  * the same bug. */
69174664626SKris Kennaway # endif
69274664626SKris Kennaway 
6936be8ae07SJacques Vidrine # if defined(OPENSSL_SYS_WINDOWS)
6946be8ae07SJacques Vidrine #  define strcasecmp _stricmp
6956be8ae07SJacques Vidrine #  define strncasecmp _strnicmp
6966be8ae07SJacques Vidrine # elif defined(OPENSSL_SYS_VMS)
6976be8ae07SJacques Vidrine /* VMS below version 7.0 doesn't have strcasecmp() */
6986be8ae07SJacques Vidrine #  include "o_str.h"
6996be8ae07SJacques Vidrine #  define strcasecmp OPENSSL_strcasecmp
7006be8ae07SJacques Vidrine #  define strncasecmp OPENSSL_strncasecmp
7013b4e3dcbSSimon L. B. Nielsen #  define OPENSSL_IMPLEMENTS_strncasecmp
7026be8ae07SJacques Vidrine # elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
7036be8ae07SJacques Vidrine #  define strcasecmp stricmp
7046be8ae07SJacques Vidrine #  define strncasecmp strnicmp
705db522d3aSSimon L. B. Nielsen # elif defined(OPENSSL_SYS_NETWARE)
706db522d3aSSimon L. B. Nielsen #  include <string.h>
707db522d3aSSimon L. B. Nielsen #  if defined(NETWARE_CLIB)
7083b4e3dcbSSimon L. B. Nielsen #   define strcasecmp stricmp
7093b4e3dcbSSimon L. B. Nielsen #   define strncasecmp strnicmp
710db522d3aSSimon L. B. Nielsen #  endif                        /* NETWARE_CLIB */
7116be8ae07SJacques Vidrine # endif
7126be8ae07SJacques Vidrine 
7135c87c606SMark Murray # if defined(OPENSSL_SYS_OS2) && defined(__EMX__)
7145c87c606SMark Murray #  include <io.h>
7155c87c606SMark Murray #  include <fcntl.h>
7165c87c606SMark Murray #  define NO_SYSLOG
71774664626SKris Kennaway # endif
7185c87c606SMark Murray 
7195c87c606SMark Murray /* vxworks */
7205c87c606SMark Murray # if defined(OPENSSL_SYS_VXWORKS)
7215c87c606SMark Murray #  include <ioLib.h>
7225c87c606SMark Murray #  include <tickLib.h>
7235c87c606SMark Murray #  include <sysLib.h>
7245c87c606SMark Murray 
7255c87c606SMark Murray #  define TTY_STRUCT int
7265c87c606SMark Murray 
7275c87c606SMark Murray #  define sleep(a) taskDelay((a) * sysClkRateGet())
7285c87c606SMark Murray 
7295c87c606SMark Murray #  include <vxWorks.h>
7305c87c606SMark Murray #  include <sockLib.h>
7315c87c606SMark Murray #  include <taskLib.h>
7325c87c606SMark Murray 
7335c87c606SMark Murray #  define getpid taskIdSelf
7345c87c606SMark Murray 
7356f9291ceSJung-uk Kim /*
7366f9291ceSJung-uk Kim  * NOTE: these are implemented by helpers in database app! if the database is
7376f9291ceSJung-uk Kim  * not linked, we need to implement them elswhere
7386f9291ceSJung-uk Kim  */
7395c87c606SMark Murray struct hostent *gethostbyname(const char *name);
7405c87c606SMark Murray struct hostent *gethostbyaddr(const char *addr, int length, int type);
7415c87c606SMark Murray struct servent *getservbyname(const char *name, const char *proto);
7425c87c606SMark Murray 
7435c87c606SMark Murray # endif
7445c87c606SMark Murray /* end vxworks */
74574664626SKris Kennaway 
7461f13597dSJung-uk Kim /* beos */
7471f13597dSJung-uk Kim # if defined(OPENSSL_SYS_BEOS_R5)
7481f13597dSJung-uk Kim #  define SO_ERROR 0
7491f13597dSJung-uk Kim #  define NO_SYS_UN
7501f13597dSJung-uk Kim #  define IPPROTO_IP 0
7511f13597dSJung-uk Kim #  include <OS.h>
7521f13597dSJung-uk Kim # endif
7531f13597dSJung-uk Kim 
754751d2991SJung-uk Kim # if !defined(inline) && !defined(__cplusplus)
755751d2991SJung-uk Kim #  if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L
756751d2991SJung-uk Kim    /* do nothing, inline works */
757751d2991SJung-uk Kim #  elif defined(__GNUC__) && __GNUC__>=2
758751d2991SJung-uk Kim #   define inline __inline__
759751d2991SJung-uk Kim #  elif defined(_MSC_VER)
760751d2991SJung-uk Kim   /*
761751d2991SJung-uk Kim    * Visual Studio: inline is available in C++ only, however
762751d2991SJung-uk Kim    * __inline is available for C, see
763751d2991SJung-uk Kim    * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
764751d2991SJung-uk Kim    */
765751d2991SJung-uk Kim #   define inline __inline
766751d2991SJung-uk Kim #  else
767751d2991SJung-uk Kim #   define inline
768751d2991SJung-uk Kim #  endif
769751d2991SJung-uk Kim # endif
7701f13597dSJung-uk Kim 
77174664626SKris Kennaway #ifdef  __cplusplus
77274664626SKris Kennaway }
77374664626SKris Kennaway #endif
77474664626SKris Kennaway 
77574664626SKris Kennaway #endif
776