1c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* e_os.h */
2c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * All rights reserved.
4c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
5c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This package is an SSL implementation written
6c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * by Eric Young (eay@cryptsoft.com).
7c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * The implementation was written so as to conform with Netscapes SSL.
8c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
9c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This library is free for commercial and non-commercial use as long as
10c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the following conditions are aheared to.  The following conditions
11c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * apply to all code found in this distribution, be it the RC4, RSA,
12c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * included with this distribution is covered by the same copyright terms
14c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
16c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Copyright remains Eric Young's, and as such any Copyright notices in
17c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the code are not to be removed.
18c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * If this package is used in a product, Eric Young should be given attribution
19c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * as the author of the parts of the library used.
20c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This can be in the form of a textual message at program startup or
21c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * in documentation (online or textual) provided with the package.
22c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
23c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Redistribution and use in source and binary forms, with or without
24c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * modification, are permitted provided that the following conditions
25c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * are met:
26c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 1. Redistributions of source code must retain the copyright
27c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    notice, this list of conditions and the following disclaimer.
28c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 2. Redistributions in binary form must reproduce the above copyright
29c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    notice, this list of conditions and the following disclaimer in the
30c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    documentation and/or other materials provided with the distribution.
31c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 3. All advertising materials mentioning features or use of this software
32c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    must display the following acknowledgement:
33c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    "This product includes cryptographic software written by
34c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *     Eric Young (eay@cryptsoft.com)"
35c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    The word 'cryptographic' can be left out if the rouines from the library
36c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    being used are not cryptographic related :-).
37c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 4. If you include any Windows specific code (or a derivative thereof) from
38c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    the apps directory (application code) you must include an acknowledgement:
39c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
41c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * SUCH DAMAGE.
52c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
53c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * The licence and distribution terms for any publically available version or
54c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * derivative of this code cannot be changed.  i.e. this code cannot simply be
55c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * copied and put under another distribution licence
56c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * [including the GNU Public Licence.]
57c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */
58c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
59c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef HEADER_E_OS_H
60c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define HEADER_E_OS_H
61c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
62c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/opensslconf.h>
63c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
64c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/e_os2.h>
65c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* <openssl/e_os2.h> contains what we can justify to make visible
66c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * to the outside; this file e_os.h is not part of the exported
67c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * interface. */
68c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
69c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef  __cplusplus
70c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgextern "C" {
71c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
72c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
73c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Used to checking reference counts, most while doing perl5 stuff :-) */
74c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef REF_PRINT
75c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#undef REF_PRINT
76c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define REF_PRINT(a,b)	fprintf(stderr,"%08X:%4d:%s\n",(int)b,b->references,a)
77c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
78c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
79c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef DEVRANDOM
80c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* set this to a comma-separated list of 'random' device files to try out.
81c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * My default, we will try to read at least one of these files */
82c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
83c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
84c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef DEVRANDOM_EGD
85c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* set this to a comma-seperated list of 'egd' sockets to try out. These
86c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * sockets will be tried in the order listed in case accessing the device files
87c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * listed in DEVRANDOM did not return enough entropy. */
88c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
89c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
90c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
91c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_VXWORKS)
92c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NO_SYS_PARAM_H
93c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NO_CHMOD
94c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NO_SYSLOG
95c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
96c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
97c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC)
98c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# if macintosh==1
99c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifndef MAC_OS_GUSI_SOURCE
100c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define MAC_OS_pre_X
101c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define NO_SYS_TYPES_H
102c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
103c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NO_SYS_PARAM_H
104c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NO_CHMOD
105c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NO_SYSLOG
106c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  undef  DEVRANDOM
107c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define GETPID_IS_MEANINGLESS
108c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# endif
109c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
110c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
111c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/********************************************************************
112c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org The Microsoft section
113c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ********************************************************************/
114480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/* The following is used because of the small stack in some
115c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Microsoft operating systems */
116c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYSNAME_WIN32)
117c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define MS_STATIC	static
118c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#else
119c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define MS_STATIC
120c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
121c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
122c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
123c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define WIN32
124c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
125c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
126c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define WINDOWS
127c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
128c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
129c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define MSDOS
130c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
131c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
132c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS)
133c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define GETPID_IS_MEANINGLESS
134c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
135c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
136c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef WIN32
137c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_sys_error()	GetLastError()
138c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_sys_error()	SetLastError(0)
139c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if !defined(WINNT)
140c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define WIN_CONSOLE_BUG
141c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
142c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#else
143c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_sys_error()	errno
144c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_sys_error()	errno=0
145c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
146c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
147c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(WINDOWS)
148c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error()	WSAGetLastError()
149c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()	WSASetLastError(0)
150c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)	recv((s),(b),(n),0)
151c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)	send((s),(b),(n),0)
152c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(__DJGPP__)
153c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define WATT32
154c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error()	errno
155c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()	errno=0
156c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define closesocket(s)		close_s(s)
157c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)	read_s(s,b,n)
158c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)	send(s,b,n,0)
159c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(MAC_OS_pre_X)
160c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error()	errno
161c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()	errno=0
162c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define closesocket(s)		MacSocket_close(s)
163c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)	MacSocket_recv((s),(b),(n),true)
164c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)	MacSocket_send((s),(b),(n))
165c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(OPENSSL_SYS_VMS)
166c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error() errno
167c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()    errno=0
168c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ioctlsocket(a,b,c)      ioctl(a,b,c)
169c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define closesocket(s)          close(s)
170c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)       recv((s),(b),(n),0)
171c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)      send((s),(b),(n),0)
172c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(OPENSSL_SYS_VXWORKS)
173c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error()	errno
174c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()	errno=0
175c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ioctlsocket(a,b,c)	    ioctl((a),(b),(int)(c))
176c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define closesocket(s)		    close(s)
177c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)	    read((s),(b),(n))
178c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)	    write((s),(char *)(b),(n))
179480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#elif defined(OPENSSL_SYS_BEOS_R5)
180480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define get_last_socket_error() errno
181480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define clear_socket_error()    errno=0
182480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define FIONBIO SO_NONBLOCK
183480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define ioctlsocket(a,b,c)		  setsockopt((a),SOL_SOCKET,(b),(c),sizeof(*(c)))
184480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define readsocket(s,b,n)       recv((s),(b),(n),0)
185480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define writesocket(s,b,n)      send((s),(b),(n),0)
186c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(OPENSSL_SYS_NETWARE)
187c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(NETWARE_BSDSOCK)
188c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error() errno
189c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()    errno=0
190c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define closesocket(s)          close(s)
191c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ioctlsocket(a,b,c)      ioctl(a,b,c)
192c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(NETWARE_LIBC)
193c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)       recv((s),(b),(n),0)
194c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)      send((s),(b),(n),0)
195c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#else
196c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)       recv((s),(char*)(b),(n),0)
197c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)      send((s),(char*)(b),(n),0)
198c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
199c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#else
200c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error()	WSAGetLastError()
201c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()	WSASetLastError(0)
202c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)		recv((s),(b),(n),0)
203c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)		send((s),(b),(n),0)
204c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
205c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#else
206c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define get_last_socket_error()	errno
207c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define clear_socket_error()	errno=0
208c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ioctlsocket(a,b,c)	ioctl(a,b,c)
209c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define closesocket(s)		close(s)
210c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define readsocket(s,b,n)	read((s),(b),(n))
211c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define writesocket(s,b,n)	write((s),(b),(n))
212c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
213c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
214480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#ifdef WIN16 /* never the case */
215c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define MS_CALLBACK	_far _loadds
216c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define MS_FAR	_far
217c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#else
218c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define MS_CALLBACK
219c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define MS_FAR
220c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
221c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
222c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef OPENSSL_NO_STDIO
223c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  undef OPENSSL_NO_FP_API
224c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define OPENSSL_NO_FP_API
225c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
226c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
227c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if (defined(WINDOWS) || defined(MSDOS))
228c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
229c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifdef __DJGPP__
230c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <unistd.h>
231c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <sys/stat.h>
232c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <sys/socket.h>
233c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <tcp.h>
234c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <netdb.h>
235c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _setmode setmode
236c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _O_TEXT O_TEXT
237c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _O_BINARY O_BINARY
238c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    undef DEVRANDOM
239c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define DEVRANDOM "/dev/urandom\x24"
240c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif /* __DJGPP__ */
241c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
242c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifndef S_IFDIR
243c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define S_IFDIR	_S_IFDIR
244c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
245c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
246c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifndef S_IFMT
247c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define S_IFMT	_S_IFMT
248c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
249c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
250c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  if !defined(WINNT) && !defined(__DJGPP__)
251c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define NO_SYSLOG
252c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
253c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NO_DIRENT
254c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
255c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifdef WINDOWS
256c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT)
257c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org       /*
258c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
259c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* Most notably we ought to check for availability of each specific
260480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org	* routine with GetProcAddress() and/or guard NT-specific calls with
261c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* GetVersion() < 0x80000000. One can argue that in latter "or" case
262c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* we ought to /DELAYLOAD some .DLLs in order to protect ourselves
263c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* against run-time link errors. This doesn't seem to be necessary,
264c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* because it turned out that already Windows 95, first non-NT Win32
265c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* implementation, is equipped with at least NT 3.51 stubs, dummy
266c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	* routines with same name, but which do nothing. Meaning that it's
267480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org	* apparently sufficient to guard "vanilla" NT calls with GetVersion
268480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org	* alone, while NT 4.0 and above interfaces ought to be linked with
269480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org	* GetProcAddress at run-time.
270c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	*/
271c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define _WIN32_WINNT 0x0400
272c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
273480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT)
274480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org       /*
275480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org        * Just like defining _WIN32_WINNT including winsock2.h implies
276480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org        * certain "discipline" for maintaining [broad] binary compatibility.
277480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org        * As long as structures are invariant among Winsock versions,
278480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org        * it's sufficient to check for specific Winsock2 API availability
279480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org        * at run-time [DSO_global_lookup is recommended]...
280480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org        */
281480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      include <winsock2.h>
282480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      include <ws2tcpip.h>
283480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org       /* yes, they have to be #included prior to <windows.h> */
284480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    endif
285c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <windows.h>
286c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <stdio.h>
287c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <stddef.h>
288c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <errno.h>
289c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <string.h>
290c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef _WIN64
291c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define strlen(s) _strlen31(s)
292c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* cut strings to 2GB */
293c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic unsigned int _strlen31(const char *str)
294c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	{
295c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	unsigned int len=0;
296c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	while (*str && len<0x80000000U) str++, len++;
297c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	return len&0x7FFFFFFF;
298c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
299c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
300c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <malloc.h>
301c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace)
302c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org       /* compensate for bug in VC6 ctype.h */
303c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      undef isspace
304c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      undef isdigit
305c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      undef isalnum
306c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      undef isupper
307c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      undef isxdigit
308c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
309c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if defined(_MSC_VER) && !defined(_DLL) && defined(stdin)
310c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      if _MSC_VER>=1300
311c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        undef stdin
312c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        undef stdout
313c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        undef stderr
314c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org         FILE *__iob_func();
315c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define stdin  (&__iob_func()[0])
316c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define stdout (&__iob_func()[1])
317c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define stderr (&__iob_func()[2])
318c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      elif defined(I_CAN_LIVE_WITH_LNK4049)
319c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        undef stdin
320c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        undef stdout
321c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        undef stderr
322c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org         /* pre-1300 has __p__iob(), but it's available only in msvcrt.lib,
323c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org          * or in other words with /MD. Declaring implicit import, i.e.
324c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org          * with _imp_ prefix, works correctly with all compiler options,
325480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org	  * but without /MD results in LINK warning LNK4049:
326480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org	  * 'locally defined symbol "__iob" imported'.
327c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org          */
328c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org         extern FILE *_imp___iob;
329c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define stdin  (&_imp___iob[0])
330c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define stdout (&_imp___iob[1])
331c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define stderr (&_imp___iob[2])
332c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      endif
333c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
334c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
335c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  include <io.h>
336c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  include <fcntl.h>
337c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
338c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifdef OPENSSL_SYS_WINCE
339480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    define OPENSSL_NO_POSIX_IO
340c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
341c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
342c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  if defined (__BORLANDC__)
343c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _setmode setmode
344c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _O_TEXT O_TEXT
345c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _O_BINARY O_BINARY
346c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _int64 __int64
347c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _kbhit kbhit
348c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
349c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
350480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#  define EXIT(n) exit(n)
351c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define LIST_SEPARATOR_CHAR ';'
352c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifndef X_OK
353c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define X_OK	0
354c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
355c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifndef W_OK
356c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define W_OK	2
357c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
358c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifndef R_OK
359c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define R_OK	4
360c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
361c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define OPENSSL_CONF	"openssl.cnf"
362c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define SSLEAY_CONF	OPENSSL_CONF
363c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define NUL_DEV	"nul"
364c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define RFILE		".rnd"
365c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifdef OPENSSL_SYS_WINCE
366c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define DEFAULT_HOME  ""
367c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  else
368c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define DEFAULT_HOME  "C:"
369c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
370c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
371480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#else /* The non-microsoft world */
372c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
373c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifdef OPENSSL_SYS_VMS
374c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define VMS 1
375c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org  /* some programs don't include stdlib, so exit() and others give implicit
376c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     function warnings */
377c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <stdlib.h>
378c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if defined(__DECC)
379c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <unistd.h>
380c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    else
381c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <unixlib.h>
382c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
383c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define OPENSSL_CONF	"openssl.cnf"
384c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SSLEAY_CONF		OPENSSL_CONF
385c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define RFILE		".rnd"
386c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define LIST_SEPARATOR_CHAR ','
387c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define NUL_DEV		"NLA0:"
388c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org  /* We don't have any well-defined random devices on VMS, yet... */
389c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    undef DEVRANDOM
390c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org  /* We need to do this since VMS has the following coding on status codes:
391c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
392c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
393c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org               The important thing to know is that odd numbers are considered
394c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	       good, while even ones are considered errors.
395c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     Bits 3-15: actual status number
396c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     Bits 16-27: facility number.  0 is considered "unknown"
397c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     Bits 28-31: control bits.  If bit 28 is set, the shell won't try to
398c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org                 output the message (which, for random codes, just looks ugly)
399c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
400c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     So, what we do here is to change 0 to 1 to get the default success status,
401c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     and everything else is shifted up to fit into the status number field, and
402c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     the status is tagged as an error, which I believe is what is wanted here.
403c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     -- Richard Levitte
404c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org  */
405c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define EXIT(n)		do { int __VMS_EXIT = n; \
406c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org                                     if (__VMS_EXIT == 0) \
407c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				       __VMS_EXIT = 1; \
408c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				     else \
409c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				       __VMS_EXIT = (n << 3) | 2; \
410c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org                                     __VMS_EXIT |= 0x10000000; \
411c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				     exit(__VMS_EXIT); } while(0)
412c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define NO_SYS_PARAM_H
413c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
414c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  elif defined(OPENSSL_SYS_NETWARE)
415c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <fcntl.h>
416c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <unistd.h>
417c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define NO_SYS_TYPES_H
418c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    undef  DEVRANDOM
419c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef NETWARE_CLIB
420c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define getpid GetThreadID
421c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org       extern int GetThreadID(void);
422c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* #      include <conio.h> */
423c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org       extern int kbhit(void);
424c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    else
425c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <screen.h>
426c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
427c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define NO_SYSLOG
428c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _setmode setmode
429c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _kbhit kbhit
430c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _O_TEXT O_TEXT
431c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define _O_BINARY O_BINARY
432c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define OPENSSL_CONF   "openssl.cnf"
433c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SSLEAY_CONF    OPENSSL_CONF
434c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define RFILE    ".rnd"
435c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define LIST_SEPARATOR_CHAR ';'
436c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define EXIT(n)  { if (n) printf("ERROR: %d\n", (int)n); exit(n); }
437c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
438c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  else
439c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org     /* !defined VMS */
440c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef OPENSSL_SYS_MPE
441c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define NO_SYS_PARAM_H
442c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
443c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef OPENSSL_UNISTD
444c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include OPENSSL_UNISTD
445c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    else
446c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <unistd.h>
447c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
448c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifndef NO_SYS_TYPES_H
449c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/types.h>
450c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
451c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if defined(NeXT) || defined(OPENSSL_SYS_NEWS4)
452c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define pid_t int /* pid_t is missing on NEXTSTEP/OPENSTEP
453c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org                         * (unless when compiling with -D_POSIX_SOURCE,
454c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org                         * which doesn't work for us) */
455c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
456c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef OPENSSL_SYS_NEWS4 /* setvbuf is missing on mips-sony-bsd */
457c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define setvbuf(a, b, c, d) setbuffer((a), (b), (d))
458c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org       typedef unsigned long clock_t;
459c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
460480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    ifdef OPENSSL_SYS_WIN32_CYGWIN
461480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      include <io.h>
462480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      include <fcntl.h>
463480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    endif
464c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
465c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define OPENSSL_CONF	"openssl.cnf"
466c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SSLEAY_CONF		OPENSSL_CONF
467c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define RFILE		".rnd"
468c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define LIST_SEPARATOR_CHAR ':'
469c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define NUL_DEV		"/dev/null"
470c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define EXIT(n)		exit(n)
471c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
472c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
473c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define SSLeay_getpid()	getpid()
474c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
475c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
476c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
477c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
478c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/*************/
479c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
480c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef USE_SOCKETS
481c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  if defined(WINDOWS) || defined(MSDOS)
482c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org      /* windows world */
483c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
484c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef OPENSSL_NO_SOCK
485c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Write(a,b,c)	(-1)
486c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Read(a,b,c)	(-1)
487c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN(fd)		close(fd)
488c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN2(fd)		close(fd)
489c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    elif !defined(__DJGPP__)
490480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      if defined(_WIN32_WCE) && _WIN32_WCE<410
491480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#        define getservbyname _masked_declaration_getservbyname
492480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      endif
493480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      if !defined(IPPROTO_IP)
494480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org         /* winsock[2].h was included already? */
495480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#        include <winsock.h>
496480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      endif
497480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      ifdef getservbyname
498480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#        undef getservbyname
499480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org         /* this is used to be wcecompat/include/winsock_extras.h */
500480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org         struct servent* PASCAL getservbyname(const char*,const char*);
501480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      endif
502480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org
503c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      ifdef _WIN64
504c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/*
505c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
506c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the value constitutes an index in per-process table of limited size
507c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * and not a real pointer.
508c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */
509c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define socket(d,t,p)	((int)socket(d,t,p))
510c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define accept(s,f,l)	((int)accept(s,f,l))
511c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      endif
512c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Write(a,b,c)	send((a),(b),(c),0)
513c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Read(a,b,c)	recv((a),(b),(c),0)
514c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN(fd)		{ shutdown((fd),0); closesocket(fd); }
515c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN2(fd)		{ shutdown((fd),2); closesocket(fd); }
516c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    else
517c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Write(a,b,c)	write_s(a,b,c,0)
518c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Read(a,b,c)	read_s(a,b,c)
519c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN(fd)		close_s(fd)
520c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN2(fd)		close_s(fd)
521c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
522c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
523c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  elif defined(MAC_OS_pre_X)
524c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
525c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include "MacSocket.h"
526c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SSLeay_Write(a,b,c)		MacSocket_send((a),(b),(c))
527c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SSLeay_Read(a,b,c)		MacSocket_recv((a),(b),(c),true)
528c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SHUTDOWN(fd)		MacSocket_close(fd)
529c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SHUTDOWN2(fd)		MacSocket_close(fd)
530c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
531c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  elif defined(OPENSSL_SYS_NETWARE)
532c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org         /* NetWare uses the WinSock2 interfaces by default, but can be configured for BSD
533c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org         */
534c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      if defined(NETWARE_BSDSOCK)
535c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        include <sys/socket.h>
536c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        include <netinet/in.h>
537c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        include <sys/time.h>
538c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        if defined(NETWARE_CLIB)
539c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#          include <sys/bsdskt.h>
540c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        else
541c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#          include <sys/select.h>
542c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        endif
543c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        define INVALID_SOCKET (int)(~0)
544c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      else
545c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        include <novsock2.h>
546c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      endif
547c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Write(a,b,c)   send((a),(b),(c),0)
548c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
549c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN(fd)    { shutdown((fd),0); closesocket(fd); }
550c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      define SHUTDOWN2(fd)      { shutdown((fd),2); closesocket(fd); }
551c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
552c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  else
553c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
554c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifndef NO_SYS_PARAM_H
555c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/param.h>
556c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
557c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef OPENSSL_SYS_VXWORKS
558c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <time.h>
559c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    elif !defined(OPENSSL_SYS_MPE)
560c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/time.h> /* Needed under linux for FD_XXX */
561c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
562c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
563c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    include <netdb.h>
564c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if defined(OPENSSL_SYS_VMS_NODECC)
565c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <socket.h>
566c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <in.h>
567c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <inet.h>
568c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    else
569c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/socket.h>
570c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      ifdef FILIO_H
571c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        include <sys/filio.h> /* Added for FIONBIO under unixware */
572c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      endif
573c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <netinet/in.h>
574480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      if !defined(OPENSSL_SYS_BEOS_R5)
575c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <arpa/inet.h>
576c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
577480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    endif
578c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
579c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if defined(NeXT) || defined(_NEXT_SOURCE)
580c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/fcntl.h>
581c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/types.h>
582c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
583c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
584c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef OPENSSL_SYS_AIX
585c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/select.h>
586c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
587c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
588c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef __QNX__
589c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/select.h>
590c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
591c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
592c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    if defined(sun)
593c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <sys/filio.h>
594c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    else
595c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      ifndef VMS
596c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        include <sys/ioctl.h>
597c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      else
598c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	 /* ioctl is only in VMS > 7.0 and when socketshr is not used */
599c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
600c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#          include <sys/ioctl.h>
601c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        endif
602c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      endif
603c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
604c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
605c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifdef VMS
606c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      include <unixio.h>
607c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      if defined(TCPIP_TYPE_SOCKETSHR)
608c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#        include <socketshr.h>
609c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#      endif
610c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif
611c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
612c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SSLeay_Read(a,b,c)     read((a),(b),(c))
613c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SSLeay_Write(a,b,c)    write((a),(b),(c))
614c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SHUTDOWN(fd)    { shutdown((fd),0); closesocket((fd)); }
615c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define SHUTDOWN2(fd)   { shutdown((fd),2); closesocket((fd)); }
616c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    ifndef INVALID_SOCKET
617c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define INVALID_SOCKET	(-1)
618c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    endif /* INVALID_SOCKET */
619c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
620480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org
621480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/* Some IPv6 implementations are broken, disable them in known bad
622480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * versions.
623480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org */
624480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#  if !defined(OPENSSL_USE_IPV6)
625480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    if defined(AF_INET6) && !defined(OPENSSL_SYS_BEOS_BONE) && !defined(NETWARE_CLIB)
626480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      define OPENSSL_USE_IPV6 1
627480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    else
628480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#      define OPENSSL_USE_IPV6 0
629480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#    endif
630480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#  endif
631480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org
632c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
633c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
634c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(sun) && !defined(__svr4__) && !defined(__SVR4)
635c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org  /* include headers first, so our defines don't break it */
636c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <stdlib.h>
637c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <string.h>
638c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org  /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */
639c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# define memmove(s1,s2,n) bcopy((s2),(s1),(n))
640c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b)))
641c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgextern char *sys_errlist[]; extern int sys_nerr;
642c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# define strerror(errnum) \
643c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	(((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum])
644c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org  /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */
645c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include "crypto/o_str.h"
646c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# define memcmp OPENSSL_memcmp
647c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
648c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
649c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef OPENSSL_EXIT
650c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# if defined(MONOLITH) && !defined(OPENSSL_C)
651c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define OPENSSL_EXIT(n) return(n)
652c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# else
653c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0)
654c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# endif
655c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
656c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
657c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/***********************************************/
658c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
659c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define DG_GCC_BUG	/* gcc < 2.6.3 on DGUX */
660c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
661c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef sgi
662c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define IRIX_CC_BUG	/* all version of IRIX I've tested (4.* 5.*) */
663c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
664c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef OPENSSL_SYS_SNI
665c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define IRIX_CC_BUG	/* CDS++ up to V2.0Bsomething suffered from the same bug.*/
666c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
667c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
668c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_WINDOWS)
669c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define strcasecmp _stricmp
670c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define strncasecmp _strnicmp
671c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(OPENSSL_SYS_VMS)
672c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* VMS below version 7.0 doesn't have strcasecmp() */
673c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  include "o_str.h"
674c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define strcasecmp OPENSSL_strcasecmp
675c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define strncasecmp OPENSSL_strncasecmp
676c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define OPENSSL_IMPLEMENTS_strncasecmp
677c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
678c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define strcasecmp stricmp
679c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define strncasecmp strnicmp
680c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#elif defined(OPENSSL_SYS_NETWARE)
681c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  include <string.h>
682c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  if defined(NETWARE_CLIB)
683c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define strcasecmp stricmp
684c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#    define strncasecmp strnicmp
685c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif /* NETWARE_CLIB */
686c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
687c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
688c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_OS2) && defined(__EMX__)
689c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# include <io.h>
690c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# include <fcntl.h>
691c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# define NO_SYSLOG
692c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
693c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
694c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* vxworks */
695c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_VXWORKS)
696c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <ioLib.h>
697c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <tickLib.h>
698c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <sysLib.h>
699c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
700c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define TTY_STRUCT int
701c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
702c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define sleep(a) taskDelay((a) * sysClkRateGet())
703c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
704c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <vxWorks.h>
705c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <sockLib.h>
706c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <taskLib.h>
707c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
708c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define getpid taskIdSelf
709c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
710c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* NOTE: these are implemented by helpers in database app!
711c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * if the database is not linked, we need to implement them
712c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * elswhere */
713c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstruct hostent *gethostbyname(const char *name);
714c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstruct hostent *gethostbyaddr(const char *addr, int length, int type);
715c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstruct servent *getservbyname(const char *name, const char *proto);
716c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
717c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
718c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* end vxworks */
719c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
720480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/* beos */
721480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#if defined(OPENSSL_SYS_BEOS_R5)
722480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define SO_ERROR 0
723480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define NO_SYS_UN
724480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#define IPPROTO_IP 0
725480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#include <OS.h>
726480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org#endif
727480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org
728480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org
729c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef  __cplusplus
730c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org}
731c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
732c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
733c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
734c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
735