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