With later version of DEC C on VMS, some functions (strcmp(), for
authorRichard Levitte <levitte@openssl.org>
Tue, 20 Feb 2001 19:13:46 +0000 (19:13 +0000)
committerRichard Levitte <levitte@openssl.org>
Tue, 20 Feb 2001 19:13:46 +0000 (19:13 +0000)
example) are declared with some extra linkage information.  This
generates a warning when using the function name as a value to a
regular function pointer with the "correct" definition of the
function.  Therefore, use a macro to cast the appropriate function on
VMS.

crypto/objects/o_names.c

index 5e70508d9a09f3bb051b822e64c650d342477555..2b80243256d96e00e174f05efb31fd7f88624cf9 100644 (file)
@@ -5,6 +5,18 @@
 #include <openssl/lhash.h>
 #include <openssl/objects.h>
 #include <openssl/safestack.h>
+#include <openssl/e_os2.h>
+
+/* Later versions of DEC C has started to add lnkage information to certain
+ * functions, which makes it tricky to use them as values to regular function
+ * pointers.  One way is to define a macro that takes care of casting them
+ * correctly.
+ */
+#ifdef OPENSSL_SYS_VMS_DECC
+# define OPENSSL_strcmp (int (*)(const char *,const char *))strcmp
+#else
+# define OPENSSL_strcmp strcmp
+#endif
 
 /* I use the ex_data stuff to manage the identifiers for the obj_name_types
  * that applications may define.  I only really use the free function field.
@@ -68,7 +80,7 @@ int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *),
                MemCheck_off();
                name_funcs = OPENSSL_malloc(sizeof(NAME_FUNCS));
                name_funcs->hash_func = lh_strhash;
-               name_funcs->cmp_func = strcmp;
+               name_funcs->cmp_func = OPENSSL_strcmp;
                name_funcs->free_func = 0; /* NULL is often declared to
                                                * ((void *)0), which according
                                                * to Compaq C is not really