]> git.ipfire.org Git - thirdparty/openssl.git/blame - e_os.h
Convert CRYPTO_LOCK_DSO to new multi-threading API
[thirdparty/openssl.git] / e_os.h
CommitLineData
58964a49 1/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
d02b48c6
RE
2 * All rights reserved.
3 *
4 * This package is an SSL implementation written
5 * by Eric Young (eay@cryptsoft.com).
6 * The implementation was written so as to conform with Netscapes SSL.
0f113f3e 7 *
d02b48c6
RE
8 * This library is free for commercial and non-commercial use as long as
9 * the following conditions are aheared to. The following conditions
10 * apply to all code found in this distribution, be it the RC4, RSA,
11 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12 * included with this distribution is covered by the same copyright terms
13 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
0f113f3e 14 *
d02b48c6
RE
15 * Copyright remains Eric Young's, and as such any Copyright notices in
16 * the code are not to be removed.
17 * If this package is used in a product, Eric Young should be given attribution
18 * as the author of the parts of the library used.
19 * This can be in the form of a textual message at program startup or
20 * in documentation (online or textual) provided with the package.
0f113f3e 21 *
d02b48c6
RE
22 * Redistribution and use in source and binary forms, with or without
23 * modification, are permitted provided that the following conditions
24 * are met:
25 * 1. Redistributions of source code must retain the copyright
26 * notice, this list of conditions and the following disclaimer.
27 * 2. Redistributions in binary form must reproduce the above copyright
28 * notice, this list of conditions and the following disclaimer in the
29 * documentation and/or other materials provided with the distribution.
30 * 3. All advertising materials mentioning features or use of this software
31 * must display the following acknowledgement:
32 * "This product includes cryptographic software written by
33 * Eric Young (eay@cryptsoft.com)"
34 * The word 'cryptographic' can be left out if the rouines from the library
35 * being used are not cryptographic related :-).
0f113f3e 36 * 4. If you include any Windows specific code (or a derivative thereof) from
d02b48c6
RE
37 * the apps directory (application code) you must include an acknowledgement:
38 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
0f113f3e 39 *
d02b48c6
RE
40 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50 * SUCH DAMAGE.
0f113f3e 51 *
d02b48c6
RE
52 * The licence and distribution terms for any publically available version or
53 * derivative of this code cannot be changed. i.e. this code cannot simply be
54 * copied and put under another distribution licence
55 * [including the GNU Public Licence.]
56 */
57
58#ifndef HEADER_E_OS_H
0f113f3e 59# define HEADER_E_OS_H
d02b48c6 60
0f113f3e 61# include <openssl/opensslconf.h>
06018c46 62
0f113f3e
MC
63# include <openssl/e_os2.h>
64/*
65 * <openssl/e_os2.h> contains what we can justify to make visible to the
66 * outside; this file e_os.h is not part of the exported interface.
67 */
fa470a84 68
d02b48c6
RE
69#ifdef __cplusplus
70extern "C" {
71#endif
72
58964a49 73/* Used to checking reference counts, most while doing perl5 stuff :-) */
f3f1cf84
RS
74# if defined(OPENSSL_NO_STDIO)
75# if defined(REF_DEBUG)
76# error "REF_DEBUG requires stdio"
77# endif
78# if defined(REF_PRINT)
79# error "REF_PRINT requires stdio"
80# endif
0f113f3e 81# endif
f3f1cf84
RS
82
83# if defined(REF_DEBUG)
84# define REF_ASSERT_ISNT(test) \
85 (void)((test) ? (OpenSSLDie(__FILE__, __LINE__, "refcount error"), 1) : 0)
86# else
87# define REF_ASSERT_ISNT(i)
984d6c60 88# endif
f3f1cf84
RS
89# ifdef REF_PRINT
90# define REF_PRINT_COUNT(a, b) \
91 fprintf(stderr, "%p:%4d:%s\n", b, b->references, a)
92# else
93# define REF_PRINT_COUNT(a, b)
984d6c60 94# endif
58964a49 95
a773b52a
RS
96# define osslargused(x) (void)x
97
0f113f3e
MC
98# ifndef DEVRANDOM
99/*
100 * set this to a comma-separated list of 'random' device files to try out. My
101 * default, we will try to read at least one of these files
102 */
103# define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
104# endif
0423f812 105# if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD)
0f113f3e
MC
106/*
107 * set this to a comma-separated list of 'egd' sockets to try out. These
108 * sockets will be tried in the order listed in case accessing the device
109 * files listed in DEVRANDOM did not return enough entropy.
110 */
111# define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
112# endif
d02b48c6 113
0f113f3e 114# if defined(OPENSSL_SYS_VXWORKS)
3e83e686
RL
115# define NO_SYS_PARAM_H
116# define NO_CHMOD
117# define NO_SYSLOG
0f113f3e
MC
118# endif
119
d02b48c6
RE
120/********************************************************************
121 The Microsoft section
122 ********************************************************************/
0f113f3e 123# if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
b8384651 124# define WIN32
0f113f3e
MC
125# endif
126# if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
cf1b7d96 127# define WINDOWS
0f113f3e
MC
128# endif
129# if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
cf1b7d96 130# define MSDOS
0f113f3e 131# endif
d02b48c6 132
4d60c7e1 133# if (defined(MSDOS) || defined(OPENSSL_SYS_UEFI)) && !defined(GETPID_IS_MEANINGLESS)
9a1e34e5 134# define GETPID_IS_MEANINGLESS
0f113f3e 135# endif
9a1e34e5 136
0f113f3e
MC
137# ifdef WIN32
138# define NO_SYS_UN_H
139# define get_last_sys_error() GetLastError()
140# define clear_sys_error() SetLastError(0)
141# if !defined(WINNT)
142# define WIN_CONSOLE_BUG
143# endif
144# else
145# define get_last_sys_error() errno
146# define clear_sys_error() errno=0
147# endif
58964a49 148
0f113f3e
MC
149# if defined(WINDOWS)
150# define get_last_socket_error() WSAGetLastError()
151# define clear_socket_error() WSASetLastError(0)
152# define readsocket(s,b,n) recv((s),(b),(n),0)
153# define writesocket(s,b,n) send((s),(b),(n),0)
154# elif defined(__DJGPP__)
155# define WATT32
156# define get_last_socket_error() errno
157# define clear_socket_error() errno=0
158# define closesocket(s) close_s(s)
159# define readsocket(s,b,n) read_s(s,b,n)
160# define writesocket(s,b,n) send(s,b,n,0)
161# elif defined(OPENSSL_SYS_VMS)
162# define get_last_socket_error() errno
163# define clear_socket_error() errno=0
164# define ioctlsocket(a,b,c) ioctl(a,b,c)
165# define closesocket(s) close(s)
166# define readsocket(s,b,n) recv((s),(b),(n),0)
167# define writesocket(s,b,n) send((s),(b),(n),0)
168# elif defined(OPENSSL_SYS_VXWORKS)
169# define get_last_socket_error() errno
170# define clear_socket_error() errno=0
171# define ioctlsocket(a,b,c) ioctl((a),(b),(int)(c))
172# define closesocket(s) close(s)
173# define readsocket(s,b,n) read((s),(b),(n))
174# define writesocket(s,b,n) write((s),(char *)(b),(n))
175# elif defined(OPENSSL_SYS_NETWARE)
176# if defined(NETWARE_BSDSOCK)
177# define get_last_socket_error() errno
178# define clear_socket_error() errno=0
179# define closesocket(s) close(s)
180# define ioctlsocket(a,b,c) ioctl(a,b,c)
181# if defined(NETWARE_LIBC)
182# define readsocket(s,b,n) recv((s),(b),(n),0)
183# define writesocket(s,b,n) send((s),(b),(n),0)
184# else
185# define readsocket(s,b,n) recv((s),(char*)(b),(n),0)
186# define writesocket(s,b,n) send((s),(char*)(b),(n),0)
187# endif
188# else
189# define get_last_socket_error() WSAGetLastError()
190# define clear_socket_error() WSASetLastError(0)
191# define readsocket(s,b,n) recv((s),(b),(n),0)
192# define writesocket(s,b,n) send((s),(b),(n),0)
193# endif
194# else
195# define get_last_socket_error() errno
196# define clear_socket_error() errno=0
197# define ioctlsocket(a,b,c) ioctl(a,b,c)
198# define closesocket(s) close(s)
199# define readsocket(s,b,n) read((s),(b),(n))
200# define writesocket(s,b,n) write((s),(b),(n))
201# endif
58964a49 202
0f113f3e 203# if (defined(WINDOWS) || defined(MSDOS))
d02b48c6 204
f642ebc1 205# ifdef __DJGPP__
0f113f3e
MC
206# include <unistd.h>
207# include <sys/stat.h>
208# include <sys/socket.h>
209# include <tcp.h>
210# include <netdb.h>
211# define _setmode setmode
212# define _O_TEXT O_TEXT
213# define _O_BINARY O_BINARY
214# undef DEVRANDOM
215# define DEVRANDOM "/dev/urandom\x24"
216# endif /* __DJGPP__ */
f642ebc1 217
0056ef5d 218# ifndef S_IFDIR
0f113f3e 219# define S_IFDIR _S_IFDIR
0056ef5d 220# endif
6e064240 221
0056ef5d 222# ifndef S_IFMT
0f113f3e 223# define S_IFMT _S_IFMT
0056ef5d 224# endif
6e064240 225
f642ebc1 226# if !defined(WINNT) && !defined(__DJGPP__)
0f113f3e 227# define NO_SYSLOG
0056ef5d
RL
228# endif
229# define NO_DIRENT
d02b48c6 230
d02b48c6 231# ifdef WINDOWS
0f113f3e 232# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT)
e476f942 233 /*
0f113f3e
MC
234 * Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
235 * Most notably we ought to check for availability of each specific
0ee05b73
AP
236 * routine that was introduced after denoted _WIN32_WINNT with
237 * GetProcAddress(). Normally newer functions are masked with higher
238 * _WIN32_WINNT in SDK headers. So that if you wish to use them in
239 * some module, you'd need to override _WIN32_WINNT definition in
240 * the target module in order to "reach for" prototypes, but replace
241 * calls to new functions with indirect calls. Alternatively it
242 * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs
243 * and check for current OS version instead.
0f113f3e 244 */
0ee05b73 245# define _WIN32_WINNT 0x0501
0f113f3e
MC
246# endif
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 */
0f113f3e
MC
255# include <winsock2.h>
256# include <ws2tcpip.h>
8711efb4 257 /* yes, they have to be #included prior to <windows.h> */
0f113f3e
MC
258# endif
259# include <windows.h>
260# include <stdio.h>
261# include <stddef.h>
262# include <errno.h>
263# if defined(_WIN32_WCE) && !defined(EACCES)
264# define EACCES 13
265# endif
266# include <string.h>
267# ifdef _WIN64
268# define strlen(s) _strlen31(s)
1875e6db 269/* cut strings to 2GB */
55c7a4cf 270static __inline unsigned int _strlen31(const char *str)
0f113f3e
MC
271{
272 unsigned int len = 0;
273 while (*str && len < 0x80000000U)
274 str++, len++;
275 return len & 0x7FFFFFFF;
276}
277# endif
278# include <malloc.h>
279# if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace)
e527201f 280 /* compensate for bug in VC6 ctype.h */
0f113f3e
MC
281# undef isspace
282# undef isdigit
283# undef isalnum
284# undef isupper
285# undef isxdigit
286# endif
287# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin)
288# if _MSC_VER>=1300 && _MSC_VER<1600
289# undef stdin
290# undef stdout
291# undef stderr
292FILE *__iob_func();
293# define stdin (&__iob_func()[0])
294# define stdout (&__iob_func()[1])
295# define stderr (&__iob_func()[2])
296# elif _MSC_VER<1300 && defined(I_CAN_LIVE_WITH_LNK4049)
297# undef stdin
298# undef stdout
299# undef stderr
300 /*
301 * pre-1300 has __p__iob(), but it's available only in msvcrt.lib,
302 * or in other words with /MD. Declaring implicit import, i.e. with
303 * _imp_ prefix, works correctly with all compiler options, but
304 * without /MD results in LINK warning LNK4049: 'locally defined
305 * symbol "__iob" imported'.
e527201f 306 */
0f113f3e
MC
307extern FILE *_imp___iob;
308# define stdin (&_imp___iob[0])
309# define stdout (&_imp___iob[1])
310# define stderr (&_imp___iob[2])
e527201f 311# endif
0f113f3e 312# endif
d02b48c6 313# endif
0f113f3e
MC
314# include <io.h>
315# include <fcntl.h>
d02b48c6 316
0bf23d9b 317# ifdef OPENSSL_SYS_WINCE
0f113f3e 318# define OPENSSL_NO_POSIX_IO
0bf23d9b
RL
319# endif
320
0056ef5d 321# if defined (__BORLANDC__)
0f113f3e
MC
322# define _setmode setmode
323# define _O_TEXT O_TEXT
324# define _O_BINARY O_BINARY
325# define _int64 __int64
326# define _kbhit kbhit
0056ef5d 327# endif
31a674d8 328
be7b4458 329# define EXIT(n) exit(n)
d02b48c6 330# define LIST_SEPARATOR_CHAR ';'
0056ef5d 331# ifndef X_OK
0f113f3e 332# define X_OK 0
0056ef5d
RL
333# endif
334# ifndef W_OK
0f113f3e 335# define W_OK 2
0056ef5d
RL
336# endif
337# ifndef R_OK
0f113f3e 338# define R_OK 4
0056ef5d 339# endif
0f113f3e 340# define OPENSSL_CONF "openssl.cnf"
0f113f3e
MC
341# define NUL_DEV "nul"
342# define RFILE ".rnd"
0bf23d9b 343# ifdef OPENSSL_SYS_WINCE
0f113f3e 344# define DEFAULT_HOME ""
0bf23d9b 345# else
0f113f3e 346# define DEFAULT_HOME "C:"
0bf23d9b 347# endif
d02b48c6 348
86d21d0b 349/* Avoid Visual Studio 13 GetVersion deprecated problems */
0f113f3e
MC
350# if defined(_MSC_VER) && _MSC_VER>=1800
351# define check_winnt() (1)
352# define check_win_minplat(x) (1)
353# else
354# define check_winnt() (GetVersion() < 0x80000000)
355# define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x))
356# endif
f511b25a 357
0f113f3e 358# else /* The non-microsoft world */
d02b48c6 359
cf1b7d96 360# ifdef OPENSSL_SYS_VMS
0f113f3e
MC
361# define VMS 1
362 /*
363 * some programs don't include stdlib, so exit() and others give implicit
364 * function warnings
365 */
366# include <stdlib.h>
367# if defined(__DECC)
368# include <unistd.h>
369# else
370# include <unixlib.h>
371# endif
372# define OPENSSL_CONF "openssl.cnf"
0f113f3e
MC
373# define RFILE ".rnd"
374# define LIST_SEPARATOR_CHAR ','
375# define NUL_DEV "NLA0:"
0c61e299 376 /* We don't have any well-defined random devices on VMS, yet... */
0f113f3e 377# undef DEVRANDOM
1d97c843
TH
378 /*-
379 We need to do this since VMS has the following coding on status codes:
511e596b
RL
380
381 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
382 The important thing to know is that odd numbers are considered
0f113f3e 383 good, while even ones are considered errors.
511e596b
RL
384 Bits 3-15: actual status number
385 Bits 16-27: facility number. 0 is considered "unknown"
386 Bits 28-31: control bits. If bit 28 is set, the shell won't try to
387 output the message (which, for random codes, just looks ugly)
388
389 So, what we do here is to change 0 to 1 to get the default success status,
390 and everything else is shifted up to fit into the status number field, and
f625d383 391 the status is tagged as an error, which is what is wanted here.
c3944a99
RL
392
393 Finally, we add the VMS C facility code 0x35a000, because there are some
394 programs, such as Perl, that will reinterpret the code back to something
395 POSIXly. 'man perlvms' explains it further.
f625d383 396
c3944a99
RL
397 NOTE: the perlvms manual wants to turn all codes 2 to 255 into success
398 codes (status type = 1). I couldn't disagree more. Fortunately, the
399 status type doesn't seem to bother Perl.
511e596b
RL
400 -- Richard Levitte
401 */
f625d383
RL
402# define EXIT(n) exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1)
403
0f113f3e 404# define NO_SYS_PARAM_H
c168a027 405# define NO_SYS_UN_H
4d8743f4
RL
406
407# elif defined(OPENSSL_SYS_NETWARE)
0f113f3e
MC
408# include <fcntl.h>
409# include <unistd.h>
410# define NO_SYS_TYPES_H
411# undef DEVRANDOM
412# ifdef NETWARE_CLIB
413# define getpid GetThreadID
414extern int GetThreadID(void);
eef0c1f3 415/* # include <conio.h> */
0f113f3e
MC
416extern int kbhit(void);
417# else
418# include <screen.h>
419# endif
420# define NO_SYSLOG
421# define _setmode setmode
422# define _kbhit kbhit
423# define _O_TEXT O_TEXT
424# define _O_BINARY O_BINARY
425# define OPENSSL_CONF "openssl.cnf"
0f113f3e
MC
426# define RFILE ".rnd"
427# define LIST_SEPARATOR_CHAR ';'
428# define EXIT(n) { if (n) printf("ERROR: %d\n", (int)n); exit(n); }
4d8743f4 429
d02b48c6 430# else
06018c46 431 /* !defined VMS */
0f113f3e
MC
432# ifdef OPENSSL_UNISTD
433# include OPENSSL_UNISTD
434# else
435# include <unistd.h>
436# endif
437# ifndef NO_SYS_TYPES_H
438# include <sys/types.h>
439# endif
440# ifdef OPENSSL_SYS_WIN32_CYGWIN
441# include <io.h>
442# include <fcntl.h>
443# endif
444
445# define OPENSSL_CONF "openssl.cnf"
0f113f3e
MC
446# define RFILE ".rnd"
447# define LIST_SEPARATOR_CHAR ':'
448# define NUL_DEV "/dev/null"
449# define EXIT(n) exit(n)
d02b48c6 450# endif
d02b48c6 451
b0700d2c 452# define OpenSSL_getpid() getpid()
d02b48c6 453
0f113f3e 454# endif
7d7d2cbc 455
d02b48c6
RE
456/*************/
457
0f113f3e 458# if defined(OPENSSL_NO_SOCK) && !defined(OPENSSL_NO_DGRAM)
be0bd11d 459# define OPENSSL_NO_DGRAM
0f113f3e 460# endif
be0bd11d 461
0f113f3e 462# ifdef USE_SOCKETS
37b1f8bd
RS
463# if defined(WINDOWS) || defined(MSDOS)
464 /* windows world */
465
466# ifdef OPENSSL_NO_SOCK
b0700d2c
RS
467# define OpenSSL_Write(a,b,c) (-1)
468# define OpenSSL_Read(a,b,c) (-1)
0f113f3e
MC
469# elif !defined(__DJGPP__)
470# if defined(_WIN32_WCE) && _WIN32_WCE<410
471# define getservbyname _masked_declaration_getservbyname
472# endif
473# if !defined(IPPROTO_IP)
a6efc2d1 474 /* winsock[2].h was included already? */
0f113f3e
MC
475# include <winsock.h>
476# endif
477# ifdef getservbyname
478# undef getservbyname
63d3a9c5 479 /* this is used to be wcecompat/include/winsock_extras.h */
0f113f3e
MC
480struct servent *PASCAL getservbyname(const char *, const char *);
481# endif
63d3a9c5 482
0f113f3e 483# ifdef _WIN64
1875e6db
AP
484/*
485 * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
486 * the value constitutes an index in per-process table of limited size
b13fdc48
AP
487 * and not a real pointer. And we also depend on fact that all processors
488 * Windows run on happen to be two's-complement, which allows to
489 * interchange INVALID_SOCKET and -1.
1875e6db 490 */
0f113f3e
MC
491# define socket(d,t,p) ((int)socket(d,t,p))
492# define accept(s,f,l) ((int)accept(s,f,l))
d02b48c6 493# endif
b0700d2c
RS
494# define OpenSSL_Write(a,b,c) send((a),(b),(c),0)
495# define OpenSSL_Read(a,b,c) recv((a),(b),(c),0)
0f113f3e 496# else
b0700d2c
RS
497# define OpenSSL_Write(a,b,c) write_s(a,b,c,0)
498# define OpenSSL_Read(a,b,c) read_s(a,b,c)
0f113f3e 499# endif
d02b48c6 500
4d8743f4 501# elif defined(OPENSSL_SYS_NETWARE)
0f113f3e
MC
502 /*
503 * NetWare uses the WinSock2 interfaces by default, but can be
504 * configured for BSD
505 */
506# if defined(NETWARE_BSDSOCK)
28a0841b 507# include <netdb.h>
0f113f3e
MC
508# include <sys/socket.h>
509# include <netinet/in.h>
510# include <sys/time.h>
511# if defined(NETWARE_CLIB)
512# include <sys/bsdskt.h>
7d7d2cbc 513# else
0f113f3e 514# include <sys/select.h>
d02b48c6 515# endif
0f113f3e
MC
516# define INVALID_SOCKET (int)(~0)
517# else
518# include <novsock2.h>
519# endif
b0700d2c
RS
520# define OpenSSL_Write(a,b,c) send((a),(b),(c),0)
521# define OpenSSL_Read(a,b,c) recv((a),(b),(c),0)
d02b48c6 522
0f113f3e 523# else
d02b48c6 524
0f113f3e
MC
525# ifndef NO_SYS_PARAM_H
526# include <sys/param.h>
527# endif
528# ifdef OPENSSL_SYS_VXWORKS
529# include <time.h>
530# endif
531
532# include <netdb.h>
533# if defined(OPENSSL_SYS_VMS_NODECC)
534# include <socket.h>
535# include <in.h>
536# include <inet.h>
537# else
538# include <sys/socket.h>
539# ifndef NO_SYS_UN_H
540# ifdef OPENSSL_SYS_VXWORKS
541# include <streams/un.h>
542# else
543# include <sys/un.h>
544# endif
545# ifndef UNIX_PATH_MAX
546# define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path)
547# endif
a545c6f6 548# endif
0f113f3e 549# ifdef FILIO_H
f6739c3d 550# include <sys/filio.h> /* FIONBIO in some SVR4, e.g. unixware, solaris */
0f113f3e
MC
551# endif
552# include <netinet/in.h>
553# include <arpa/inet.h>
28a0841b 554# include <netinet/tcp.h>
0f113f3e
MC
555# endif
556
557# ifdef OPENSSL_SYS_AIX
558# include <sys/select.h>
559# endif
560
561# ifdef __QNX__
562# include <sys/select.h>
563# endif
564
2f2c805a
AP
565# ifndef VMS
566# include <sys/ioctl.h>
0f113f3e 567# else
2f2c805a
AP
568 /* ioctl is only in VMS > 7.0 and when socketshr is not used */
569# if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
0f113f3e 570# include <sys/ioctl.h>
d02b48c6 571# endif
0f113f3e 572# endif
d02b48c6 573
0f113f3e
MC
574# ifdef VMS
575# include <unixio.h>
576# if defined(TCPIP_TYPE_SOCKETSHR)
577# include <socketshr.h>
d02b48c6 578# endif
0f113f3e
MC
579# endif
580
b0700d2c
RS
581# define OpenSSL_Read(a,b,c) read((a),(b),(c))
582# define OpenSSL_Write(a,b,c) write((a),(b),(c))
0f113f3e
MC
583# ifndef INVALID_SOCKET
584# define INVALID_SOCKET (-1)
585# endif /* INVALID_SOCKET */
d02b48c6 586# endif
a6dab873 587
0f113f3e
MC
588/*
589 * Some IPv6 implementations are broken, disable them in known bad versions.
a6dab873
DSH
590 */
591# if !defined(OPENSSL_USE_IPV6)
0f113f3e
MC
592# if defined(AF_INET6) && !defined(NETWARE_CLIB)
593# define OPENSSL_USE_IPV6 1
594# else
595# define OPENSSL_USE_IPV6 0
596# endif
a6dab873
DSH
597# endif
598
0f113f3e 599# endif
d02b48c6 600
0f113f3e
MC
601# ifndef OPENSSL_EXIT
602# if defined(MONOLITH) && !defined(OPENSSL_C)
603# define OPENSSL_EXIT(n) return(n)
604# else
605# define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0)
606# endif
1c3e4a36 607# endif
1c3e4a36 608
d02b48c6
RE
609/***********************************************/
610
0f113f3e 611# if defined(OPENSSL_SYS_WINDOWS)
e6fa67fa
RL
612# define strcasecmp _stricmp
613# define strncasecmp _strnicmp
0f113f3e 614# elif defined(OPENSSL_SYS_VMS)
e6fa67fa 615/* VMS below version 7.0 doesn't have strcasecmp() */
68570797 616# include "internal/o_str.h"
e6fa67fa
RL
617# define strcasecmp OPENSSL_strcasecmp
618# define strncasecmp OPENSSL_strncasecmp
e6d27baf 619# define OPENSSL_IMPLEMENTS_strncasecmp
0f113f3e 620# elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
e6fa67fa
RL
621# define strcasecmp stricmp
622# define strncasecmp strnicmp
0f113f3e 623# elif defined(OPENSSL_SYS_NETWARE)
eef0c1f3
DSH
624# include <string.h>
625# if defined(NETWARE_CLIB)
0f113f3e
MC
626# define strcasecmp stricmp
627# define strncasecmp strnicmp
628# endif /* NETWARE_CLIB */
629# endif
e6fa67fa 630
0f113f3e
MC
631# if defined(OPENSSL_SYS_OS2) && defined(__EMX__)
632# include <io.h>
633# include <fcntl.h>
634# define NO_SYSLOG
635# endif
3bfd99bf 636
6a89a25c 637/* vxworks */
0f113f3e
MC
638# if defined(OPENSSL_SYS_VXWORKS)
639# include <ioLib.h>
640# include <tickLib.h>
641# include <sysLib.h>
6a89a25c 642
0f113f3e 643# define TTY_STRUCT int
6a89a25c 644
0f113f3e 645# define sleep(a) taskDelay((a) * sysClkRateGet())
6a89a25c 646
0f113f3e
MC
647# include <vxWorks.h>
648# include <sockLib.h>
649# include <taskLib.h>
6a89a25c 650
0f113f3e 651# define getpid taskIdSelf
6a89a25c 652
0f113f3e
MC
653/*
654 * NOTE: these are implemented by helpers in database app! if the database is
655 * not linked, we need to implement them elswhere
656 */
6a89a25c
RL
657struct hostent *gethostbyname(const char *name);
658struct hostent *gethostbyaddr(const char *addr, int length, int type);
659struct servent *getservbyname(const char *name, const char *proto);
660
0f113f3e 661# endif
6a89a25c
RL
662/* end vxworks */
663
b6eb9827
DSH
664#define OSSL_NELEM(x) (sizeof(x)/sizeof(x[0]))
665
d02b48c6
RE
666#ifdef __cplusplus
667}
668#endif
669
670#endif