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