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