]> git.ipfire.org Git - thirdparty/openssl.git/blame - e_os.h
-N option to diff is not essential, and mentioning it is unnecessarily
[thirdparty/openssl.git] / e_os.h
CommitLineData
d02b48c6 1/* e_os.h */
58964a49 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
d02b48c6
RE
3 * 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
06018c46
BM
62#include <openssl/opensslconf.h>
63
fa470a84
BM
64#include <openssl/e_os2.h>
65/* <openssl/e_os2.h> contains what we can justify to make visible
17e3dd1c
BM
66 * to the outside; this file e_os.h is not part of the exported
67 * interface. */
fa470a84 68
d02b48c6
RE
69#ifdef __cplusplus
70extern "C" {
71#endif
72
58964a49
RE
73/* 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
d02b48c6 79#ifndef DEVRANDOM
58964a49
RE
80/* set this to your 'random' device if you have one.
81 * My default, we will try to read this file */
88618bac 82#define DEVRANDOM "/dev/urandom"
d02b48c6
RE
83#endif
84
17f389bb
AP
85#if defined(__MWERKS__) && defined(macintosh)
86# if macintosh==1
76997b7d
AP
87# ifndef MAC_OS_GUSI_SOURCE
88# define MAC_OS_pre_X
89# define NO_SYS_TYPES_H
991f0706 90 typedef long ssize_t;
76997b7d
AP
91# endif
92# define NO_SYS_PARAM_H
17f389bb
AP
93# define NO_CHMOD
94# define NO_SYSLOG
9a1e34e5
AP
95# undef DEVRANDOM
96# define GETPID_IS_MEANINGLESS
17f389bb
AP
97# endif
98#endif
99
d02b48c6
RE
100/********************************************************************
101 The Microsoft section
102 ********************************************************************/
103/* The following is used becaue of the small stack in some
104 * Microsoft operating systems */
105#if defined(WIN16) || defined(MSDOS)
106# define MS_STATIC static
107#else
108# define MS_STATIC
109#endif
110
be5d92e0 111#if defined(_WIN32) && !defined(WIN32) && !defined(__CYGWIN32__)
b8384651
UM
112# define WIN32
113#endif
114
be5d92e0 115#if (defined(WIN32) || defined(WIN16)) && !defined(__CYGWIN32__)
d02b48c6
RE
116# ifndef WINDOWS
117# define WINDOWS
118# endif
119# ifndef MSDOS
120# define MSDOS
121# endif
122#endif
123
9a1e34e5
AP
124#if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS)
125# define GETPID_IS_MEANINGLESS
126#endif
127
58964a49
RE
128#ifdef WIN32
129#define get_last_sys_error() GetLastError()
130#define clear_sys_error() SetLastError(0)
6e064240
DSH
131#if !defined(WINNT)
132#define WIN_CONSOLE_BUG
133#endif
58964a49
RE
134#else
135#define get_last_sys_error() errno
136#define clear_sys_error() errno=0
137#endif
138
be5d92e0 139#if defined(WINDOWS) && !defined(__CYGWIN32__)
58964a49
RE
140#define get_last_socket_error() WSAGetLastError()
141#define clear_socket_error() WSASetLastError(0)
dfeab068
RE
142#define readsocket(s,b,n) recv((s),(b),(n),0)
143#define writesocket(s,b,n) send((s),(b),(n),0)
144#define EADDRINUSE WSAEADDRINUSE
9a1e34e5 145#elif defined(MAC_OS_pre_X)
17f389bb
AP
146#define get_last_socket_error() errno
147#define clear_socket_error() errno=0
148#define closesocket(s) MacSocket_close(s)
149#define readsocket(s,b,n) MacSocket_recv((s),(b),(n),true)
150#define writesocket(s,b,n) MacSocket_send((s),(b),(n))
58964a49
RE
151#else
152#define get_last_socket_error() errno
153#define clear_socket_error() errno=0
154#define ioctlsocket(a,b,c) ioctl(a,b,c)
dfeab068
RE
155#define closesocket(s) close(s)
156#define readsocket(s,b,n) read((s),(b),(n))
157#define writesocket(s,b,n) write((s),(b),(n))
58964a49
RE
158#endif
159
d02b48c6 160#ifdef WIN16
58964a49 161# define NO_FP_API
d02b48c6
RE
162# define MS_CALLBACK _far _loadds
163# define MS_FAR _far
164#else
165# define MS_CALLBACK
166# define MS_FAR
167#endif
168
58964a49
RE
169#ifdef NO_STDIO
170# define NO_FP_API
171#endif
172
be5d92e0 173#if (defined(WINDOWS) || defined(MSDOS)) && !defined(__CYGWIN32__)
d02b48c6 174
0056ef5d
RL
175# ifndef S_IFDIR
176# define S_IFDIR _S_IFDIR
177# endif
6e064240 178
0056ef5d
RL
179# ifndef S_IFMT
180# define S_IFMT _S_IFMT
181# endif
6e064240 182
0056ef5d
RL
183# if !defined(WINNT)
184# define NO_SYSLOG
185# endif
186# define NO_DIRENT
d02b48c6 187
d02b48c6
RE
188# ifdef WINDOWS
189# include <windows.h>
190# include <stddef.h>
191# include <errno.h>
192# include <string.h>
193# include <malloc.h>
194# endif
195# include <io.h>
196# include <fcntl.h>
197
71b4d897 198# define ssize_t long
b70dcdfc 199
0056ef5d
RL
200# if defined (__BORLANDC__)
201# define _setmode setmode
202# define _O_TEXT O_TEXT
203# define _O_BINARY O_BINARY
204# define _int64 __int64
205# define _kbhit kbhit
206# endif
31a674d8 207
0056ef5d
RL
208# if defined(WIN16) && !defined(MONOLITH) && defined(SSLEAY) && defined(_WINEXITNOPERSIST)
209# define EXIT(n) { if (n == 0) _wsetexit(_WINEXITNOPERSIST); return(n); }
210# else
211# define EXIT(n) return(n);
212# endif
d02b48c6 213# define LIST_SEPARATOR_CHAR ';'
0056ef5d
RL
214# ifndef X_OK
215# define X_OK 0
216# endif
217# ifndef W_OK
218# define W_OK 2
219# endif
220# ifndef R_OK
221# define R_OK 4
222# endif
06d5b162
RE
223# define OPENSSL_CONF "openssl.cnf"
224# define SSLEAY_CONF OPENSSL_CONF
58964a49 225# define NUL_DEV "nul"
d02b48c6
RE
226# define RFILE ".rnd"
227
228#else /* The non-microsoft world world */
229
7d7d2cbc
UM
230# if defined(__VMS) && !defined(VMS)
231# define VMS 1
232# endif
233
d02b48c6 234# ifdef VMS
7d7d2cbc
UM
235 /* some programs don't include stdlib, so exit() and others give implicit
236 function warnings */
237# include <stdlib.h>
238# if defined(__DECC)
239# include <unistd.h>
240# else
241# include <unixlib.h>
242# endif
243# define OPENSSL_CONF "openssl.cnf"
244# define SSLEAY_CONF OPENSSL_CONF
245# define RFILE ".rnd"
246# define LIST_SEPARATOR_CHAR ','
247# define NUL_DEV "NLA0:"
511e596b
RL
248 /* We need to do this since VMS has the following coding on status codes:
249
250 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
251 The important thing to know is that odd numbers are considered
252 good, while even ones are considered errors.
253 Bits 3-15: actual status number
254 Bits 16-27: facility number. 0 is considered "unknown"
255 Bits 28-31: control bits. If bit 28 is set, the shell won't try to
256 output the message (which, for random codes, just looks ugly)
257
258 So, what we do here is to change 0 to 1 to get the default success status,
259 and everything else is shifted up to fit into the status number field, and
260 the status is tagged as an error, which I believe is what is wanted here.
261 -- Richard Levitte
262 */
263# if !defined(MONOLITH) || defined(OPENSSL_C)
7d7d2cbc 264# define EXIT(n) do { int __VMS_EXIT = n; \
511e596b
RL
265 if (__VMS_EXIT == 0) \
266 __VMS_EXIT = 1; \
267 else \
268 __VMS_EXIT = (n << 3) | 2; \
7d7d2cbc 269 __VMS_EXIT |= 0x10000000; \
511e596b
RL
270 exit(__VMS_EXIT); \
271 return(__VMS_EXIT); } while(0)
7d7d2cbc 272# else
1f515cfe 273# define EXIT(n) return(n)
7d7d2cbc 274# endif
76997b7d 275# define NO_SYS_PARAM_H
d02b48c6 276# else
06018c46 277 /* !defined VMS */
a7c5241f 278# ifdef OPENSSL_UNISTD
404fb714 279# include OPENSSL_UNISTD
a7c5241f
AP
280# else
281# include <unistd.h>
282# endif
9a1e34e5
AP
283# ifndef NO_SYS_TYPES_H
284# include <sys/types.h>
285# endif
fa0ca35b 286# ifdef NeXT
4a56f749
BM
287# define pid_t int /* pid_t is missing on NEXTSTEP/OPENSTEP
288 * (unless when compiling with -D_POSIX_SOURCE,
289 * which doesn't work for us) */
290# define ssize_t int /* ditto */
fa0ca35b 291# endif
d02b48c6 292
7d7d2cbc
UM
293# define OPENSSL_CONF "openssl.cnf"
294# define SSLEAY_CONF OPENSSL_CONF
295# define RFILE ".rnd"
296# define LIST_SEPARATOR_CHAR ':'
297# define NUL_DEV "/dev/null"
298# ifndef MONOLITH
299# define EXIT(n) exit(n); return(n)
300# else
301# define EXIT(n) return(n)
302# endif
d02b48c6 303# endif
d02b48c6
RE
304
305# define SSLeay_getpid() getpid()
306
307#endif
308
7d7d2cbc 309
d02b48c6
RE
310/*************/
311
312#ifdef USE_SOCKETS
313# if defined(WINDOWS) || defined(MSDOS)
314 /* windows world */
315
316# ifdef NO_SOCK
317# define SSLeay_Write(a,b,c) (-1)
318# define SSLeay_Read(a,b,c) (-1)
319# define SHUTDOWN(fd) close(fd)
320# define SHUTDOWN2(fd) close(fd)
321# else
322# include <winsock.h>
323extern HINSTANCE _hInstance;
324# define SSLeay_Write(a,b,c) send((a),(b),(c),0)
325# define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
326# define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); }
327# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); }
328# endif
329
17f389bb
AP
330# elif defined(MAC_OS_pre_X)
331
332# include "MacSocket.h"
333# define SSLeay_Write(a,b,c) MacSocket_send((a),(b),(c))
334# define SSLeay_Read(a,b,c) MacSocket_recv((a),(b),(c),true)
335# define SHUTDOWN(fd) MacSocket_close(fd)
336# define SHUTDOWN2(fd) MacSocket_close(fd)
d02b48c6
RE
337
338# else
339
76997b7d 340# ifndef NO_SYS_PARAM_H
7d7d2cbc
UM
341# include <sys/param.h>
342# endif
343# include <sys/time.h> /* Needed under linux for FD_XXX */
344
345# include <netdb.h>
346# if defined(VMS) && !defined(__DECC)
347# include <socket.h>
348# include <in.h>
349# else
d02b48c6 350# include <sys/socket.h>
58964a49
RE
351# ifdef FILIO_H
352# include <sys/filio.h> /* Added for FIONBIO under unixware */
353# endif
d02b48c6
RE
354# include <netinet/in.h>
355# endif
356
357# if defined(NeXT) || defined(_NEXT_SOURCE)
358# include <sys/fcntl.h>
359# include <sys/types.h>
360# endif
361
362# ifdef AIX
363# include <sys/select.h>
364# endif
365
366# if defined(sun)
367# include <sys/filio.h>
368# else
7d7d2cbc
UM
369# ifndef VMS
370# include <sys/ioctl.h>
371# else
372 /* ioctl is only in VMS > 7.0 and when socketshr is not used */
373# if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
374# include <sys/ioctl.h>
375# endif
376# endif
d02b48c6
RE
377# endif
378
379# ifdef VMS
380# include <unixio.h>
7d7d2cbc
UM
381# if defined(TCPIP_TYPE_SOCKETSHR)
382# include <socketshr.h>
383# endif
d02b48c6
RE
384# endif
385
386# define SSLeay_Read(a,b,c) read((a),(b),(c))
387# define SSLeay_Write(a,b,c) write((a),(b),(c))
497cc4b3
BM
388# define SHUTDOWN(fd) { shutdown((fd),0); closesocket((fd)); }
389# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket((fd)); }
dfeab068 390# define INVALID_SOCKET (-1)
d02b48c6
RE
391# endif
392#endif
393
fd72d831
UM
394#if defined(__ultrix)
395# ifndef ssize_t
396# define ssize_t int
397# endif
398#endif
399
d02b48c6
RE
400#if defined(THREADS) || defined(sun)
401#ifndef _REENTRANT
402#define _REENTRANT
403#endif
404#endif
405
af463e7e 406#if defined(sun) && !defined(__svr4__) && !defined(__SVR4)
b908bd4e 407 /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */
6da6a113
BM
408# define memmove(s1,s2,n) bcopy((s2),(s1),(n))
409# define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b)))
410extern char *sys_errlist[]; extern int sys_nerr;
b908bd4e 411# define strerror(errnum) \
6da6a113 412 (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum])
89269c84
RL
413#endif
414
d02b48c6
RE
415/***********************************************/
416
d02b48c6
RE
417/* do we need to do this for getenv.
418 * Just define getenv for use under windows */
419
420#ifdef WIN16
421/* How to do this needs to be thought out a bit more.... */
422/*char *GETENV(char *);
423#define Getenv GETENV*/
424#define Getenv getenv
425#else
426#define Getenv getenv
427#endif
428
429#define DG_GCC_BUG /* gcc < 2.6.3 on DGUX */
430
431#ifdef sgi
432#define IRIX_CC_BUG /* all version of IRIX I've tested (4.* 5.*) */
433#endif
95f9968e
BM
434#ifdef SNI
435#define IRIX_CC_BUG /* CDS++ up to V2.0Bsomething suffered from the same bug.*/
436#endif
d02b48c6
RE
437
438#ifdef NO_MD2
439#define MD2_Init MD2Init
440#define MD2_Update MD2Update
441#define MD2_Final MD2Final
442#define MD2_DIGEST_LENGTH 16
443#endif
444#ifdef NO_MD5
445#define MD5_Init MD5Init
446#define MD5_Update MD5Update
447#define MD5_Final MD5Final
448#define MD5_DIGEST_LENGTH 16
449#endif
450
451#ifdef __cplusplus
452}
453#endif
454
455#endif
456