(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/e_os2.h

    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_##name
Permalink to this note ueno: openssl/0.9.8g/e_os2.h:253-267 on Tue Jan 15 10:23:26 +0900 2008

グローバル変数を extern で宣言して (265)、static で定義している (267)。 mingw32 の gcc でこけます。 やりたいことは分かるんだけど。。

268: # 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
Syntax (Markdown)