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