X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fobjects%2Fo_names.c;h=2b80243256d96e00e174f05efb31fd7f88624cf9;hb=513d4b4c16bf7bdfa19dcc96ead45f921bef1ba6;hp=a5b1aacd66831dae71aac806aef3ee7759bb29ff;hpb=d0fa136ce22bb57638a1bf18e656602f53081ff3;p=oweals%2Fopenssl.git diff --git a/crypto/objects/o_names.c b/crypto/objects/o_names.c index a5b1aacd66..2b80243256 100644 --- a/crypto/objects/o_names.c +++ b/crypto/objects/o_names.c @@ -5,6 +5,18 @@ #include #include #include +#include + +/* 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. @@ -29,9 +41,9 @@ static STACK_OF(NAME_FUNCS) *name_funcs_stack; * need for macro-generated wrapper functions. */ /* static unsigned long obj_name_hash(OBJ_NAME *a); */ -static unsigned long obj_name_hash(void *a_void); +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(void *a_void,void *b_void); +static int obj_name_cmp(const void *a_void,const void *b_void); int OBJ_NAME_init(void) { @@ -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 @@ -88,7 +100,7 @@ int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *), } /* static int obj_name_cmp(OBJ_NAME *a, OBJ_NAME *b) */ -static int obj_name_cmp(void *a_void, void *b_void) +static int obj_name_cmp(const void *a_void, const void *b_void) { int ret; OBJ_NAME *a = (OBJ_NAME *)a_void; @@ -100,8 +112,8 @@ static int obj_name_cmp(void *a_void, void *b_void) if ((name_funcs_stack != NULL) && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) { - ret=sk_NAME_FUNCS_value(name_funcs_stack,a->type) - ->cmp_func(a->name,b->name); + ret=sk_NAME_FUNCS_value(name_funcs_stack, + a->type)->cmp_func(a->name,b->name); } else ret=strcmp(a->name,b->name); @@ -110,15 +122,15 @@ static int obj_name_cmp(void *a_void, void *b_void) } /* static unsigned long obj_name_hash(OBJ_NAME *a) */ -static unsigned long obj_name_hash(void *a_void) +static unsigned long obj_name_hash(const void *a_void) { unsigned long ret; OBJ_NAME *a = (OBJ_NAME *)a_void; if ((name_funcs_stack != NULL) && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) { - ret=sk_NAME_FUNCS_value(name_funcs_stack,a->type) - ->hash_func(a->name); + ret=sk_NAME_FUNCS_value(name_funcs_stack, + a->type)->hash_func(a->name); } else { @@ -190,8 +202,8 @@ int OBJ_NAME_add(const char *name, int type, const char *data) * function should get three arguments... * -- Richard Levitte */ - sk_NAME_FUNCS_value(name_funcs_stack,ret->type) - ->free_func(ret->name,ret->type,ret->data); + sk_NAME_FUNCS_value(name_funcs_stack, + ret->type)->free_func(ret->name,ret->type,ret->data); } OPENSSL_free(ret); } @@ -225,8 +237,8 @@ int OBJ_NAME_remove(const char *name, int type) * function should get three arguments... * -- Richard Levitte */ - sk_NAME_FUNCS_value(name_funcs_stack,ret->type) - ->free_func(ret->name,ret->type,ret->data); + sk_NAME_FUNCS_value(name_funcs_stack, + ret->type)->free_func(ret->name,ret->type,ret->data); } OPENSSL_free(ret); return(1); @@ -248,6 +260,8 @@ static void do_all_fn(const OBJ_NAME *name,struct doall *d) d->fn(name,d->arg); } +static IMPLEMENT_LHASH_DOALL_ARG_FN(do_all_fn, const OBJ_NAME *, struct doall *) + void OBJ_NAME_do_all(int type,void (*fn)(const OBJ_NAME *,void *arg),void *arg) { struct doall d; @@ -256,7 +270,7 @@ void OBJ_NAME_do_all(int type,void (*fn)(const OBJ_NAME *,void *arg),void *arg) d.fn=fn; d.arg=arg; - lh_doall_arg(names_lh,(LHASH_DOALL_ARG_FN_TYPE)do_all_fn,&d); + lh_doall_arg(names_lh,LHASH_DOALL_ARG_FN(do_all_fn),&d); } struct doall_sorted @@ -295,17 +309,17 @@ void OBJ_NAME_do_all_sorted(int type,void (*fn)(const OBJ_NAME *,void *arg), d.n=0; OBJ_NAME_do_all(type,do_all_sorted_fn,&d); - qsort(d.names,d.n,sizeof *d.names,do_all_sorted_cmp); + 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(d.names); + OPENSSL_free((void *)d.names); } static int free_type; -static void names_lh_free(OBJ_NAME *onp, int type) +static void names_lh_free(OBJ_NAME *onp) { if(onp == NULL) return; @@ -316,6 +330,8 @@ static void names_lh_free(OBJ_NAME *onp, int type) } } +static IMPLEMENT_LHASH_DOALL_FN(names_lh_free, OBJ_NAME *) + static void name_funcs_free(NAME_FUNCS *ptr) { OPENSSL_free(ptr); @@ -331,7 +347,7 @@ void OBJ_NAME_cleanup(int 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,LHASH_DOALL_FN(names_lh_free)); if (type < 0) { lh_free(names_lh);