typedef struct name_funcs_st
{
- unsigned long (*hash_func)(const char *name);
- int (*cmp_func)(const char *a,const char *b);
- void (*free_func)(const char *, int, const char *);
+ unsigned long (*hash_func)();
+ int (*cmp_func)();
+ void (*free_func)();
} NAME_FUNCS;
DECLARE_STACK_OF(NAME_FUNCS)
static STACK_OF(NAME_FUNCS) *name_funcs_stack;
-/* The LHASH callbacks now use the raw "void *" prototypes and do per-variable
- * casting in the functions. This prevents function pointer casting without the
- * need for macro-generated wrapper functions. */
-
-/* static unsigned long obj_name_hash(OBJ_NAME *a); */
-static unsigned long obj_name_hash(const void *a_void);
-/* static int obj_name_cmp(OBJ_NAME *a,OBJ_NAME *b); */
-static int obj_name_cmp(const void *a_void,const void *b_void);
+static unsigned long obj_name_hash(OBJ_NAME *a);
+static int obj_name_cmp(OBJ_NAME *a,OBJ_NAME *b);
int OBJ_NAME_init(void)
{
if (names_lh != NULL) return(1);
MemCheck_off();
- names_lh=lh_new(obj_name_hash, obj_name_cmp);
+ names_lh=lh_new(obj_name_hash,obj_name_cmp);
MemCheck_on();
return(names_lh != NULL);
}
int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *),
- int (*cmp_func)(const char *, const char *),
+ int (*cmp_func)(const void *, const void *),
void (*free_func)(const char *, int, const char *))
{
int ret;
MemCheck_off();
name_funcs = OPENSSL_malloc(sizeof(NAME_FUNCS));
name_funcs->hash_func = lh_strhash;
- name_funcs->cmp_func = strcmp;
+ name_funcs->cmp_func = (int (*)())strcmp;
name_funcs->free_func = 0; /* NULL is often declared to
- * ((void *)0), which according
- * to Compaq C is not really
- * compatible with a function
- * pointer. -- Richard Levitte*/
+ * ((void *)0), which according
+ * to Compaq C is not really
+ * compatible with a function
+ * pointer. -- Richard Levitte*/
sk_NAME_FUNCS_push(name_funcs_stack,name_funcs);
MemCheck_on();
}
return(ret);
}
-/* static int obj_name_cmp(OBJ_NAME *a, OBJ_NAME *b) */
-static int obj_name_cmp(const void *a_void, const void *b_void)
+static int obj_name_cmp(OBJ_NAME *a, OBJ_NAME *b)
{
int ret;
- OBJ_NAME *a = (OBJ_NAME *)a_void;
- OBJ_NAME *b = (OBJ_NAME *)b_void;
ret=a->type-b->type;
if (ret == 0)
return(ret);
}
-/* static unsigned long obj_name_hash(OBJ_NAME *a) */
-static unsigned long obj_name_hash(const void *a_void)
+static unsigned long obj_name_hash(OBJ_NAME *a)
{
unsigned long ret;
- OBJ_NAME *a = (OBJ_NAME *)a_void;
if ((name_funcs_stack != NULL) && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type))
{
on.type=type;
for (;;)
- {
+ {
ret=(OBJ_NAME *)lh_retrieve(names_lh,&on);
if (ret == NULL) return(NULL);
if ((ret->alias) && !alias)
return(0);
}
-struct doall
- {
- int type;
- void (*fn)(const OBJ_NAME *,void *arg);
- void *arg;
- };
-
-static void do_all_fn(const OBJ_NAME *name,struct doall *d)
- {
- if(name->type == d->type)
- d->fn(name,d->arg);
- }
-
-void OBJ_NAME_do_all(int type,void (*fn)(const OBJ_NAME *,void *arg),void *arg)
- {
- struct doall d;
-
- d.type=type;
- d.fn=fn;
- d.arg=arg;
-
- lh_doall_arg(names_lh,(LHASH_DOALL_ARG_FN_TYPE)do_all_fn,&d);
- }
-
-struct doall_sorted
- {
- int type;
- int n;
- const OBJ_NAME **names;
- };
-
-static void do_all_sorted_fn(const OBJ_NAME *name,void *d_)
- {
- struct doall_sorted *d=d_;
-
- if(name->type != d->type)
- return;
-
- d->names[d->n++]=name;
- }
-
-static int do_all_sorted_cmp(const void *n1_,const void *n2_)
- {
- const OBJ_NAME * const *n1=n1_;
- const OBJ_NAME * const *n2=n2_;
-
- return strcmp((*n1)->name,(*n2)->name);
- }
-
-void OBJ_NAME_do_all_sorted(int type,void (*fn)(const OBJ_NAME *,void *arg),
- void *arg)
- {
- struct doall_sorted d;
- int n;
-
- d.type=type;
- d.names=OPENSSL_malloc(lh_num_items(names_lh)*sizeof *d.names);
- d.n=0;
- OBJ_NAME_do_all(type,do_all_sorted_fn,&d);
-
- qsort((void *)d.names,d.n,sizeof *d.names,do_all_sorted_cmp);
-
- for(n=0 ; n < d.n ; ++n)
- fn(d.names[n],arg);
-
- OPENSSL_free((void *)d.names);
- }
-
static int free_type;
-static void names_lh_free(OBJ_NAME *onp)
+static void names_lh_free(OBJ_NAME *onp, int type)
{
if(onp == NULL)
- return;
+ return;
if ((free_type < 0) || (free_type == onp->type))
{
down_load=names_lh->down_load;
names_lh->down_load=0;
- lh_doall(names_lh,(LHASH_DOALL_FN_TYPE)names_lh_free);
+ lh_doall(names_lh,names_lh_free);
if (type < 0)
{
lh_free(names_lh);