Fix OID handling:
[openssl.git] / crypto / objects / objects.h
index ecbe03c2d9a390c6818edcd638e437887fab49b0..bd0ee52feb22b74fc1e1243d892cf411e3b6a0b3 100644 (file)
@@ -1018,16 +1018,15 @@ const void *    OBJ_bsearch_ex_(const void *key,const void *base,int num,
                                int (*cmp)(const void *, const void *),
                                int flags);
 
-#define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, cmp)  \
-  scope type1 *cmp##_type_1; \
-  scope type2 *cmp##_type_2;                                   \
-  scope int cmp##_BSEARCH_CMP_FN(const void *, const void *);          \
-  scope int cmp(const type1 const *, const type2 const *);
+#define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm)   \
+  static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \
+  static int nm##_cmp(type1 const *, type2 const *); \
+  scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num)
 
 #define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp)  \
   _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp)
-#define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, cmp)   \
-  _DECLARE_OBJ_BSEARCH_CMP_FN(, type1, type2, cmp)
+#define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm)    \
+  type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num)
 
 /*
  * Unsolved problem: if a type is actually a pointer type, like
@@ -1055,31 +1054,47 @@ const void *    OBJ_bsearch_ex_(const void *key,const void *base,int num,
  * the non-constness means a lot of complication, and in practice
  * comparison routines do always not touch their arguments.
  */
-#define _IMPLEMENT_OBJ_BSEARCH_CMP_FN(scope, type1, type2, cmp)        \
-  scope int cmp##_BSEARCH_CMP_FN(const void *a_, const void *b_)       \
+
+#define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \
+  static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)   \
+      { \
+      type1 const *a = a_; \
+      type2 const *b = b_; \
+      return nm##_cmp(a,b); \
+      } \
+  static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \
       { \
-      const type1 const *a = a_; \
-      const type2 const *b = b_; \
-      return cmp(a,b); \
-      }
+      return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \
+                                       nm##_cmp_BSEARCH_CMP_FN); \
+      } \
+      extern void dummy_prototype(void)
 
-#define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \
-  _IMPLEMENT_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp)
-#define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, cmp) \
-  _IMPLEMENT_OBJ_BSEARCH_CMP_FN(, type1, type2, cmp)
+#define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm)  \
+  static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)   \
+      { \
+      type1 const *a = a_; \
+      type2 const *b = b_; \
+      return nm##_cmp(a,b); \
+      } \
+  type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \
+      { \
+      return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \
+                                       nm##_cmp_BSEARCH_CMP_FN); \
+      } \
+      extern void dummy_prototype(void)
 
 #define OBJ_bsearch(type1,key,type2,base,num,cmp)                             \
   ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \
                         num,sizeof(type2),                             \
-                        (cmp##_type_1=CHECKED_PTR_OF(type1,cmp##_type_1), \
-                         cmp##_type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \
+                        ((void)CHECKED_PTR_OF(type1,cmp##_type_1),     \
+                         (void)CHECKED_PTR_OF(type2,cmp##_type_2),     \
                          cmp##_BSEARCH_CMP_FN)))
 
 #define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags)                     \
-  ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \
+  ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \
                         num,sizeof(type2),                             \
-                        (cmp##_type_1=CHECKED_PTR_OF(type1,cmp##_type_1), \
-                         cmp##_type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \
+                        ((void)CHECKED_PTR_OF(type1,cmp##_type_1),     \
+                         (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \
                          cmp##_BSEARCH_CMP_FN)),flags)
 
 int            OBJ_new_nid(int num);