1/* e_os2.h */
2/* ====================================================================
3 * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@openssl.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55
56#include "../bn/opensslconf.h"
57
58#ifndef HEADER_E_OS2_H
59# define HEADER_E_OS2_H
60
61/******************************************************************************
62 * Detect operating systems. This probably needs completing.
63 * The result is that at least one OPENSSL_SYS_os macro should be defined.
64 * However, if none is defined, Unix is assumed.
65 **/
66
67# define OPENSSL_SYS_UNIX
68
69/* ---------------------- Macintosh, before MacOS X ----------------------- */
70# if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC)
71# undef OPENSSL_SYS_UNIX
72# define OPENSSL_SYS_MACINTOSH_CLASSIC
73# endif
74
75/* ---------------------- NetWare ----------------------------------------- */
76# if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE)
77# undef OPENSSL_SYS_UNIX
78# define OPENSSL_SYS_NETWARE
79# endif
80
81/* --------------------- Microsoft operating systems ---------------------- */
82
83/*
84 * Note that MSDOS actually denotes 32-bit environments running on top of
85 * MS-DOS, such as DJGPP one.
86 */
87# if defined(OPENSSL_SYSNAME_MSDOS)
88# undef OPENSSL_SYS_UNIX
89# define OPENSSL_SYS_MSDOS
90# endif
91
92/*
93 * For 32 bit environment, there seems to be the CygWin environment and then
94 * all the others that try to do the same thing Microsoft does...
95 */
96# if defined(OPENSSL_SYSNAME_UWIN)
97# undef OPENSSL_SYS_UNIX
98# define OPENSSL_SYS_WIN32_UWIN
99# else
100# if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN)
101# undef OPENSSL_SYS_UNIX
102# define OPENSSL_SYS_WIN32_CYGWIN
103# else
104# if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32)
105# undef OPENSSL_SYS_UNIX
106# define OPENSSL_SYS_WIN32
107# endif
108# if defined(_WIN64) || defined(OPENSSL_SYSNAME_WIN64)
109# undef OPENSSL_SYS_UNIX
110# if !defined(OPENSSL_SYS_WIN64)
111# define OPENSSL_SYS_WIN64
112# endif
113# endif
114# if defined(OPENSSL_SYSNAME_WINNT)
115# undef OPENSSL_SYS_UNIX
116# define OPENSSL_SYS_WINNT
117# endif
118# if defined(OPENSSL_SYSNAME_WINCE)
119# undef OPENSSL_SYS_UNIX
120# define OPENSSL_SYS_WINCE
121# endif
122# endif
123# endif
124
125/* Anything that tries to look like Microsoft is "Windows" */
126# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE)
127# undef OPENSSL_SYS_UNIX
128# define OPENSSL_SYS_WINDOWS
129# ifndef OPENSSL_SYS_MSDOS
130# define OPENSSL_SYS_MSDOS
131# endif
132# endif
133
134/*
135 * DLL settings. This part is a bit tough, because it's up to the
136 * application implementor how he or she will link the application, so it
137 * requires some macro to be used.
138 */
139# ifdef OPENSSL_SYS_WINDOWS
140# ifndef OPENSSL_OPT_WINDLL
141# if defined(_WINDLL) /* This is used when building OpenSSL to
142 * indicate that DLL linkage should be used */
143# define OPENSSL_OPT_WINDLL
144# endif
145# endif
146# endif
147
148/* ------------------------------- OpenVMS -------------------------------- */
149# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS)
150# undef OPENSSL_SYS_UNIX
151# define OPENSSL_SYS_VMS
152# if defined(__DECC)
153# define OPENSSL_SYS_VMS_DECC
154# elif defined(__DECCXX)
155# define OPENSSL_SYS_VMS_DECC
156# define OPENSSL_SYS_VMS_DECCXX
157# else
158# define OPENSSL_SYS_VMS_NODECC
159# endif
160# endif
161
162/* -------------------------------- OS/2 ---------------------------------- */
163# if defined(__EMX__) || defined(__OS2__)
164# undef OPENSSL_SYS_UNIX
165# define OPENSSL_SYS_OS2
166# endif
167
168/* -------------------------------- Unix ---------------------------------- */
169# ifdef OPENSSL_SYS_UNIX
170# if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX)
171# define OPENSSL_SYS_LINUX
172# endif
173# ifdef OPENSSL_SYSNAME_MPE
174# define OPENSSL_SYS_MPE
175# endif
176# ifdef OPENSSL_SYSNAME_SNI
177# define OPENSSL_SYS_SNI
178# endif
179# ifdef OPENSSL_SYSNAME_ULTRASPARC
180# define OPENSSL_SYS_ULTRASPARC
181# endif
182# ifdef OPENSSL_SYSNAME_NEWS4
183# define OPENSSL_SYS_NEWS4
184# endif
185# ifdef OPENSSL_SYSNAME_MACOSX
186# define OPENSSL_SYS_MACOSX
187# endif
188# ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY
189# define OPENSSL_SYS_MACOSX_RHAPSODY
190# define OPENSSL_SYS_MACOSX
191# endif
192# ifdef OPENSSL_SYSNAME_SUNOS
193# define OPENSSL_SYS_SUNOS
194# endif
195# if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY)
196# define OPENSSL_SYS_CRAY
197# endif
198# if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX)
199# define OPENSSL_SYS_AIX
200# endif
201# endif
202
203/* -------------------------------- VOS ----------------------------------- */
204# if defined(__VOS__) || defined(OPENSSL_SYSNAME_VOS)
205# define OPENSSL_SYS_VOS
206# ifdef __HPPA__
207# define OPENSSL_SYS_VOS_HPPA
208# endif
209# ifdef __IA32__
210# define OPENSSL_SYS_VOS_IA32
211# endif
212# endif
213
214/* ------------------------------ VxWorks --------------------------------- */
215# ifdef OPENSSL_SYSNAME_VXWORKS
216# define OPENSSL_SYS_VXWORKS
217# endif
218
219/* -------------------------------- BeOS ---------------------------------- */
220# if defined(__BEOS__)
221# define OPENSSL_SYS_BEOS
222# include <sys/socket.h>
223# if defined(BONE_VERSION)
224# define OPENSSL_SYS_BEOS_BONE
225# else
226# define OPENSSL_SYS_BEOS_R5
227# endif
228# endif
229
230/**
231 * That's it for OS-specific stuff
232 *****************************************************************************/
233
234/* Specials for I/O an exit */
235# ifdef OPENSSL_SYS_MSDOS
236# define OPENSSL_UNISTD_IO <io.h>
237# define OPENSSL_DECLARE_EXIT extern void exit(int);
238# else
239# define OPENSSL_UNISTD_IO OPENSSL_UNISTD
240# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */
241# endif
242
243/*-
244 * Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare
245 * certain global symbols that, with some compilers under VMS, have to be
246 * defined and declared explicitely with globaldef and globalref.
247 * Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare
248 * DLL exports and imports for compilers under Win32. These are a little
249 * more complicated to use. Basically, for any library that exports some
250 * global variables, the following code must be present in the header file
251 * that declares them, before OPENSSL_EXTERN is used:
252 *
253 * #ifdef SOME_BUILD_FLAG_MACRO
254 * # undef OPENSSL_EXTERN
255 * # define OPENSSL_EXTERN OPENSSL_EXPORT
256 * #endif
257 *
258 * The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL
259 * have some generally sensible values, and for OPENSSL_EXTERN to have the
260 * value OPENSSL_IMPORT.
261 */
262
263# if defined(OPENSSL_SYS_VMS_NODECC)
264# define OPENSSL_EXPORT globalref
265# define OPENSSL_IMPORT globalref
266# define OPENSSL_GLOBAL globaldef
267# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL)
268# define OPENSSL_EXPORT extern __declspec(dllexport)
269# define OPENSSL_IMPORT extern __declspec(dllimport)
270# define OPENSSL_GLOBAL
271# else
272# define OPENSSL_EXPORT extern
273# define OPENSSL_IMPORT extern
274# define OPENSSL_GLOBAL
275# endif
276# define OPENSSL_EXTERN OPENSSL_IMPORT
277
278/*-
279 * Macros to allow global variables to be reached through function calls when
280 * required (if a shared library version requires it, for example.
281 * The way it's done allows definitions like this:
282 *
283 * // in foobar.c
284 * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0)
285 * // in foobar.h
286 * OPENSSL_DECLARE_GLOBAL(int,foobar);
287 * #define foobar OPENSSL_GLOBAL_REF(foobar)
288 */
289# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION
290# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \
291 type *_shadow_##name(void) \
292 { static type _hide_##name=value; return &_hide_##name; }
293# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void)
294# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name()))
295# else
296# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value;
297# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name
298# define OPENSSL_GLOBAL_REF(name) _shadow_##name
299# endif
300
301# if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE)
302# define ossl_ssize_t long
303# endif
304
305# ifdef OPENSSL_SYS_MSDOS
306# define ossl_ssize_t long
307# endif
308
309# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS)
310# define ssize_t int
311# endif
312
313# if defined(__ultrix) && !defined(ssize_t)
314# define ossl_ssize_t int
315# endif
316
317# ifndef ossl_ssize_t
318# define ossl_ssize_t ssize_t
319# endif
320
321#endif
322