blob: 3ff9f3cd1c4ce2f2816d6d0789b3860846d49043 [file] [log] [blame]
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001/* e_os.h */
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00003 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#ifndef HEADER_E_OS_H
60#define HEADER_E_OS_H
61
Bodo Möller06018c41999-06-10 08:12:20 +000062#include <openssl/opensslconf.h>
63
Bodo Möllerfa470a81999-05-15 13:26:11 +000064#include <openssl/e_os2.h>
65/* <openssl/e_os2.h> contains what we can justify to make visible
Bodo Möller17e3dd11999-05-20 21:59:20 +000066 * to the outside; this file e_os.h is not part of the exported
67 * interface. */
Bodo Möllerfa470a81999-05-15 13:26:11 +000068
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000069#ifdef __cplusplus
70extern "C" {
71#endif
72
Ralf S. Engelschall58964a41998-12-21 10:56:39 +000073/* Used to checking reference counts, most while doing perl5 stuff :-) */
74#ifdef REF_PRINT
75#undef REF_PRINT
76#define REF_PRINT(a,b) fprintf(stderr,"%08X:%4d:%s\n",(int)b,b->references,a)
77#endif
78
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000079#ifndef DEVRANDOM
Richard Levitte0c61e292001-01-08 10:59:26 +000080/* set this to a comma-separated list of 'random' device files to try out.
81 * My default, we will try to read at least one of these files */
Richard Levittee02cc102001-01-08 21:27:53 +000082#define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000083#endif
Lutz Jänicke599c0352001-01-09 16:44:59 +000084#ifndef DEVRANDOM_EGD
85/* set this to a comma-seperated list of 'egd' sockets to try out. These
86 * sockets will be tried in the order listed in case accessing the device files
87 * listed in DEVRANDOM did not return enough entropy. */
Lutz Jänicked4219c42001-02-07 14:26:43 +000088#define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
Lutz Jänicke599c0352001-01-09 16:44:59 +000089#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000090
Richard Levitte3e83e682002-02-14 15:37:38 +000091#if defined(OPENSSL_SYS_VXWORKS)
92# define NO_SYS_PARAM_H
93# define NO_CHMOD
94# define NO_SYSLOG
95#endif
96
Richard Levittecf1b7d92001-02-19 16:06:34 +000097#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC)
Andy Polyakov17f389b1999-09-11 17:54:18 +000098# if macintosh==1
Andy Polyakov76997b71999-12-26 22:46:49 +000099# ifndef MAC_OS_GUSI_SOURCE
100# define MAC_OS_pre_X
101# define NO_SYS_TYPES_H
Ulf Möller991f0702000-05-15 18:59:55 +0000102 typedef long ssize_t;
Andy Polyakov76997b71999-12-26 22:46:49 +0000103# endif
104# define NO_SYS_PARAM_H
Andy Polyakov17f389b1999-09-11 17:54:18 +0000105# define NO_CHMOD
106# define NO_SYSLOG
Andy Polyakov9a1e34e1999-12-19 16:07:19 +0000107# undef DEVRANDOM
108# define GETPID_IS_MEANINGLESS
Andy Polyakov17f389b1999-09-11 17:54:18 +0000109# endif
110#endif
111
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000112/********************************************************************
113 The Microsoft section
114 ********************************************************************/
115/* The following is used becaue of the small stack in some
116 * Microsoft operating systems */
Richard Levitte6b7e0a92002-05-30 15:44:54 +0000117#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYSNAME_WIN32)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000118# define MS_STATIC static
119#else
120# define MS_STATIC
121#endif
122
Richard Levittecf1b7d92001-02-19 16:06:34 +0000123#if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
Ulf Möllerb8384652000-01-20 23:59:24 +0000124# define WIN32
125#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000126#if defined(OPENSSL_SYS_WIN16) && !defined(WIN16)
127# define WIN16
128#endif
129#if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
130# define WINDOWS
131#endif
132#if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
133# define MSDOS
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000134#endif
135
Andy Polyakov9a1e34e1999-12-19 16:07:19 +0000136#if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS)
137# define GETPID_IS_MEANINGLESS
138#endif
139
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000140#ifdef WIN32
141#define get_last_sys_error() GetLastError()
142#define clear_sys_error() SetLastError(0)
Dr. Stephen Henson6e064241999-03-08 18:41:15 +0000143#if !defined(WINNT)
144#define WIN_CONSOLE_BUG
145#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000146#else
147#define get_last_sys_error() errno
148#define clear_sys_error() errno=0
149#endif
150
Richard Levittecf1b7d92001-02-19 16:06:34 +0000151#if defined(WINDOWS)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000152#define get_last_socket_error() WSAGetLastError()
153#define clear_socket_error() WSASetLastError(0)
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000154#define readsocket(s,b,n) recv((s),(b),(n),0)
155#define writesocket(s,b,n) send((s),(b),(n),0)
156#define EADDRINUSE WSAEADDRINUSE
Richard Levitte8d6e6042002-11-14 11:22:01 +0000157#elif defined(__DJGPP__)
158#define WATT32
159#define get_last_socket_error() errno
160#define clear_socket_error() errno=0
161#define closesocket(s) close_s(s)
162#define readsocket(s,b,n) read_s(s,b,n)
163#define writesocket(s,b,n) send(s,b,n,0)
Andy Polyakov9a1e34e1999-12-19 16:07:19 +0000164#elif defined(MAC_OS_pre_X)
Andy Polyakov17f389b1999-09-11 17:54:18 +0000165#define get_last_socket_error() errno
166#define clear_socket_error() errno=0
167#define closesocket(s) MacSocket_close(s)
168#define readsocket(s,b,n) MacSocket_recv((s),(b),(n),true)
169#define writesocket(s,b,n) MacSocket_send((s),(b),(n))
Richard Levitte10189982002-04-06 11:58:04 +0000170#elif defined(OPENSSL_SYS_VMS)
Richard Levitte1fc02dc2002-04-06 11:35:49 +0000171#define get_last_socket_error() errno
172#define clear_socket_error() errno=0
173#define ioctlsocket(a,b,c) ioctl(a,b,c)
174#define closesocket(s) close(s)
175#define readsocket(s,b,n) recv((s),(b),(n),0)
176#define writesocket(s,b,n) send((s),(b),(n),0)
Richard Levittec7988682003-09-28 14:06:57 +0000177#elif defined(OPENSSL_SYS_VXWORKS)
178#define get_last_socket_error() errno
179#define clear_socket_error() errno=0
180#define ioctlsocket(a,b,c) ioctl((a),(b),(int)(c))
181#define closesocket(s) close(s)
182#define readsocket(s,b,n) read((s),(b),(n))
183#define writesocket(s,b,n) write((s),(char *)(b),(n))
Richard Levitte47c17352004-06-28 11:55:28 +0000184#elif defined(OPENSSL_SYS_NETWARE)
185#define get_last_socket_error() WSAGetLastError()
186#define clear_socket_error() WSASetLastError(0)
187#define readsocket(s,b,n) recv((s),(b),(n),0)
188#define writesocket(s,b,n) send((s),(b),(n),0)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000189#else
190#define get_last_socket_error() errno
191#define clear_socket_error() errno=0
192#define ioctlsocket(a,b,c) ioctl(a,b,c)
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000193#define closesocket(s) close(s)
194#define readsocket(s,b,n) read((s),(b),(n))
195#define writesocket(s,b,n) write((s),(b),(n))
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000196#endif
197
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000198#ifdef WIN16
199# define MS_CALLBACK _far _loadds
200# define MS_FAR _far
201#else
202# define MS_CALLBACK
203# define MS_FAR
204#endif
205
Richard Levittecf1b7d92001-02-19 16:06:34 +0000206#ifdef OPENSSL_NO_STDIO
Richard Levitted4a47a52003-03-20 23:14:49 +0000207# undef OPENSSL_NO_FP_API
Richard Levittecf1b7d92001-02-19 16:06:34 +0000208# define OPENSSL_NO_FP_API
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000209#endif
210
Richard Levittecf1b7d92001-02-19 16:06:34 +0000211#if (defined(WINDOWS) || defined(MSDOS))
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000212
Richard Levitte451dc182002-06-13 20:42:35 +0000213# ifdef __DJGPP__
214# include <unistd.h>
215# include <sys/stat.h>
Richard Levitte5319be42002-12-04 09:54:10 +0000216# include <sys/socket.h>
217# include <tcp.h>
218# include <netdb.h>
Richard Levitte451dc182002-06-13 20:42:35 +0000219# define _setmode setmode
220# define _O_TEXT O_TEXT
221# define _O_BINARY O_BINARY
222# endif /* __DJGPP__ */
223
Richard Levitte0056ef52000-03-02 07:42:48 +0000224# ifndef S_IFDIR
225# define S_IFDIR _S_IFDIR
226# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000227
Richard Levitte0056ef52000-03-02 07:42:48 +0000228# ifndef S_IFMT
229# define S_IFMT _S_IFMT
230# endif
Dr. Stephen Henson6e064241999-03-08 18:41:15 +0000231
Richard Levitte8d6e6042002-11-14 11:22:01 +0000232# if !defined(WINNT) && !defined(__DJGPP__)
Richard Levitte0056ef52000-03-02 07:42:48 +0000233# define NO_SYSLOG
234# endif
235# define NO_DIRENT
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000236
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000237# ifdef WINDOWS
238# include <windows.h>
239# include <stddef.h>
240# include <errno.h>
241# include <string.h>
242# include <malloc.h>
243# endif
244# include <io.h>
245# include <fcntl.h>
246
Richard Levitte0bf23d92002-11-15 22:37:18 +0000247# ifdef OPENSSL_SYS_WINCE
Richard Levitte0bf23d92002-11-15 22:37:18 +0000248# include <winsock_extras.h>
249# endif
250
Ulf Möller71b4d892000-03-20 13:40:16 +0000251# define ssize_t long
Ulf Möllerb70dcdf2000-03-10 23:45:28 +0000252
Richard Levitte0056ef52000-03-02 07:42:48 +0000253# if defined (__BORLANDC__)
254# define _setmode setmode
255# define _O_TEXT O_TEXT
256# define _O_BINARY O_BINARY
257# define _int64 __int64
258# define _kbhit kbhit
259# endif
Ulf Möller31a674d1999-05-06 00:46:34 +0000260
Richard Levitte1c3e4a32002-12-03 16:33:03 +0000261# if defined(WIN16) && defined(SSLEAY) && defined(_WINEXITNOPERSIST)
262# define EXIT(n) _wsetexit(_WINEXITNOPERSIST)
263# define OPENSSL_EXIT(n) do { if (n == 0) EXIT(n); return(n); } while(0)
Richard Levitte0056ef52000-03-02 07:42:48 +0000264# else
Richard Levitted3a28e82003-06-19 16:56:19 +0000265# define EXIT(n) exit(n)
Richard Levitte0056ef52000-03-02 07:42:48 +0000266# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000267# define LIST_SEPARATOR_CHAR ';'
Richard Levitte0056ef52000-03-02 07:42:48 +0000268# ifndef X_OK
269# define X_OK 0
270# endif
271# ifndef W_OK
272# define W_OK 2
273# endif
274# ifndef R_OK
275# define R_OK 4
276# endif
Ralf S. Engelschall06d5b161999-01-02 12:59:33 +0000277# define OPENSSL_CONF "openssl.cnf"
278# define SSLEAY_CONF OPENSSL_CONF
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000279# define NUL_DEV "nul"
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000280# define RFILE ".rnd"
Richard Levitte0bf23d92002-11-15 22:37:18 +0000281# ifdef OPENSSL_SYS_WINCE
282# define DEFAULT_HOME ""
283# else
284# define DEFAULT_HOME "C:"
285# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000286
287#else /* The non-microsoft world world */
288
Richard Levittecf1b7d92001-02-19 16:06:34 +0000289# ifdef OPENSSL_SYS_VMS
290# define VMS 1
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000291 /* some programs don't include stdlib, so exit() and others give implicit
292 function warnings */
293# include <stdlib.h>
294# if defined(__DECC)
295# include <unistd.h>
296# else
297# include <unixlib.h>
298# endif
299# define OPENSSL_CONF "openssl.cnf"
300# define SSLEAY_CONF OPENSSL_CONF
301# define RFILE ".rnd"
302# define LIST_SEPARATOR_CHAR ','
303# define NUL_DEV "NLA0:"
Richard Levitte0c61e292001-01-08 10:59:26 +0000304 /* We don't have any well-defined random devices on VMS, yet... */
305# undef DEVRANDOM
Richard Levitte511e5962000-03-17 09:25:36 +0000306 /* We need to do this since VMS has the following coding on status codes:
307
308 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
309 The important thing to know is that odd numbers are considered
310 good, while even ones are considered errors.
311 Bits 3-15: actual status number
312 Bits 16-27: facility number. 0 is considered "unknown"
313 Bits 28-31: control bits. If bit 28 is set, the shell won't try to
314 output the message (which, for random codes, just looks ugly)
315
316 So, what we do here is to change 0 to 1 to get the default success status,
317 and everything else is shifted up to fit into the status number field, and
318 the status is tagged as an error, which I believe is what is wanted here.
319 -- Richard Levitte
320 */
Richard Levitte1c3e4a32002-12-03 16:33:03 +0000321# define EXIT(n) do { int __VMS_EXIT = n; \
Richard Levitte511e5962000-03-17 09:25:36 +0000322 if (__VMS_EXIT == 0) \
323 __VMS_EXIT = 1; \
324 else \
325 __VMS_EXIT = (n << 3) | 2; \
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000326 __VMS_EXIT |= 0x10000000; \
Richard Levitte1c3e4a32002-12-03 16:33:03 +0000327 exit(__VMS_EXIT); } while(0)
Andy Polyakov76997b71999-12-26 22:46:49 +0000328# define NO_SYS_PARAM_H
Richard Levitte4d8743f2003-11-28 13:10:58 +0000329
330# elif defined(OPENSSL_SYS_NETWARE)
331# include <fcntl.h>
332# include <unistd.h>
333# define NO_SYS_TYPES_H
334# undef DEVRANDOM
335# ifdef NETWARE_CLIB
336# define getpid GetThreadID
337# endif
338# define NO_SYSLOG
339# define _setmode setmode
340# define _kbhit kbhit
341# define _O_TEXT O_TEXT
342# define _O_BINARY O_BINARY
343# define OPENSSL_CONF "openssl.cnf"
344# define SSLEAY_CONF OPENSSL_CONF
345# define RFILE ".rnd"
346# define LIST_SEPARATOR_CHAR ';'
347# define EXIT(n) { if (n) printf("ERROR: %d\n", (int)n); exit(n); }
348
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000349# else
Bodo Möller06018c41999-06-10 08:12:20 +0000350 /* !defined VMS */
Richard Levittecf1b7d92001-02-19 16:06:34 +0000351# ifdef OPENSSL_SYS_MPE
Richard Levittec5f8bbb2000-09-21 05:42:01 +0000352# define NO_SYS_PARAM_H
353# endif
Andy Polyakova7c52411999-12-19 21:35:29 +0000354# ifdef OPENSSL_UNISTD
Andy Polyakov404fb711999-12-19 22:56:23 +0000355# include OPENSSL_UNISTD
Andy Polyakova7c52411999-12-19 21:35:29 +0000356# else
357# include <unistd.h>
358# endif
Andy Polyakov9a1e34e1999-12-19 16:07:19 +0000359# ifndef NO_SYS_TYPES_H
360# include <sys/types.h>
361# endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000362# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4)
Bodo Möller4a56f742000-03-11 01:29:14 +0000363# define pid_t int /* pid_t is missing on NEXTSTEP/OPENSTEP
364 * (unless when compiling with -D_POSIX_SOURCE,
365 * which doesn't work for us) */
Richard Levitte700d86e2003-06-12 00:56:27 +0000366# endif
367# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS)
Bodo Möller4a56f742000-03-11 01:29:14 +0000368# define ssize_t int /* ditto */
Bodo Möllerfa0ca352000-03-07 09:37:19 +0000369# endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000370# ifdef OPENSSL_SYS_NEWS4 /* setvbuf is missing on mips-sony-bsd */
Richard Levitte72660f52000-09-14 12:48:48 +0000371# define setvbuf(a, b, c, d) setbuffer((a), (b), (d))
372 typedef unsigned long clock_t;
373# endif
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000374
375# define OPENSSL_CONF "openssl.cnf"
376# define SSLEAY_CONF OPENSSL_CONF
377# define RFILE ".rnd"
378# define LIST_SEPARATOR_CHAR ':'
379# define NUL_DEV "/dev/null"
Richard Levitte1c3e4a32002-12-03 16:33:03 +0000380# define EXIT(n) exit(n)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000381# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000382
383# define SSLeay_getpid() getpid()
384
385#endif
386
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000387
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000388/*************/
389
390#ifdef USE_SOCKETS
Richard Levitte8d6e6042002-11-14 11:22:01 +0000391# if defined(WINDOWS) || defined(MSDOS)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000392 /* windows world */
393
Richard Levittecf1b7d92001-02-19 16:06:34 +0000394# ifdef OPENSSL_NO_SOCK
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000395# define SSLeay_Write(a,b,c) (-1)
396# define SSLeay_Read(a,b,c) (-1)
397# define SHUTDOWN(fd) close(fd)
398# define SHUTDOWN2(fd) close(fd)
Richard Levitte8d6e6042002-11-14 11:22:01 +0000399# elif !defined(__DJGPP__)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000400# include <winsock.h>
401extern HINSTANCE _hInstance;
402# define SSLeay_Write(a,b,c) send((a),(b),(c),0)
403# define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
404# define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); }
405# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); }
Richard Levitte8d6e6042002-11-14 11:22:01 +0000406# else
407# define SSLeay_Write(a,b,c) write_s(a,b,c,0)
408# define SSLeay_Read(a,b,c) read_s(a,b,c)
409# define SHUTDOWN(fd) close_s(fd)
410# define SHUTDOWN2(fd) close_s(fd)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000411# endif
412
Andy Polyakov17f389b1999-09-11 17:54:18 +0000413# elif defined(MAC_OS_pre_X)
414
415# include "MacSocket.h"
416# define SSLeay_Write(a,b,c) MacSocket_send((a),(b),(c))
417# define SSLeay_Read(a,b,c) MacSocket_recv((a),(b),(c),true)
418# define SHUTDOWN(fd) MacSocket_close(fd)
419# define SHUTDOWN2(fd) MacSocket_close(fd)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000420
Richard Levitte4d8743f2003-11-28 13:10:58 +0000421# elif defined(OPENSSL_SYS_NETWARE)
422 /* NetWare uses the WinSock2 interfaces
423 */
424# if defined(NETWARE_CLIB)
425# include <ws2nlm.h>
426# elif defined(NETWARE_LIBC)
427# include <novsock2.h>
428# endif
429# define SSLeay_Write(a,b,c) send((a),(b),(c),0)
430# define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
431# define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); }
432# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); }
433
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000434# else
435
Andy Polyakov76997b71999-12-26 22:46:49 +0000436# ifndef NO_SYS_PARAM_H
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000437# include <sys/param.h>
438# endif
Richard Levitte3e83e682002-02-14 15:37:38 +0000439# ifdef OPENSSL_SYS_VXWORKS
440# include <time.h>
441# elif !defined(OPENSSL_SYS_MPE)
Richard Levittec5f8bbb2000-09-21 05:42:01 +0000442# include <sys/time.h> /* Needed under linux for FD_XXX */
443# endif
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000444
445# include <netdb.h>
Richard Levittecf1b7d92001-02-19 16:06:34 +0000446# if defined(OPENSSL_SYS_VMS_NODECC)
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000447# include <socket.h>
448# include <in.h>
Richard Levittea269d312000-09-29 20:14:57 +0000449# include <inet.h>
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000450# else
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000451# include <sys/socket.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000452# ifdef FILIO_H
453# include <sys/filio.h> /* Added for FIONBIO under unixware */
454# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000455# include <netinet/in.h>
Richard Levittea269d312000-09-29 20:14:57 +0000456# include <arpa/inet.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000457# endif
458
459# if defined(NeXT) || defined(_NEXT_SOURCE)
460# include <sys/fcntl.h>
461# include <sys/types.h>
462# endif
463
Richard Levittecf1b7d92001-02-19 16:06:34 +0000464# ifdef OPENSSL_SYS_AIX
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000465# include <sys/select.h>
466# endif
467
Bodo Möllera545c6f2000-09-01 09:54:25 +0000468# ifdef __QNX__
469# include <sys/select.h>
470# endif
471
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000472# if defined(sun)
473# include <sys/filio.h>
474# else
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000475# ifndef VMS
476# include <sys/ioctl.h>
477# else
478 /* ioctl is only in VMS > 7.0 and when socketshr is not used */
479# if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
480# include <sys/ioctl.h>
481# endif
482# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000483# endif
484
485# ifdef VMS
486# include <unixio.h>
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000487# if defined(TCPIP_TYPE_SOCKETSHR)
488# include <socketshr.h>
489# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000490# endif
491
492# define SSLeay_Read(a,b,c) read((a),(b),(c))
493# define SSLeay_Write(a,b,c) write((a),(b),(c))
Bodo Möller497cc4b1999-09-03 14:06:09 +0000494# define SHUTDOWN(fd) { shutdown((fd),0); closesocket((fd)); }
495# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket((fd)); }
Richard Levitte451dc182002-06-13 20:42:35 +0000496# ifndef INVALID_SOCKET
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000497# define INVALID_SOCKET (-1)
Richard Levitte451dc182002-06-13 20:42:35 +0000498# endif /* INVALID_SOCKET */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000499# endif
500#endif
501
Ulf Möllerfd72d832000-03-23 17:54:58 +0000502#if defined(__ultrix)
503# ifndef ssize_t
504# define ssize_t int
505# endif
506#endif
507
Bodo Mölleraf463e72000-05-31 16:42:47 +0000508#if defined(sun) && !defined(__svr4__) && !defined(__SVR4)
Lutz Jänickebb8aab02001-08-25 11:33:34 +0000509 /* include headers first, so our defines don't break it */
Lutz Jänicke0fbf5f72001-08-25 11:31:19 +0000510#include <stdlib.h>
511#include <string.h>
Bodo Möllerb908bd42000-06-09 16:43:49 +0000512 /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */
Bodo Möller6da6a112000-06-08 22:47:09 +0000513# define memmove(s1,s2,n) bcopy((s2),(s1),(n))
514# define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b)))
515extern char *sys_errlist[]; extern int sys_nerr;
Bodo Möllerb908bd42000-06-09 16:43:49 +0000516# define strerror(errnum) \
Bodo Möller6da6a112000-06-08 22:47:09 +0000517 (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum])
Richard Levitte89269c82000-05-19 08:53:06 +0000518#endif
519
Richard Levitte1c3e4a32002-12-03 16:33:03 +0000520#ifndef OPENSSL_EXIT
521# if defined(MONOLITH) && !defined(OPENSSL_C)
522# define OPENSSL_EXIT(n) return(n)
523# else
524# define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0)
525# endif
526#endif
527
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000528/***********************************************/
529
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000530/* do we need to do this for getenv.
531 * Just define getenv for use under windows */
532
533#ifdef WIN16
534/* How to do this needs to be thought out a bit more.... */
535/*char *GETENV(char *);
536#define Getenv GETENV*/
537#define Getenv getenv
538#else
539#define Getenv getenv
540#endif
541
542#define DG_GCC_BUG /* gcc < 2.6.3 on DGUX */
543
544#ifdef sgi
545#define IRIX_CC_BUG /* all version of IRIX I've tested (4.* 5.*) */
546#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000547#ifdef OPENSSL_SYS_SNI
Bodo Möller95f99681999-05-21 11:20:04 +0000548#define IRIX_CC_BUG /* CDS++ up to V2.0Bsomething suffered from the same bug.*/
549#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000550
Richard Levittee6fa67f2003-09-09 14:48:36 +0000551#if defined(OPENSSL_SYS_WINDOWS)
552# define strcasecmp _stricmp
553# define strncasecmp _strnicmp
554#elif defined(OPENSSL_SYS_VMS)
555/* VMS below version 7.0 doesn't have strcasecmp() */
Richard Levitte3d8b8862004-03-24 09:41:33 +0000556# include "o_str.h"
Richard Levittee6fa67f2003-09-09 14:48:36 +0000557# define strcasecmp OPENSSL_strcasecmp
558# define strncasecmp OPENSSL_strncasecmp
Andy Polyakove6d27ba2005-01-13 15:46:09 +0000559# define OPENSSL_IMPLEMENTS_strncasecmp
Richard Levittee6fa67f2003-09-09 14:48:36 +0000560#elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
561# define strcasecmp stricmp
562# define strncasecmp strnicmp
Richard Levitte4d8743f2003-11-28 13:10:58 +0000563#elif defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_CLIB)
564# define strcasecmp stricmp
565# define strncasecmp strnicmp
Richard Levittee6fa67f2003-09-09 14:48:36 +0000566#else
567# ifdef NO_STRINGS_H
568 int strcasecmp();
569 int strncasecmp();
570# else
571# include <strings.h>
572# endif /* NO_STRINGS_H */
573#endif
574
Richard Levitte3bfd99b2001-07-02 20:41:05 +0000575#if defined(OPENSSL_SYS_OS2) && defined(__EMX__)
576# include <io.h>
577# include <fcntl.h>
578# define NO_SYSLOG
Richard Levitte3bfd99b2001-07-02 20:41:05 +0000579#endif
580
Richard Levitte6a89a252002-10-09 13:40:48 +0000581/* vxworks */
582#if defined(OPENSSL_SYS_VXWORKS)
583#include <ioLib.h>
584#include <tickLib.h>
585#include <sysLib.h>
586
587#define TTY_STRUCT int
588
589#define sleep(a) taskDelay((a) * sysClkRateGet())
Richard Levitte6a89a252002-10-09 13:40:48 +0000590
591#include <vxWorks.h>
592#include <sockLib.h>
593#include <taskLib.h>
594
595#define getpid taskIdSelf
596
597/* NOTE: these are implemented by helpers in database app!
598 * if the database is not linked, we need to implement them
599 * elswhere */
600struct hostent *gethostbyname(const char *name);
601struct hostent *gethostbyaddr(const char *addr, int length, int type);
602struct servent *getservbyname(const char *name, const char *proto);
603
604#endif
605/* end vxworks */
606
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000607#ifdef __cplusplus
608}
609#endif
610
611#endif
612