e_os.h revision 7f7ea2d72f2e316ba518e82f06513e3477840c15
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* e_os.h */
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * All rights reserved.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This package is an SSL implementation written
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * by Eric Young (eay@cryptsoft.com).
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The implementation was written so as to conform with Netscapes SSL.
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This library is free for commercial and non-commercial use as long as
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the following conditions are aheared to.  The following conditions
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * apply to all code found in this distribution, be it the RC4, RSA,
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * included with this distribution is covered by the same copyright terms
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * Copyright remains Eric Young's, and as such any Copyright notices in
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * the code are not to be removed.
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * If this package is used in a product, Eric Young should be given attribution
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * as the author of the parts of the library used.
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * This can be in the form of a textual message at program startup or
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * in documentation (online or textual) provided with the package.
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * Redistribution and use in source and binary forms, with or without
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * modification, are permitted provided that the following conditions
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * are met:
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * 1. Redistributions of source code must retain the copyright
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    notice, this list of conditions and the following disclaimer.
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    notice, this list of conditions and the following disclaimer in the
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch *    documentation and/or other materials provided with the distribution.
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * 3. All advertising materials mentioning features or use of this software
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    must display the following acknowledgement:
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    "This product includes cryptographic software written by
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *     Eric Young (eay@cryptsoft.com)"
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    The word 'cryptographic' can be left out if the rouines from the library
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    being used are not cryptographic related :-).
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 4. If you include any Windows specific code (or a derivative thereof) from
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    the apps directory (application code) you must include an acknowledgement:
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * SUCH DAMAGE.
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * The licence and distribution terms for any publically available version or
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * derivative of this code cannot be changed.  i.e. this code cannot simply be
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * copied and put under another distribution licence
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * [including the GNU Public Licence.]
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef HEADER_E_OS_H
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define HEADER_E_OS_H
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <openssl/opensslconf.h>
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <openssl/e_os2.h>
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/* <openssl/e_os2.h> contains what we can justify to make visible
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * to the outside; this file e_os.h is not part of the exported
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * interface. */
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef  __cplusplus
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)extern "C" {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/* Used to checking reference counts, most while doing perl5 stuff :-) */
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef REF_PRINT
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef REF_PRINT
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REF_PRINT(a,b)	fprintf(stderr,"%08X:%4d:%s\n",(int)b,b->references,a)
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef DEVRANDOM
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/* set this to a comma-separated list of 'random' device files to try out.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * My default, we will try to read at least one of these files */
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef DEVRANDOM_EGD
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* set this to a comma-seperated list of 'egd' sockets to try out. These
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * sockets will be tried in the order listed in case accessing the device files
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * listed in DEVRANDOM did not return enough entropy. */
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
90ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OPENSSL_SYS_VXWORKS)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  define NO_SYS_PARAM_H
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  define NO_CHMOD
94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#  define NO_SYSLOG
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# if macintosh==1
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  ifndef MAC_OS_GUSI_SOURCE
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#    define MAC_OS_pre_X
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#    define NO_SYS_TYPES_H
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#  endif
10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#  define NO_SYS_PARAM_H
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  define NO_CHMOD
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  define NO_SYSLOG
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#  undef  DEVRANDOM
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#  define GETPID_IS_MEANINGLESS
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# endif
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/********************************************************************
112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch The Microsoft section
113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ********************************************************************/
114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch/* The following is used because of the small stack in some
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Microsoft operating systems */
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYSNAME_WIN32)
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#  define MS_STATIC	static
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#  define MS_STATIC
120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#  define WIN32
124a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif
125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#  define WINDOWS
127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#  define MSDOS
130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS)
133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#  define GETPID_IS_MEANINGLESS
134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifdef WIN32
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define get_last_sys_error()	GetLastError()
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define clear_sys_error()	SetLastError(0)
13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(WINNT)
14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define WIN_CONSOLE_BUG
14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#else
143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define get_last_sys_error()	errno
144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define clear_sys_error()	errno=0
145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(WINDOWS)
148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define get_last_socket_error()	WSAGetLastError()
149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define clear_socket_error()	WSASetLastError(0)
150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define readsocket(s,b,n)	recv((s),(b),(n),0)
151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define writesocket(s,b,n)	send((s),(b),(n),0)
152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#elif defined(__DJGPP__)
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define WATT32
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define get_last_socket_error()	errno
155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define clear_socket_error()	errno=0
156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define closesocket(s)		close_s(s)
157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define readsocket(s,b,n)	read_s(s,b,n)
158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define writesocket(s,b,n)	send(s,b,n,0)
159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#elif defined(MAC_OS_pre_X)
160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define get_last_socket_error()	errno
161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define clear_socket_error()	errno=0
162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define closesocket(s)		MacSocket_close(s)
163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define readsocket(s,b,n)	MacSocket_recv((s),(b),(n),true)
164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define writesocket(s,b,n)	MacSocket_send((s),(b),(n))
165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#elif defined(OPENSSL_SYS_VMS)
166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define get_last_socket_error() errno
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define clear_socket_error()    errno=0
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define ioctlsocket(a,b,c)      ioctl(a,b,c)
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define closesocket(s)          close(s)
170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define readsocket(s,b,n)       recv((s),(b),(n),0)
171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define writesocket(s,b,n)      send((s),(b),(n),0)
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#elif defined(OPENSSL_SYS_VXWORKS)
173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define get_last_socket_error()	errno
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define clear_socket_error()	errno=0
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define ioctlsocket(a,b,c)	    ioctl((a),(b),(int)(c))
17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define closesocket(s)		    close(s)
17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define readsocket(s,b,n)	    read((s),(b),(n))
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define writesocket(s,b,n)	    write((s),(char *)(b),(n))
17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OPENSSL_SYS_BEOS_R5)
18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define get_last_socket_error() errno
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define clear_socket_error()    errno=0
18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define FIONBIO SO_NONBLOCK
18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define ioctlsocket(a,b,c)		  setsockopt((a),SOL_SOCKET,(b),(c),sizeof(*(c)))
18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define readsocket(s,b,n)       recv((s),(b),(n),0)
18546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define writesocket(s,b,n)      send((s),(b),(n),0)
18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OPENSSL_SYS_NETWARE)
18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(NETWARE_BSDSOCK)
18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define get_last_socket_error() errno
18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define clear_socket_error()    errno=0
19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define closesocket(s)          close(s)
19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define ioctlsocket(a,b,c)      ioctl(a,b,c)
19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(NETWARE_LIBC)
19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define readsocket(s,b,n)       recv((s),(b),(n),0)
19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define writesocket(s,b,n)      send((s),(b),(n),0)
19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define readsocket(s,b,n)       recv((s),(char*)(b),(n),0)
19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define writesocket(s,b,n)      send((s),(char*)(b),(n),0)
19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define get_last_socket_error()	WSAGetLastError()
20146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define clear_socket_error()	WSASetLastError(0)
20246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define readsocket(s,b,n)		recv((s),(b),(n),0)
20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define writesocket(s,b,n)		send((s),(b),(n),0)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
205#else
206#define get_last_socket_error()	errno
207#define clear_socket_error()	errno=0
208#define ioctlsocket(a,b,c)	ioctl(a,b,c)
209#define closesocket(s)		close(s)
210#define readsocket(s,b,n)	read((s),(b),(n))
211#define writesocket(s,b,n)	write((s),(b),(n))
212#endif
213
214#ifdef WIN16 /* never the case */
215#  define MS_CALLBACK	_far _loadds
216#  define MS_FAR	_far
217#else
218#  define MS_CALLBACK
219#  define MS_FAR
220#endif
221
222#ifdef OPENSSL_NO_STDIO
223#  undef OPENSSL_NO_FP_API
224#  define OPENSSL_NO_FP_API
225#endif
226
227#if (defined(WINDOWS) || defined(MSDOS))
228
229#  ifdef __DJGPP__
230#    include <unistd.h>
231#    include <sys/stat.h>
232#    include <sys/socket.h>
233#    include <tcp.h>
234#    include <netdb.h>
235#    define _setmode setmode
236#    define _O_TEXT O_TEXT
237#    define _O_BINARY O_BINARY
238#    undef DEVRANDOM
239#    define DEVRANDOM "/dev/urandom\x24"
240#  endif /* __DJGPP__ */
241
242#  ifndef S_IFDIR
243#    define S_IFDIR	_S_IFDIR
244#  endif
245
246#  ifndef S_IFMT
247#    define S_IFMT	_S_IFMT
248#  endif
249
250#  if !defined(WINNT) && !defined(__DJGPP__)
251#    define NO_SYSLOG
252#  endif
253#  define NO_DIRENT
254
255#  ifdef WINDOWS
256#    if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT)
257       /*
258	* Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
259	* Most notably we ought to check for availability of each specific
260	* routine with GetProcAddress() and/or guard NT-specific calls with
261	* GetVersion() < 0x80000000. One can argue that in latter "or" case
262	* we ought to /DELAYLOAD some .DLLs in order to protect ourselves
263	* against run-time link errors. This doesn't seem to be necessary,
264	* because it turned out that already Windows 95, first non-NT Win32
265	* implementation, is equipped with at least NT 3.51 stubs, dummy
266	* routines with same name, but which do nothing. Meaning that it's
267	* apparently sufficient to guard "vanilla" NT calls with GetVersion
268	* alone, while NT 4.0 and above interfaces ought to be linked with
269	* GetProcAddress at run-time.
270	*/
271#      define _WIN32_WINNT 0x0400
272#    endif
273#    if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT)
274       /*
275        * Just like defining _WIN32_WINNT including winsock2.h implies
276        * certain "discipline" for maintaining [broad] binary compatibility.
277        * As long as structures are invariant among Winsock versions,
278        * it's sufficient to check for specific Winsock2 API availability
279        * at run-time [DSO_global_lookup is recommended]...
280        */
281#      include <winsock2.h>
282#      include <ws2tcpip.h>
283       /* yes, they have to be #included prior to <windows.h> */
284#    endif
285#    include <windows.h>
286#    include <stdio.h>
287#    include <stddef.h>
288#    include <errno.h>
289#    include <string.h>
290#    ifdef _WIN64
291#      define strlen(s) _strlen31(s)
292/* cut strings to 2GB */
293static unsigned int _strlen31(const char *str)
294	{
295	unsigned int len=0;
296	while (*str && len<0x80000000U) str++, len++;
297	return len&0x7FFFFFFF;
298	}
299#    endif
300#    include <malloc.h>
301#    if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace)
302       /* compensate for bug in VC6 ctype.h */
303#      undef isspace
304#      undef isdigit
305#      undef isalnum
306#      undef isupper
307#      undef isxdigit
308#    endif
309#    if defined(_MSC_VER) && !defined(_DLL) && defined(stdin)
310#      if _MSC_VER>=1300
311#        undef stdin
312#        undef stdout
313#        undef stderr
314         FILE *__iob_func();
315#        define stdin  (&__iob_func()[0])
316#        define stdout (&__iob_func()[1])
317#        define stderr (&__iob_func()[2])
318#      elif defined(I_CAN_LIVE_WITH_LNK4049)
319#        undef stdin
320#        undef stdout
321#        undef stderr
322         /* pre-1300 has __p__iob(), but it's available only in msvcrt.lib,
323          * or in other words with /MD. Declaring implicit import, i.e.
324          * with _imp_ prefix, works correctly with all compiler options,
325	  * but without /MD results in LINK warning LNK4049:
326	  * 'locally defined symbol "__iob" imported'.
327          */
328         extern FILE *_imp___iob;
329#        define stdin  (&_imp___iob[0])
330#        define stdout (&_imp___iob[1])
331#        define stderr (&_imp___iob[2])
332#      endif
333#    endif
334#  endif
335#  include <io.h>
336#  include <fcntl.h>
337
338#  ifdef OPENSSL_SYS_WINCE
339#    define OPENSSL_NO_POSIX_IO
340#  endif
341
342#  if defined (__BORLANDC__)
343#    define _setmode setmode
344#    define _O_TEXT O_TEXT
345#    define _O_BINARY O_BINARY
346#    define _int64 __int64
347#    define _kbhit kbhit
348#  endif
349
350#  define EXIT(n) exit(n)
351#  define LIST_SEPARATOR_CHAR ';'
352#  ifndef X_OK
353#    define X_OK	0
354#  endif
355#  ifndef W_OK
356#    define W_OK	2
357#  endif
358#  ifndef R_OK
359#    define R_OK	4
360#  endif
361#  define OPENSSL_CONF	"openssl.cnf"
362#  define SSLEAY_CONF	OPENSSL_CONF
363#  define NUL_DEV	"nul"
364#  define RFILE		".rnd"
365#  ifdef OPENSSL_SYS_WINCE
366#    define DEFAULT_HOME  ""
367#  else
368#    define DEFAULT_HOME  "C:"
369#  endif
370
371/* Avoid Windows 8 SDK GetVersion deprecated problems */
372#if defined(_MSC_VER) && _MSC_VER>=1800
373#  define check_winnt() (1)
374#else
375#  define check_winnt() (GetVersion() < 0x80000000)
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#    ifdef OPENSSL_SYS_NEWS4 /* setvbuf is missing on mips-sony-bsd */
464#      define setvbuf(a, b, c, d) setbuffer((a), (b), (d))
465       typedef unsigned long clock_t;
466#    endif
467#    ifdef OPENSSL_SYS_WIN32_CYGWIN
468#      include <io.h>
469#      include <fcntl.h>
470#    endif
471
472#    define OPENSSL_CONF	"openssl.cnf"
473#    define SSLEAY_CONF		OPENSSL_CONF
474#    define RFILE		".rnd"
475#    define LIST_SEPARATOR_CHAR ':'
476#    define NUL_DEV		"/dev/null"
477#    define EXIT(n)		exit(n)
478#  endif
479
480#  define SSLeay_getpid()	getpid()
481
482#endif
483
484
485/*************/
486
487#ifdef USE_SOCKETS
488#  if defined(WINDOWS) || defined(MSDOS)
489      /* windows world */
490
491#    ifdef OPENSSL_NO_SOCK
492#      define SSLeay_Write(a,b,c)	(-1)
493#      define SSLeay_Read(a,b,c)	(-1)
494#      define SHUTDOWN(fd)		close(fd)
495#      define SHUTDOWN2(fd)		close(fd)
496#    elif !defined(__DJGPP__)
497#      if defined(_WIN32_WCE) && _WIN32_WCE<410
498#        define getservbyname _masked_declaration_getservbyname
499#      endif
500#      if !defined(IPPROTO_IP)
501         /* winsock[2].h was included already? */
502#        include <winsock.h>
503#      endif
504#      ifdef getservbyname
505#        undef getservbyname
506         /* this is used to be wcecompat/include/winsock_extras.h */
507         struct servent* PASCAL getservbyname(const char*,const char*);
508#      endif
509
510#      ifdef _WIN64
511/*
512 * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
513 * the value constitutes an index in per-process table of limited size
514 * and not a real pointer.
515 */
516#        define socket(d,t,p)	((int)socket(d,t,p))
517#        define accept(s,f,l)	((int)accept(s,f,l))
518#      endif
519#      define SSLeay_Write(a,b,c)	send((a),(b),(c),0)
520#      define SSLeay_Read(a,b,c)	recv((a),(b),(c),0)
521#      define SHUTDOWN(fd)		{ shutdown((fd),0); closesocket(fd); }
522#      define SHUTDOWN2(fd)		{ shutdown((fd),2); closesocket(fd); }
523#    else
524#      define SSLeay_Write(a,b,c)	write_s(a,b,c,0)
525#      define SSLeay_Read(a,b,c)	read_s(a,b,c)
526#      define SHUTDOWN(fd)		close_s(fd)
527#      define SHUTDOWN2(fd)		close_s(fd)
528#    endif
529
530#  elif defined(MAC_OS_pre_X)
531
532#    include "MacSocket.h"
533#    define SSLeay_Write(a,b,c)		MacSocket_send((a),(b),(c))
534#    define SSLeay_Read(a,b,c)		MacSocket_recv((a),(b),(c),true)
535#    define SHUTDOWN(fd)		MacSocket_close(fd)
536#    define SHUTDOWN2(fd)		MacSocket_close(fd)
537
538#  elif defined(OPENSSL_SYS_NETWARE)
539         /* NetWare uses the WinSock2 interfaces by default, but can be configured for BSD
540         */
541#      if defined(NETWARE_BSDSOCK)
542#        include <sys/socket.h>
543#        include <netinet/in.h>
544#        include <sys/time.h>
545#        if defined(NETWARE_CLIB)
546#          include <sys/bsdskt.h>
547#        else
548#          include <sys/select.h>
549#        endif
550#        define INVALID_SOCKET (int)(~0)
551#      else
552#        include <novsock2.h>
553#      endif
554#      define SSLeay_Write(a,b,c)   send((a),(b),(c),0)
555#      define SSLeay_Read(a,b,c) recv((a),(b),(c),0)
556#      define SHUTDOWN(fd)    { shutdown((fd),0); closesocket(fd); }
557#      define SHUTDOWN2(fd)      { shutdown((fd),2); closesocket(fd); }
558
559#  else
560
561#    ifndef NO_SYS_PARAM_H
562#      include <sys/param.h>
563#    endif
564#    ifdef OPENSSL_SYS_VXWORKS
565#      include <time.h>
566#    elif !defined(OPENSSL_SYS_MPE)
567#      include <sys/time.h> /* Needed under linux for FD_XXX */
568#    endif
569
570#    include <netdb.h>
571#    if defined(OPENSSL_SYS_VMS_NODECC)
572#      include <socket.h>
573#      include <in.h>
574#      include <inet.h>
575#    else
576#      include <sys/socket.h>
577#      ifdef FILIO_H
578#        include <sys/filio.h> /* Added for FIONBIO under unixware */
579#      endif
580#      include <netinet/in.h>
581#      if !defined(OPENSSL_SYS_BEOS_R5)
582#      include <arpa/inet.h>
583#    endif
584#    endif
585
586#    if defined(NeXT) || defined(_NEXT_SOURCE)
587#      include <sys/fcntl.h>
588#      include <sys/types.h>
589#    endif
590
591#    ifdef OPENSSL_SYS_AIX
592#      include <sys/select.h>
593#    endif
594
595#    ifdef __QNX__
596#      include <sys/select.h>
597#    endif
598
599#    if defined(sun)
600#      include <sys/filio.h>
601#    else
602#      ifndef VMS
603#        include <sys/ioctl.h>
604#      else
605	 /* ioctl is only in VMS > 7.0 and when socketshr is not used */
606#        if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
607#          include <sys/ioctl.h>
608#        endif
609#      endif
610#    endif
611
612#    ifdef VMS
613#      include <unixio.h>
614#      if defined(TCPIP_TYPE_SOCKETSHR)
615#        include <socketshr.h>
616#      endif
617#    endif
618
619#    define SSLeay_Read(a,b,c)     read((a),(b),(c))
620#    define SSLeay_Write(a,b,c)    write((a),(b),(c))
621#    define SHUTDOWN(fd)    { shutdown((fd),0); closesocket((fd)); }
622#    define SHUTDOWN2(fd)   { shutdown((fd),2); closesocket((fd)); }
623#    ifndef INVALID_SOCKET
624#    define INVALID_SOCKET	(-1)
625#    endif /* INVALID_SOCKET */
626#  endif
627
628/* Some IPv6 implementations are broken, disable them in known bad
629 * versions.
630 */
631#  if !defined(OPENSSL_USE_IPV6)
632#    if defined(AF_INET6) && !defined(OPENSSL_SYS_BEOS_BONE) && !defined(NETWARE_CLIB)
633#      define OPENSSL_USE_IPV6 1
634#    else
635#      define OPENSSL_USE_IPV6 0
636#    endif
637#  endif
638
639#endif
640
641#if defined(sun) && !defined(__svr4__) && !defined(__SVR4)
642  /* include headers first, so our defines don't break it */
643#include <stdlib.h>
644#include <string.h>
645  /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */
646# define memmove(s1,s2,n) bcopy((s2),(s1),(n))
647# define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b)))
648extern char *sys_errlist[]; extern int sys_nerr;
649# define strerror(errnum) \
650	(((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum])
651  /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */
652#include "crypto/o_str.h"
653# define memcmp OPENSSL_memcmp
654#endif
655
656#ifndef OPENSSL_EXIT
657# if defined(MONOLITH) && !defined(OPENSSL_C)
658#  define OPENSSL_EXIT(n) return(n)
659# else
660#  define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0)
661# endif
662#endif
663
664/***********************************************/
665
666#define DG_GCC_BUG	/* gcc < 2.6.3 on DGUX */
667
668#ifdef sgi
669#define IRIX_CC_BUG	/* all version of IRIX I've tested (4.* 5.*) */
670#endif
671#ifdef OPENSSL_SYS_SNI
672#define IRIX_CC_BUG	/* CDS++ up to V2.0Bsomething suffered from the same bug.*/
673#endif
674
675#if defined(OPENSSL_SYS_WINDOWS)
676#  define strcasecmp _stricmp
677#  define strncasecmp _strnicmp
678#elif defined(OPENSSL_SYS_VMS)
679/* VMS below version 7.0 doesn't have strcasecmp() */
680#  include "o_str.h"
681#  define strcasecmp OPENSSL_strcasecmp
682#  define strncasecmp OPENSSL_strncasecmp
683#  define OPENSSL_IMPLEMENTS_strncasecmp
684#elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
685#  define strcasecmp stricmp
686#  define strncasecmp strnicmp
687#elif defined(OPENSSL_SYS_NETWARE)
688#  include <string.h>
689#  if defined(NETWARE_CLIB)
690#    define strcasecmp stricmp
691#    define strncasecmp strnicmp
692#  endif /* NETWARE_CLIB */
693#endif
694
695#if defined(OPENSSL_SYS_OS2) && defined(__EMX__)
696# include <io.h>
697# include <fcntl.h>
698# define NO_SYSLOG
699#endif
700
701/* vxworks */
702#if defined(OPENSSL_SYS_VXWORKS)
703#include <ioLib.h>
704#include <tickLib.h>
705#include <sysLib.h>
706
707#define TTY_STRUCT int
708
709#define sleep(a) taskDelay((a) * sysClkRateGet())
710
711#include <vxWorks.h>
712#include <sockLib.h>
713#include <taskLib.h>
714
715#define getpid taskIdSelf
716
717/* NOTE: these are implemented by helpers in database app!
718 * if the database is not linked, we need to implement them
719 * elswhere */
720struct hostent *gethostbyname(const char *name);
721struct hostent *gethostbyaddr(const char *addr, int length, int type);
722struct servent *getservbyname(const char *name, const char *proto);
723
724#endif
725/* end vxworks */
726
727/* beos */
728#if defined(OPENSSL_SYS_BEOS_R5)
729#define SO_ERROR 0
730#define NO_SYS_UN
731#define IPPROTO_IP 0
732#include <OS.h>
733#endif
734
735
736#ifdef  __cplusplus
737}
738#endif
739
740#endif
741
742