From 35a99b6380231992457f9e4133d3c3e509b85d0d Mon Sep 17 00:00:00 2001 From: Geoff Thorpe Date: Sat, 2 Dec 2000 23:16:54 +0000 Subject: Use the new LHASH macros to declare type-safe wrapper functions that can be used as the hash/compare callbacks without function pointer casting. For now, this is just happening in the apps/ directory whilst a few people check the approach. The rest of the library will be moved across to the same idea if there's no problems with this. --- apps/ca.c | 36 +++++++++++++++++++++--------------- apps/openssl.c | 7 +++++-- 2 files changed, 26 insertions(+), 17 deletions(-) (limited to 'apps') diff --git a/apps/ca.c b/apps/ca.c index 2e00555880..2e8593468a 100644 --- a/apps/ca.c +++ b/apps/ca.c @@ -180,11 +180,11 @@ extern int EF_ALIGNMENT; #endif static void lookup_fail(char *name,char *tag); -static unsigned long index_serial_hash(char **a); -static int index_serial_cmp(char **a, char **b); -static unsigned long index_name_hash(char **a); +static unsigned long index_serial_hash(const char **a); +static int index_serial_cmp(const char **a, const char **b); +static unsigned long index_name_hash(const char **a); static int index_name_qual(char **a); -static int index_name_cmp(char **a,char **b); +static int index_name_cmp(const char **a,const char **b); static BIGNUM *load_serial(char *serialfile); static int save_serial(char *serialfile, BIGNUM *serial); static int certify(X509 **xret, char *infile,EVP_PKEY *pkey,X509 *x509, @@ -215,6 +215,12 @@ static char *section=NULL; static int preserve=0; static int msie_hack=0; +static IMPLEMENT_LHASH_HASH_FN(index_serial_hash,const char **); +static IMPLEMENT_LHASH_COMP_FN(index_serial_cmp,const char **); +static IMPLEMENT_LHASH_HASH_FN(index_name_hash,const char **); +static IMPLEMENT_LHASH_COMP_FN(index_name_cmp,const char **); + + int MAIN(int, char **); int MAIN(int argc, char **argv) @@ -754,16 +760,16 @@ bad: } if (!TXT_DB_create_index(db, DB_serial, NULL, - (LHASH_HASH_FN_TYPE)index_serial_hash, - (LHASH_COMP_FN_TYPE)index_serial_cmp)) + LHASH_HASH_FN(index_serial_hash), + LHASH_COMP_FN(index_serial_cmp))) { BIO_printf(bio_err,"error creating serial number index:(%ld,%ld,%ld)\n",db->error,db->arg1,db->arg2); goto err; } if (!TXT_DB_create_index(db, DB_name, index_name_qual, - (LHASH_HASH_FN_TYPE)index_name_hash, - (LHASH_COMP_FN_TYPE)index_name_cmp)) + LHASH_HASH_FN(index_name_hash), + LHASH_COMP_FN(index_name_cmp))) { BIO_printf(bio_err,"error creating name index:(%ld,%ld,%ld)\n", db->error,db->arg1,db->arg2); @@ -1328,31 +1334,31 @@ static void lookup_fail(char *name, char *tag) BIO_printf(bio_err,"variable lookup failed for %s::%s\n",name,tag); } -static unsigned long index_serial_hash(char **a) +static unsigned long index_serial_hash(const char **a) { - char *n; + const char *n; n=a[DB_serial]; while (*n == '0') n++; return(lh_strhash(n)); } -static int index_serial_cmp(char **a, char **b) +static int index_serial_cmp(const char **a, const char **b) { - char *aa,*bb; + const char *aa,*bb; for (aa=a[DB_serial]; *aa == '0'; aa++); for (bb=b[DB_serial]; *bb == '0'; bb++); return(strcmp(aa,bb)); } -static unsigned long index_name_hash(char **a) +static unsigned long index_name_hash(const char **a) { return(lh_strhash(a[DB_name])); } static int index_name_qual(char **a) { return(a[0][0] == 'V'); } -static int index_name_cmp(char **a, char **b) +static int index_name_cmp(const char **a, const char **b) { return(strcmp(a[DB_name], b[DB_name])); } @@ -2253,7 +2259,7 @@ static int do_revoke(X509 *x509, TXT_DB *db) goto err; } - else if (index_name_cmp(row,rrow)) + else if (index_name_cmp((const char **)row,(const char **)rrow)) { BIO_printf(bio_err,"ERROR:name does not match %s\n", row[DB_name]); diff --git a/apps/openssl.c b/apps/openssl.c index 40bcb76341..49d0b2bd1f 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -85,6 +85,9 @@ char *default_config_file=NULL; BIO *bio_err=NULL; #endif +static IMPLEMENT_LHASH_HASH_FN(hash,FUNCTION *); +static IMPLEMENT_LHASH_COMP_FN(cmp,FUNCTION *); + int main(int Argc, char *Argv[]) { ARGS arg; @@ -351,8 +354,8 @@ static LHASH *prog_init(void) ; qsort(functions,i,sizeof *functions,SortFnByName); - if ((ret=lh_new((LHASH_HASH_FN_TYPE)hash, - (LHASH_COMP_FN_TYPE)cmp)) == NULL) + if ((ret=lh_new(LHASH_HASH_FN(hash), + LHASH_COMP_FN(cmp))) == NULL) return(NULL); for (f=functions; f->name != NULL; f++) -- cgit v1.2.3