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