]> git.ipfire.org Git - thirdparty/openssl.git/blame - e_os.h
Move macros for reading/writing integers into ct_locl.h
[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
8d6e6048 463# if defined(WINDOWS) || defined(MSDOS)
d02b48c6
RE
464 /* windows world */
465
0f113f3e 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# define SHUTDOWN(fd) close(fd)
470# define SHUTDOWN2(fd) close(fd)
471# elif !defined(__DJGPP__)
472# if defined(_WIN32_WCE) && _WIN32_WCE<410
473# define getservbyname _masked_declaration_getservbyname
474# endif
475# if !defined(IPPROTO_IP)
a6efc2d1 476 /* winsock[2].h was included already? */
0f113f3e
MC
477# include <winsock.h>
478# endif
479# ifdef getservbyname
480# undef getservbyname
63d3a9c5 481 /* this is used to be wcecompat/include/winsock_extras.h */
0f113f3e
MC
482struct servent *PASCAL getservbyname(const char *, const char *);
483# endif
63d3a9c5 484
0f113f3e 485# ifdef _WIN64
1875e6db
AP
486/*
487 * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
488 * the value constitutes an index in per-process table of limited size
b13fdc48
AP
489 * and not a real pointer. And we also depend on fact that all processors
490 * Windows run on happen to be two's-complement, which allows to
491 * interchange INVALID_SOCKET and -1.
1875e6db 492 */
0f113f3e
MC
493# define socket(d,t,p) ((int)socket(d,t,p))
494# define accept(s,f,l) ((int)accept(s,f,l))
d02b48c6 495# endif
b0700d2c
RS
496# define OpenSSL_Write(a,b,c) send((a),(b),(c),0)
497# define OpenSSL_Read(a,b,c) recv((a),(b),(c),0)
0f113f3e
MC
498# define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); }
499# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); }
500# else
b0700d2c
RS
501# define OpenSSL_Write(a,b,c) write_s(a,b,c,0)
502# define OpenSSL_Read(a,b,c) read_s(a,b,c)
0f113f3e
MC
503# define SHUTDOWN(fd) close_s(fd)
504# define SHUTDOWN2(fd) close_s(fd)
505# endif
d02b48c6 506
4d8743f4 507# elif defined(OPENSSL_SYS_NETWARE)
0f113f3e
MC
508 /*
509 * NetWare uses the WinSock2 interfaces by default, but can be
510 * configured for BSD
511 */
512# if defined(NETWARE_BSDSOCK)
28a0841b 513# include <netdb.h>
0f113f3e
MC
514# include <sys/socket.h>
515# include <netinet/in.h>
516# include <sys/time.h>
517# if defined(NETWARE_CLIB)
518# include <sys/bsdskt.h>
7d7d2cbc 519# else
0f113f3e 520# include <sys/select.h>
d02b48c6 521# endif
0f113f3e
MC
522# define INVALID_SOCKET (int)(~0)
523# else
524# include <novsock2.h>
525# endif
b0700d2c
RS
526# define OpenSSL_Write(a,b,c) send((a),(b),(c),0)
527# define OpenSSL_Read(a,b,c) recv((a),(b),(c),0)
0f113f3e
MC
528# define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); }
529# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); }
d02b48c6 530
0f113f3e 531# else
d02b48c6 532
0f113f3e
MC
533# ifndef NO_SYS_PARAM_H
534# include <sys/param.h>
535# endif
536# ifdef OPENSSL_SYS_VXWORKS
537# include <time.h>
538# endif
539
540# include <netdb.h>
541# if defined(OPENSSL_SYS_VMS_NODECC)
542# include <socket.h>
543# include <in.h>
544# include <inet.h>
545# else
546# include <sys/socket.h>
547# ifndef NO_SYS_UN_H
548# ifdef OPENSSL_SYS_VXWORKS
549# include <streams/un.h>
550# else
551# include <sys/un.h>
552# endif
553# ifndef UNIX_PATH_MAX
554# define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path)
555# endif
a545c6f6 556# endif
0f113f3e 557# ifdef FILIO_H
f6739c3d 558# include <sys/filio.h> /* FIONBIO in some SVR4, e.g. unixware, solaris */
0f113f3e
MC
559# endif
560# include <netinet/in.h>
561# include <arpa/inet.h>
28a0841b 562# include <netinet/tcp.h>
0f113f3e
MC
563# endif
564
565# ifdef OPENSSL_SYS_AIX
566# include <sys/select.h>
567# endif
568
569# ifdef __QNX__
570# include <sys/select.h>
571# endif
572
2f2c805a
AP
573# ifndef VMS
574# include <sys/ioctl.h>
0f113f3e 575# else
2f2c805a
AP
576 /* ioctl is only in VMS > 7.0 and when socketshr is not used */
577# if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
0f113f3e 578# include <sys/ioctl.h>
d02b48c6 579# endif
0f113f3e 580# endif
d02b48c6 581
0f113f3e
MC
582# ifdef VMS
583# include <unixio.h>
584# if defined(TCPIP_TYPE_SOCKETSHR)
585# include <socketshr.h>
d02b48c6 586# endif
0f113f3e
MC
587# endif
588
b0700d2c
RS
589# define OpenSSL_Read(a,b,c) read((a),(b),(c))
590# define OpenSSL_Write(a,b,c) write((a),(b),(c))
0f113f3e
MC
591# define SHUTDOWN(fd) { shutdown((fd),0); closesocket((fd)); }
592# define SHUTDOWN2(fd) { shutdown((fd),2); closesocket((fd)); }
593# ifndef INVALID_SOCKET
594# define INVALID_SOCKET (-1)
595# endif /* INVALID_SOCKET */
d02b48c6 596# endif
a6dab873 597
0f113f3e
MC
598/*
599 * Some IPv6 implementations are broken, disable them in known bad versions.
a6dab873
DSH
600 */
601# if !defined(OPENSSL_USE_IPV6)
0f113f3e
MC
602# if defined(AF_INET6) && !defined(NETWARE_CLIB)
603# define OPENSSL_USE_IPV6 1
604# else
605# define OPENSSL_USE_IPV6 0
606# endif
a6dab873
DSH
607# endif
608
0f113f3e 609# endif
d02b48c6 610
0f113f3e
MC
611# ifndef OPENSSL_EXIT
612# if defined(MONOLITH) && !defined(OPENSSL_C)
613# define OPENSSL_EXIT(n) return(n)
614# else
615# define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0)
616# endif
1c3e4a36 617# endif
1c3e4a36 618
d02b48c6
RE
619/***********************************************/
620
0f113f3e 621# if defined(OPENSSL_SYS_WINDOWS)
e6fa67fa
RL
622# define strcasecmp _stricmp
623# define strncasecmp _strnicmp
0f113f3e 624# elif defined(OPENSSL_SYS_VMS)
e6fa67fa 625/* VMS below version 7.0 doesn't have strcasecmp() */
68570797 626# include "internal/o_str.h"
e6fa67fa
RL
627# define strcasecmp OPENSSL_strcasecmp
628# define strncasecmp OPENSSL_strncasecmp
e6d27baf 629# define OPENSSL_IMPLEMENTS_strncasecmp
0f113f3e 630# elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
e6fa67fa
RL
631# define strcasecmp stricmp
632# define strncasecmp strnicmp
0f113f3e 633# elif defined(OPENSSL_SYS_NETWARE)
eef0c1f3
DSH
634# include <string.h>
635# if defined(NETWARE_CLIB)
0f113f3e
MC
636# define strcasecmp stricmp
637# define strncasecmp strnicmp
638# endif /* NETWARE_CLIB */
639# endif
e6fa67fa 640
0f113f3e
MC
641# if defined(OPENSSL_SYS_OS2) && defined(__EMX__)
642# include <io.h>
643# include <fcntl.h>
644# define NO_SYSLOG
645# endif
3bfd99bf 646
6a89a25c 647/* vxworks */
0f113f3e
MC
648# if defined(OPENSSL_SYS_VXWORKS)
649# include <ioLib.h>
650# include <tickLib.h>
651# include <sysLib.h>
6a89a25c 652
0f113f3e 653# define TTY_STRUCT int
6a89a25c 654
0f113f3e 655# define sleep(a) taskDelay((a) * sysClkRateGet())
6a89a25c 656
0f113f3e
MC
657# include <vxWorks.h>
658# include <sockLib.h>
659# include <taskLib.h>
6a89a25c 660
0f113f3e 661# define getpid taskIdSelf
6a89a25c 662
0f113f3e
MC
663/*
664 * NOTE: these are implemented by helpers in database app! if the database is
665 * not linked, we need to implement them elswhere
666 */
6a89a25c
RL
667struct hostent *gethostbyname(const char *name);
668struct hostent *gethostbyaddr(const char *addr, int length, int type);
669struct servent *getservbyname(const char *name, const char *proto);
670
0f113f3e 671# endif
6a89a25c
RL
672/* end vxworks */
673
b6eb9827
DSH
674#define OSSL_NELEM(x) (sizeof(x)/sizeof(x[0]))
675
d02b48c6
RE
676#ifdef __cplusplus
677}
678#endif
679
680#endif