OPENSSL_IMPLEMENT_GLOBAL caused more grief than it's worth (it's used twice
authorAndy Polyakov <appro@openssl.org>
Sun, 20 May 2007 20:11:19 +0000 (20:11 +0000)
committerAndy Polyakov <appro@openssl.org>
Sun, 20 May 2007 20:11:19 +0000 (20:11 +0000)
in legacy code). I'd rather just remove it along with legacy interface,
but it's probably not as appropriate as I'd like. Reimplement the macro.

crypto/des/enc_read.c
crypto/des/set_key.c
e_os2.h

index ce82125..b86620f 100644 (file)
@@ -63,7 +63,7 @@
 
 /* This has some uglies in it but it works - even over sockets. */
 /*extern int errno;*/
-OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode)=DES_PCBC_MODE;
+OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode,DES_PCBC_MODE)
 
 
 /*
index 55efe03..d849999 100644 (file)
@@ -65,7 +65,7 @@
  */
 #include "des_locl.h"
 
-OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key);   /* defaults to false */
+OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0)  /* defaults to false */
 
 static const unsigned char odd_parity[256]={
   1,  1,  2,  2,  4,  4,  7,  7,  8,  8, 11, 11, 13, 13, 14, 14,
diff --git a/e_os2.h b/e_os2.h
index 3f72b06..e17527a 100644 (file)
--- a/e_os2.h
+++ b/e_os2.h
@@ -266,20 +266,19 @@ extern "C" {
    The way it's done allows definitions like this:
 
        // in foobar.c
-       OPENSSL_IMPLEMENT_GLOBAL(int,foobar) = 0;
+       OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0)
        // in foobar.h
        OPENSSL_DECLARE_GLOBAL(int,foobar);
        #define foobar OPENSSL_GLOBAL_REF(foobar)
 */
 #ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION
-# define OPENSSL_IMPLEMENT_GLOBAL(type,name)                        \
-       extern type _hide_##name;                                    \
-       type *_shadow_##name(void) { return &_hide_##name; }         \
-       static type _hide_##name
+# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value)                     \
+       type *_shadow_##name(void)                                      \
+       { static type _hide_##name=value; return &_hide_##name; }
 # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void)
 # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name()))
 #else
-# define OPENSSL_IMPLEMENT_GLOBAL(type,name) OPENSSL_GLOBAL type _shadow_##name
+# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value;
 # define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name
 # define OPENSSL_GLOBAL_REF(name) _shadow_##name
 #endif