]> git.ipfire.org Git - thirdparty/openssl.git/blame - e_os.h
RT3548: Remove unsupported platforms
[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
0c61e299
RL
80/* 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 */
e02cc10e 82#define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
d02b48c6 83#endif
599c0353 84#ifndef DEVRANDOM_EGD
478b50cf 85/* set this to a comma-separated list of 'egd' sockets to try out. These
599c0353
LJ
86 * sockets will be tried in the order listed in case accessing the device files
87 * listed in DEVRANDOM did not return enough entropy. */
d4219c48 88#define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
599c0353 89#endif
d02b48c6 90
3e83e686
RL
91#if defined(OPENSSL_SYS_VXWORKS)
92# define NO_SYS_PARAM_H
93# define NO_CHMOD
94# define NO_SYSLOG
95#endif
96
d02b48c6
RE
97/********************************************************************
98 The Microsoft section
99 ********************************************************************/
8711efb4 100/* The following is used because of the small stack in some
d02b48c6 101 * Microsoft operating systems */
6b7e0a99 102#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYSNAME_WIN32)
d02b48c6
RE
103# define MS_STATIC static
104#else
105# define MS_STATIC
106#endif
107
cf1b7d96 108#if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
b8384651
UM
109# define WIN32
110#endif
cf1b7d96
RL
111#if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
112# define WINDOWS
113#endif
114#if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
115# define MSDOS
d02b48c6
RE
116#endif
117
9a1e34e5
AP
118#if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS)
119# define GETPID_IS_MEANINGLESS
120#endif
121
58964a49 122#ifdef WIN32
70857a4a 123#define NO_SYS_UN_H
58964a49
RE
124#define get_last_sys_error() GetLastError()
125#define clear_sys_error() SetLastError(0)
6e064240
DSH
126#if !defined(WINNT)
127#define WIN_CONSOLE_BUG
128#endif
58964a49
RE
129#else
130#define get_last_sys_error() errno
131#define clear_sys_error() errno=0
132#endif
133
cf1b7d96 134#if defined(WINDOWS)
58964a49
RE
135#define get_last_socket_error() WSAGetLastError()
136#define clear_socket_error() WSASetLastError(0)
dfeab068
RE
137#define readsocket(s,b,n) recv((s),(b),(n),0)
138#define writesocket(s,b,n) send((s),(b),(n),0)
f642ebc1
RS
139#elif defined(__DJGPP__)
140#define WATT32
141#define get_last_socket_error() errno
142#define clear_socket_error() errno=0
143#define closesocket(s) close_s(s)
144#define readsocket(s,b,n) read_s(s,b,n)
145#define writesocket(s,b,n) send(s,b,n,0)
10189984 146#elif defined(OPENSSL_SYS_VMS)
1fc02dcf
RL
147#define get_last_socket_error() errno
148#define clear_socket_error() errno=0
149#define ioctlsocket(a,b,c) ioctl(a,b,c)
150#define closesocket(s) close(s)
151#define readsocket(s,b,n) recv((s),(b),(n),0)
152#define writesocket(s,b,n) send((s),(b),(n),0)
c798868d
RL
153#elif defined(OPENSSL_SYS_VXWORKS)
154#define get_last_socket_error() errno
155#define clear_socket_error() errno=0
156#define ioctlsocket(a,b,c) ioctl((a),(b),(int)(c))
157#define closesocket(s) close(s)
158#define readsocket(s,b,n) read((s),(b),(n))
159#define writesocket(s,b,n) write((s),(char *)(b),(n))
47c1735a 160#elif defined(OPENSSL_SYS_NETWARE)
b764ab95
RL
161#if defined(NETWARE_BSDSOCK)
162#define get_last_socket_error() errno
163#define clear_socket_error() errno=0
164#define closesocket(s) close(s)
eef0c1f3
DSH
165#define ioctlsocket(a,b,c) ioctl(a,b,c)
166#if defined(NETWARE_LIBC)
b764ab95
RL
167#define readsocket(s,b,n) recv((s),(b),(n),0)
168#define writesocket(s,b,n) send((s),(b),(n),0)
169#else
eef0c1f3
DSH
170#define readsocket(s,b,n) recv((s),(char*)(b),(n),0)
171#define writesocket(s,b,n) send((s),(char*)(b),(n),0)
172#endif
173#else
47c1735a
RL
174#define get_last_socket_error() WSAGetLastError()
175#define clear_socket_error() WSASetLastError(0)
176#define readsocket(s,b,n) recv((s),(b),(n),0)
177#define writesocket(s,b,n) send((s),(b),(n),0)
b764ab95 178#endif
58964a49
RE
179#else
180#define get_last_socket_error() errno
181#define clear_socket_error() errno=0
182#define ioctlsocket(a,b,c) ioctl(a,b,c)
dfeab068
RE
183#define closesocket(s) close(s)
184#define readsocket(s,b,n) read((s),(b),(n))
185#define writesocket(s,b,n) write((s),(b),(n))
58964a49
RE
186#endif
187
be7b4458 188#ifdef WIN16 /* never the case */
d02b48c6
RE
189# define MS_CALLBACK _far _loadds
190# define MS_FAR _far
191#else
192# define MS_CALLBACK
193# define MS_FAR
194#endif
195
cf1b7d96 196#ifdef OPENSSL_NO_STDIO
d4a47a57 197# undef OPENSSL_NO_FP_API
cf1b7d96 198# define OPENSSL_NO_FP_API
58964a49
RE
199#endif
200
cf1b7d96 201#if (defined(WINDOWS) || defined(MSDOS))
d02b48c6 202
f642ebc1
RS
203# ifdef __DJGPP__
204# include <unistd.h>
205# include <sys/stat.h>
206# include <sys/socket.h>
207# include <tcp.h>
208# include <netdb.h>
209# define _setmode setmode
210# define _O_TEXT O_TEXT
211# define _O_BINARY O_BINARY
212# undef DEVRANDOM
213# define DEVRANDOM "/dev/urandom\x24"
214# endif /* __DJGPP__ */
215
0056ef5d
RL
216# ifndef S_IFDIR
217# define S_IFDIR _S_IFDIR
218# endif
6e064240 219
0056ef5d
RL
220# ifndef S_IFMT
221# define S_IFMT _S_IFMT
222# endif
6e064240 223
f642ebc1 224# if !defined(WINNT) && !defined(__DJGPP__)
0056ef5d
RL
225# define NO_SYSLOG
226# endif
227# define NO_DIRENT
d02b48c6 228
d02b48c6 229# ifdef WINDOWS
2031eca5 230# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT)
e476f942
AP
231 /*
232 * Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
233 * Most notably we ought to check for availability of each specific
63d3a9c5 234 * routine with GetProcAddress() and/or guard NT-specific calls with
e476f942
AP
235 * GetVersion() < 0x80000000. One can argue that in latter "or" case
236 * we ought to /DELAYLOAD some .DLLs in order to protect ourselves
237 * against run-time link errors. This doesn't seem to be necessary,
238 * because it turned out that already Windows 95, first non-NT Win32
239 * implementation, is equipped with at least NT 3.51 stubs, dummy
240 * routines with same name, but which do nothing. Meaning that it's
63d3a9c5
AP
241 * apparently sufficient to guard "vanilla" NT calls with GetVersion
242 * alone, while NT 4.0 and above interfaces ought to be linked with
243 * GetProcAddress at run-time.
e476f942
AP
244 */
245# define _WIN32_WINNT 0x0400
246# endif
a006fef7 247# if !defined(OPENSSL_NO_SOCK) && (defined(_WIN32_WINNT) || defined(_WIN32_WCE))
61aa2134
AP
248 /*
249 * Just like defining _WIN32_WINNT including winsock2.h implies
8711efb4 250 * certain "discipline" for maintaining [broad] binary compatibility.
61aa2134
AP
251 * As long as structures are invariant among Winsock versions,
252 * it's sufficient to check for specific Winsock2 API availability
253 * at run-time [DSO_global_lookup is recommended]...
254 */
255# include <winsock2.h>
256# include <ws2tcpip.h>
8711efb4 257 /* yes, they have to be #included prior to <windows.h> */
61aa2134 258# endif
d02b48c6 259# include <windows.h>
e527201f 260# include <stdio.h>
d02b48c6
RE
261# include <stddef.h>
262# include <errno.h>
a006fef7
AP
263# if defined(_WIN32_WCE) && !defined(EACCES)
264# define EACCES 13
265# endif
d02b48c6 266# include <string.h>
1875e6db
AP
267# ifdef _WIN64
268# define strlen(s) _strlen31(s)
269/* cut strings to 2GB */
55c7a4cf 270static __inline unsigned int _strlen31(const char *str)
1875e6db
AP
271 {
272 unsigned int len=0;
273 while (*str && len<0x80000000U) str++, len++;
274 return len&0x7FFFFFFF;
275 }
276# endif
d02b48c6 277# include <malloc.h>
b7cc9dff 278# if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace)
e527201f 279 /* compensate for bug in VC6 ctype.h */
b7cc9dff
AP
280# undef isspace
281# undef isdigit
282# undef isalnum
283# undef isupper
284# undef isxdigit
285# endif
866f1f41 286# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin)
aab3560b 287# if _MSC_VER>=1300 && _MSC_VER<1600
e527201f
AP
288# undef stdin
289# undef stdout
290# undef stderr
291 FILE *__iob_func();
292# define stdin (&__iob_func()[0])
293# define stdout (&__iob_func()[1])
294# define stderr (&__iob_func()[2])
aab3560b 295# elif _MSC_VER<1300 && defined(I_CAN_LIVE_WITH_LNK4049)
e527201f
AP
296# undef stdin
297# undef stdout
298# undef stderr
299 /* pre-1300 has __p__iob(), but it's available only in msvcrt.lib,
300 * or in other words with /MD. Declaring implicit import, i.e.
301 * with _imp_ prefix, works correctly with all compiler options,
302 * but without /MD results in LINK warning LNK4049:
303 * 'locally defined symbol "__iob" imported'.
304 */
305 extern FILE *_imp___iob;
306# define stdin (&_imp___iob[0])
307# define stdout (&_imp___iob[1])
308# define stderr (&_imp___iob[2])
309# endif
310# endif
d02b48c6 311# endif
2c7af9cb
AP
312# include <io.h>
313# include <fcntl.h>
d02b48c6 314
0bf23d9b 315# ifdef OPENSSL_SYS_WINCE
4d24b4c4 316# define OPENSSL_NO_POSIX_IO
0bf23d9b
RL
317# endif
318
0056ef5d
RL
319# if defined (__BORLANDC__)
320# define _setmode setmode
321# define _O_TEXT O_TEXT
322# define _O_BINARY O_BINARY
323# define _int64 __int64
324# define _kbhit kbhit
325# endif
31a674d8 326
be7b4458 327# define EXIT(n) exit(n)
d02b48c6 328# define LIST_SEPARATOR_CHAR ';'
0056ef5d
RL
329# ifndef X_OK
330# define X_OK 0
331# endif
332# ifndef W_OK
333# define W_OK 2
334# endif
335# ifndef R_OK
336# define R_OK 4
337# endif
06d5b162
RE
338# define OPENSSL_CONF "openssl.cnf"
339# define SSLEAY_CONF OPENSSL_CONF
58964a49 340# define NUL_DEV "nul"
d02b48c6 341# define RFILE ".rnd"
0bf23d9b
RL
342# ifdef OPENSSL_SYS_WINCE
343# define DEFAULT_HOME ""
344# else
345# define DEFAULT_HOME "C:"
346# endif
d02b48c6 347
a4cc3c80
DSH
348/* Avoid Windows 8 SDK GetVersion deprecated problems */
349#if defined(_MSC_VER) && _MSC_VER>=1800
350# define check_winnt() (1)
351#else
352# define check_winnt() (GetVersion() < 0x80000000)
f511b25a
EK
353#endif
354
8711efb4 355#else /* The non-microsoft world */
d02b48c6 356
cf1b7d96
RL
357# ifdef OPENSSL_SYS_VMS
358# define VMS 1
7d7d2cbc
UM
359 /* some programs don't include stdlib, so exit() and others give implicit
360 function warnings */
361# include <stdlib.h>
362# if defined(__DECC)
363# include <unistd.h>
364# else
365# include <unixlib.h>
366# endif
367# define OPENSSL_CONF "openssl.cnf"
368# define SSLEAY_CONF OPENSSL_CONF
369# define RFILE ".rnd"
370# define LIST_SEPARATOR_CHAR ','
371# define NUL_DEV "NLA0:"
0c61e299
RL
372 /* We don't have any well-defined random devices on VMS, yet... */
373# undef DEVRANDOM
511e596b
RL
374 /* We need to do this since VMS has the following coding on status codes:
375
376 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
377 The important thing to know is that odd numbers are considered
378 good, while even ones are considered errors.
379 Bits 3-15: actual status number
380 Bits 16-27: facility number. 0 is considered "unknown"
381 Bits 28-31: control bits. If bit 28 is set, the shell won't try to
382 output the message (which, for random codes, just looks ugly)
383
384 So, what we do here is to change 0 to 1 to get the default success status,
385 and everything else is shifted up to fit into the status number field, and
386 the status is tagged as an error, which I believe is what is wanted here.
387 -- Richard Levitte
388 */
1c3e4a36 389# define EXIT(n) do { int __VMS_EXIT = n; \
511e596b
RL
390 if (__VMS_EXIT == 0) \
391 __VMS_EXIT = 1; \
392 else \
393 __VMS_EXIT = (n << 3) | 2; \
7d7d2cbc 394 __VMS_EXIT |= 0x10000000; \
1c3e4a36 395 exit(__VMS_EXIT); } while(0)
76997b7d 396# define NO_SYS_PARAM_H
4d8743f4
RL
397
398# elif defined(OPENSSL_SYS_NETWARE)
399# include <fcntl.h>
400# include <unistd.h>
401# define NO_SYS_TYPES_H
402# undef DEVRANDOM
403# ifdef NETWARE_CLIB
404# define getpid GetThreadID
eef0c1f3
DSH
405 extern int GetThreadID(void);
406/* # include <conio.h> */
407 extern int kbhit(void);
408# else
409# include <screen.h>
4d8743f4
RL
410# endif
411# define NO_SYSLOG
412# define _setmode setmode
413# define _kbhit kbhit
414# define _O_TEXT O_TEXT
415# define _O_BINARY O_BINARY
416# define OPENSSL_CONF "openssl.cnf"
417# define SSLEAY_CONF OPENSSL_CONF
418# define RFILE ".rnd"
419# define LIST_SEPARATOR_CHAR ';'
420# define EXIT(n) { if (n) printf("ERROR: %d\n", (int)n); exit(n); }
421
d02b48c6 422# else
06018c46 423 /* !defined VMS */
a7c5241f 424# ifdef OPENSSL_UNISTD
404fb714 425# include OPENSSL_UNISTD
a7c5241f
AP
426# else
427# include <unistd.h>
428# endif
9a1e34e5
AP
429# ifndef NO_SYS_TYPES_H
430# include <sys/types.h>
431# endif
474b8a97
AP
432# ifdef OPENSSL_SYS_WIN32_CYGWIN
433# include <io.h>
434# include <fcntl.h>
435# endif
d02b48c6 436
7d7d2cbc
UM
437# define OPENSSL_CONF "openssl.cnf"
438# define SSLEAY_CONF OPENSSL_CONF
439# define RFILE ".rnd"
440# define LIST_SEPARATOR_CHAR ':'
441# define NUL_DEV "/dev/null"
1c3e4a36 442# define EXIT(n) exit(n)
d02b48c6 443# endif
d02b48c6
RE
444
445# define SSLeay_getpid() getpid()
446
447#endif
448
7d7d2cbc 449
d02b48c6
RE
450/*************/
451
be0bd11d
RS
452#if defined(OPENSSL_NO_SOCK) && !defined(OPENSSL_NO_DGRAM)
453# define OPENSSL_NO_DGRAM
454#endif
455
d02b48c6 456#ifdef USE_SOCKETS
8d6e6048 457# if defined(WINDOWS) || defined(MSDOS)
d02b48c6
RE
458 /* windows world */
459
cf1b7d96 460# ifdef OPENSSL_NO_SOCK
d02b48c6
RE
461# define SSLeay_Write(a,b,c) (-1)
462# define SSLeay_Read(a,b,c) (-1)
463# define SHUTDOWN(fd) close(fd)
464# define SHUTDOWN2(fd) close(fd)
f642ebc1 465# elif !defined(__DJGPP__)
63d3a9c5
AP
466# if defined(_WIN32_WCE) && _WIN32_WCE<410
467# define getservbyname _masked_declaration_getservbyname
468# endif
a6efc2d1
AP
469# if !defined(IPPROTO_IP)
470 /* winsock[2].h was included already? */
471# include <winsock.h>
472# endif
63d3a9c5
AP
473# ifdef getservbyname
474# undef getservbyname
475 /* this is used to be wcecompat/include/winsock_extras.h */
476 struct servent* PASCAL getservbyname(const char*,const char*);
477# endif
478
1875e6db
AP
479# ifdef _WIN64
480/*
481 * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
482 * the value constitutes an index in per-process table of limited size
483 * and not a real pointer.
484 */
485# define socket(d,t,p) ((int)socket(d,t,p))
486# define accept(s,f,l) ((int)accept(s,f,l))
487# endif
d02b48c6
RE
488# define SSLeay_Write(a,b,c) send((a),(b),(c),0)
489# define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
490# define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); }
491# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); }
f642ebc1
RS
492# else
493# define SSLeay_Write(a,b,c) write_s(a,b,c,0)
494# define SSLeay_Read(a,b,c) read_s(a,b,c)
495# define SHUTDOWN(fd) close_s(fd)
496# define SHUTDOWN2(fd) close_s(fd)
d02b48c6
RE
497# endif
498
4d8743f4 499# elif defined(OPENSSL_SYS_NETWARE)
b764ab95 500 /* NetWare uses the WinSock2 interfaces by default, but can be configured for BSD
4d8743f4 501 */
b764ab95
RL
502# if defined(NETWARE_BSDSOCK)
503# include <sys/socket.h>
504# include <netinet/in.h>
505# include <sys/time.h>
eef0c1f3
DSH
506# if defined(NETWARE_CLIB)
507# include <sys/bsdskt.h>
508# else
509# include <sys/select.h>
510# endif
b764ab95
RL
511# define INVALID_SOCKET (int)(~0)
512# else
513# include <novsock2.h>
514# endif
4d8743f4
RL
515# define SSLeay_Write(a,b,c) send((a),(b),(c),0)
516# define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
517# define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); }
518# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); }
519
d02b48c6
RE
520# else
521
76997b7d 522# ifndef NO_SYS_PARAM_H
7d7d2cbc
UM
523# include <sys/param.h>
524# endif
3e83e686
RL
525# ifdef OPENSSL_SYS_VXWORKS
526# include <time.h>
c5f8bbbc 527# endif
7d7d2cbc
UM
528
529# include <netdb.h>
cf1b7d96 530# if defined(OPENSSL_SYS_VMS_NODECC)
7d7d2cbc
UM
531# include <socket.h>
532# include <in.h>
a269d312 533# include <inet.h>
7d7d2cbc 534# else
d02b48c6 535# include <sys/socket.h>
a9351320
GT
536# ifndef NO_SYS_UN_H
537# ifdef OPENSSL_SYS_VXWORKS
538# include <streams/un.h>
539# else
540# include <sys/un.h>
541# endif
542# ifndef UNIX_PATH_MAX
543# define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path)
544# endif
545# endif
58964a49
RE
546# ifdef FILIO_H
547# include <sys/filio.h> /* Added for FIONBIO under unixware */
548# endif
d02b48c6 549# include <netinet/in.h>
a269d312 550# include <arpa/inet.h>
d02b48c6
RE
551# endif
552
cf1b7d96 553# ifdef OPENSSL_SYS_AIX
d02b48c6
RE
554# include <sys/select.h>
555# endif
556
a545c6f6
BM
557# ifdef __QNX__
558# include <sys/select.h>
559# endif
560
d02b48c6
RE
561# if defined(sun)
562# include <sys/filio.h>
563# else
7d7d2cbc
UM
564# ifndef VMS
565# include <sys/ioctl.h>
566# else
567 /* ioctl is only in VMS > 7.0 and when socketshr is not used */
568# if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
569# include <sys/ioctl.h>
570# endif
571# endif
d02b48c6
RE
572# endif
573
574# ifdef VMS
575# include <unixio.h>
7d7d2cbc
UM
576# if defined(TCPIP_TYPE_SOCKETSHR)
577# include <socketshr.h>
578# endif
d02b48c6
RE
579# endif
580
581# define SSLeay_Read(a,b,c) read((a),(b),(c))
582# define SSLeay_Write(a,b,c) write((a),(b),(c))
497cc4b3
BM
583# define SHUTDOWN(fd) { shutdown((fd),0); closesocket((fd)); }
584# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket((fd)); }
451dc18f 585# ifndef INVALID_SOCKET
dfeab068 586# define INVALID_SOCKET (-1)
451dc18f 587# endif /* INVALID_SOCKET */
d02b48c6 588# endif
a6dab873
DSH
589
590/* Some IPv6 implementations are broken, disable them in known bad
591 * versions.
592 */
593# if !defined(OPENSSL_USE_IPV6)
b317819b 594# if defined(AF_INET6) && !defined(NETWARE_CLIB)
a6dab873
DSH
595# define OPENSSL_USE_IPV6 1
596# else
597# define OPENSSL_USE_IPV6 0
598# endif
599# endif
600
d02b48c6
RE
601#endif
602
af463e7e 603#if defined(sun) && !defined(__svr4__) && !defined(__SVR4)
bb8aab02 604 /* include headers first, so our defines don't break it */
0fbf5f71
LJ
605#include <stdlib.h>
606#include <string.h>
b908bd4e 607 /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */
6da6a113
BM
608# define memmove(s1,s2,n) bcopy((s2),(s1),(n))
609# define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b)))
610extern char *sys_errlist[]; extern int sys_nerr;
b908bd4e 611# define strerror(errnum) \
6da6a113 612 (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum])
7a06050c 613 /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */
9dba0554 614#include "crypto/o_str.h"
7a06050c 615# define memcmp OPENSSL_memcmp
89269c84
RL
616#endif
617
1c3e4a36
RL
618#ifndef OPENSSL_EXIT
619# if defined(MONOLITH) && !defined(OPENSSL_C)
620# define OPENSSL_EXIT(n) return(n)
621# else
622# define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0)
623# endif
624#endif
625
d02b48c6
RE
626/***********************************************/
627
55c7a4cf
AP
628#ifdef sgi
629#define IRIX_CC_BUG /* all version of IRIX I've tested (4.* 5.*) */
630#endif
631#ifdef OPENSSL_SYS_SNI
632#define IRIX_CC_BUG /* CDS++ up to V2.0Bsomething suffered from the same bug.*/
633#endif
634
e6fa67fa
RL
635#if defined(OPENSSL_SYS_WINDOWS)
636# define strcasecmp _stricmp
637# define strncasecmp _strnicmp
638#elif defined(OPENSSL_SYS_VMS)
639/* VMS below version 7.0 doesn't have strcasecmp() */
3d8b8860 640# include "o_str.h"
e6fa67fa
RL
641# define strcasecmp OPENSSL_strcasecmp
642# define strncasecmp OPENSSL_strncasecmp
e6d27baf 643# define OPENSSL_IMPLEMENTS_strncasecmp
e6fa67fa
RL
644#elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
645# define strcasecmp stricmp
646# define strncasecmp strnicmp
eef0c1f3
DSH
647#elif defined(OPENSSL_SYS_NETWARE)
648# include <string.h>
649# if defined(NETWARE_CLIB)
650# define strcasecmp stricmp
651# define strncasecmp strnicmp
652# endif /* NETWARE_CLIB */
e6fa67fa
RL
653#endif
654
3bfd99bf
RL
655#if defined(OPENSSL_SYS_OS2) && defined(__EMX__)
656# include <io.h>
657# include <fcntl.h>
658# define NO_SYSLOG
3bfd99bf
RL
659#endif
660
6a89a25c
RL
661/* vxworks */
662#if defined(OPENSSL_SYS_VXWORKS)
663#include <ioLib.h>
664#include <tickLib.h>
665#include <sysLib.h>
666
667#define TTY_STRUCT int
668
669#define sleep(a) taskDelay((a) * sysClkRateGet())
6a89a25c
RL
670
671#include <vxWorks.h>
672#include <sockLib.h>
673#include <taskLib.h>
674
675#define getpid taskIdSelf
676
677/* NOTE: these are implemented by helpers in database app!
678 * if the database is not linked, we need to implement them
679 * elswhere */
680struct hostent *gethostbyname(const char *name);
681struct hostent *gethostbyaddr(const char *addr, int length, int type);
682struct servent *getservbyname(const char *name, const char *proto);
683
684#endif
685/* end vxworks */
686
40155f40
AP
687#if !defined(inline) && !defined(__cplusplus)
688# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L
689 /* do nothing, inline works */
55c7a4cf
AP
690# elif defined(__GNUC__) && __GNUC__>=2
691# define inline __inline__
40155f40
AP
692# elif defined(_MSC_VER)
693 /*
694 * Visual Studio: inline is available in C++ only, however
695 * __inline is available for C, see
696 * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
697 */
698# define inline __inline
699# else
700# define inline
701# endif
702#endif
4700aea9 703
d02b48c6
RE
704#ifdef __cplusplus
705}
706#endif
707
708#endif