|
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 © Portions copyright (c) 2006 Nokia Corporation. All rights reserved. |
|
57 */ |
|
58 |
|
59 #include <openssl/opensslconf.h> |
|
60 |
|
61 |
|
62 #ifndef HEADER_E_OS2_H |
|
63 #define HEADER_E_OS2_H |
|
64 |
|
65 #if (defined(__SYMBIAN32__) && !defined(SYMBIAN)) |
|
66 #define SYMBIAN |
|
67 #endif |
|
68 |
|
69 #ifdef __cplusplus |
|
70 extern "C" { |
|
71 #endif |
|
72 |
|
73 /****************************************************************************** |
|
74 * Detect operating systems. This probably needs completing. |
|
75 * The result is that at least one OPENSSL_SYS_os macro should be defined. |
|
76 * However, if none is defined, Unix is assumed. |
|
77 **/ |
|
78 |
|
79 #define OPENSSL_SYS_UNIX |
|
80 #ifndef SYMBIAN |
|
81 /* ----------------------- Macintosh, before MacOS X ----------------------- */ |
|
82 #if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) |
|
83 # undef OPENSSL_SYS_UNIX |
|
84 # define OPENSSL_SYS_MACINTOSH_CLASSIC |
|
85 #endif |
|
86 |
|
87 /* ----------------------- NetWare ----------------------------------------- */ |
|
88 #if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE) |
|
89 # undef OPENSSL_SYS_UNIX |
|
90 # define OPENSSL_SYS_NETWARE |
|
91 #endif |
|
92 |
|
93 /* ---------------------- Microsoft operating systems ---------------------- */ |
|
94 |
|
95 /* For 32 bit environment, there seems to be the CygWin environment and then |
|
96 all the others that try to do the same thing Microsoft does... */ |
|
97 #if defined(OPENSSL_SYSNAME_UWIN) |
|
98 # undef OPENSSL_SYS_UNIX |
|
99 # define OPENSSL_SYS_WIN32_UWIN |
|
100 #else |
|
101 # if defined(__CYGWIN32__) || defined(OPENSSL_SYSNAME_CYGWIN32) |
|
102 # undef OPENSSL_SYS_UNIX |
|
103 # define OPENSSL_SYS_WIN32_CYGWIN |
|
104 # else |
|
105 # if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) |
|
106 # undef OPENSSL_SYS_UNIX |
|
107 # define OPENSSL_SYS_WIN32 |
|
108 # endif |
|
109 # if defined(OPENSSL_SYSNAME_WINNT) |
|
110 # undef OPENSSL_SYS_UNIX |
|
111 # define OPENSSL_SYS_WINNT |
|
112 # endif |
|
113 # if defined(OPENSSL_SYSNAME_WINCE) |
|
114 # undef OPENSSL_SYS_UNIX |
|
115 # define OPENSSL_SYS_WINCE |
|
116 # endif |
|
117 # endif |
|
118 #endif |
|
119 |
|
120 /* Anything that tries to look like Microsoft is "Windows" */ |
|
121 #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) |
|
122 # undef OPENSSL_SYS_UNIX |
|
123 # define OPENSSL_SYS_WINDOWS |
|
124 # ifndef OPENSSL_SYS_MSDOS |
|
125 # define OPENSSL_SYS_MSDOS |
|
126 # endif |
|
127 #endif |
|
128 |
|
129 /* DLL settings. This part is a bit tough, because it's up to the application |
|
130 implementor how he or she will link the application, so it requires some |
|
131 macro to be used. */ |
|
132 #ifdef OPENSSL_SYS_WINDOWS |
|
133 # ifndef OPENSSL_OPT_WINDLL |
|
134 # if defined(_WINDLL) /* This is used when building OpenSSL to indicate that |
|
135 DLL linkage should be used */ |
|
136 # define OPENSSL_OPT_WINDLL |
|
137 # endif |
|
138 # endif |
|
139 #endif |
|
140 |
|
141 /* -------------------------------- OpenVMS -------------------------------- */ |
|
142 #if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) |
|
143 # undef OPENSSL_SYS_UNIX |
|
144 # define OPENSSL_SYS_VMS |
|
145 # if defined(__DECC) |
|
146 # define OPENSSL_SYS_VMS_DECC |
|
147 # elif defined(__DECCXX) |
|
148 # define OPENSSL_SYS_VMS_DECC |
|
149 # define OPENSSL_SYS_VMS_DECCXX |
|
150 # else |
|
151 # define OPENSSL_SYS_VMS_NODECC |
|
152 # endif |
|
153 #endif |
|
154 |
|
155 /* --------------------------------- OS/2 ---------------------------------- */ |
|
156 #if defined(__EMX__) || defined(__OS2__) |
|
157 # undef OPENSSL_SYS_UNIX |
|
158 # define OPENSSL_SYS_OS2 |
|
159 #endif |
|
160 |
|
161 /* --------------------------------- Unix ---------------------------------- */ |
|
162 #ifdef OPENSSL_SYS_UNIX |
|
163 # if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) |
|
164 # define OPENSSL_SYS_LINUX |
|
165 # endif |
|
166 # ifdef OPENSSL_SYSNAME_MPE |
|
167 # define OPENSSL_SYS_MPE |
|
168 # endif |
|
169 # ifdef OPENSSL_SYSNAME_SNI |
|
170 # define OPENSSL_SYS_SNI |
|
171 # endif |
|
172 # ifdef OPENSSL_SYSNAME_ULTRASPARC |
|
173 # define OPENSSL_SYS_ULTRASPARC |
|
174 # endif |
|
175 # ifdef OPENSSL_SYSNAME_NEWS4 |
|
176 # define OPENSSL_SYS_NEWS4 |
|
177 # endif |
|
178 # ifdef OPENSSL_SYSNAME_MACOSX |
|
179 # define OPENSSL_SYS_MACOSX |
|
180 # endif |
|
181 # ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY |
|
182 # define OPENSSL_SYS_MACOSX_RHAPSODY |
|
183 # define OPENSSL_SYS_MACOSX |
|
184 # endif |
|
185 # ifdef OPENSSL_SYSNAME_SUNOS |
|
186 # define OPENSSL_SYS_SUNOS |
|
187 #endif |
|
188 # if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) |
|
189 # define OPENSSL_SYS_CRAY |
|
190 # endif |
|
191 # if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) |
|
192 # define OPENSSL_SYS_AIX |
|
193 # endif |
|
194 #endif |
|
195 |
|
196 /* --------------------------------- VOS ----------------------------------- */ |
|
197 #ifdef OPENSSL_SYSNAME_VOS |
|
198 # define OPENSSL_SYS_VOS |
|
199 #endif |
|
200 |
|
201 /* ------------------------------- VxWorks --------------------------------- */ |
|
202 #ifdef OPENSSL_SYSNAME_VXWORKS |
|
203 # define OPENSSL_SYS_VXWORKS |
|
204 #endif |
|
205 |
|
206 #endif //#ifndef SYMBAIN |
|
207 /** |
|
208 * That's it for OS-specific stuff |
|
209 *****************************************************************************/ |
|
210 |
|
211 |
|
212 /* Specials for I/O an exit */ |
|
213 #ifdef OPENSSL_SYS_MSDOS |
|
214 # define OPENSSL_UNISTD_IO <io.h> |
|
215 # define OPENSSL_DECLARE_EXIT extern void exit(int); |
|
216 #else |
|
217 # define OPENSSL_UNISTD_IO OPENSSL_UNISTD |
|
218 # define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ |
|
219 #endif |
|
220 |
|
221 /* Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare |
|
222 certain global symbols that, with some compilers under VMS, have to be |
|
223 defined and declared explicitely with globaldef and globalref. |
|
224 Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare |
|
225 DLL exports and imports for compilers under Win32. These are a little |
|
226 more complicated to use. Basically, for any library that exports some |
|
227 global variables, the following code must be present in the header file |
|
228 that declares them, before OPENSSL_EXTERN is used: |
|
229 |
|
230 #ifdef SOME_BUILD_FLAG_MACRO |
|
231 # undef OPENSSL_EXTERN |
|
232 # define OPENSSL_EXTERN OPENSSL_EXPORT |
|
233 #endif |
|
234 |
|
235 The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL |
|
236 have some generally sensible values, and for OPENSSL_EXTERN to have the |
|
237 value OPENSSL_IMPORT. |
|
238 */ |
|
239 |
|
240 #if defined(OPENSSL_SYS_VMS_NODECC) |
|
241 # define OPENSSL_EXPORT globalref |
|
242 # define OPENSSL_IMPORT globalref |
|
243 # define OPENSSL_GLOBAL globaldef |
|
244 #elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) |
|
245 # define OPENSSL_EXPORT extern __declspec(dllexport) |
|
246 # define OPENSSL_IMPORT extern __declspec(dllimport) |
|
247 # define OPENSSL_GLOBAL |
|
248 #else |
|
249 # define OPENSSL_EXPORT extern |
|
250 # define OPENSSL_IMPORT extern |
|
251 # define OPENSSL_GLOBAL |
|
252 #endif |
|
253 #define OPENSSL_EXTERN OPENSSL_IMPORT |
|
254 |
|
255 /* Macros to allow global variables to be reached through function calls when |
|
256 required (if a shared library version requvres it, for example. |
|
257 The way it's done allows definitions like this: |
|
258 |
|
259 // in foobar.c |
|
260 OPENSSL_IMPLEMENT_GLOBAL(int,foobar) = 0; |
|
261 // in foobar.h |
|
262 OPENSSL_DECLARE_GLOBAL(int,foobar); |
|
263 #define foobar OPENSSL_GLOBAL_REF(foobar) |
|
264 */ |
|
265 |
|
266 #ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION |
|
267 # define OPENSSL_IMPLEMENT_GLOBAL(type,name) \ |
|
268 extern type _hide_##name; \ |
|
269 type *_shadow_##name(void) { return &_hide_##name; } \ |
|
270 static type _hide_##name |
|
271 # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) |
|
272 # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) |
|
273 #else |
|
274 #ifndef EMULATOR |
|
275 # define OPENSSL_IMPLEMENT_GLOBAL(type,name) OPENSSL_GLOBAL type _shadow_##name |
|
276 # define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name |
|
277 # define OPENSSL_GLOBAL_REF(name) _shadow_##name |
|
278 #else |
|
279 # define OPENSSL_IMPLEMENT_GLOBAL(type,name) |
|
280 # define OPENSSL_DECLARE_GLOBAL(type,name) |
|
281 # define OPENSSL_GLOBAL_REF(name) libcrypto_ImpurePtr()->_shadow_##name |
|
282 #endif |
|
283 #endif |
|
284 |
|
285 #ifdef __cplusplus |
|
286 } |
|
287 #endif |
|
288 #endif |