LHASH revamp. make depend.

This commit is contained in:
Ben Laurie
2008-05-26 11:24:29 +00:00
parent cab14b9803
commit 3c1d6bbc92
35 changed files with 1666 additions and 1265 deletions

View File

@@ -78,7 +78,8 @@ typedef struct
char *value;
} CONF_VALUE;
DECLARE_STACK_OF(CONF_VALUE)
DECLARE_STACK_OF(CONF_VALUE);
DECLARE_LHASH_OF(CONF_VALUE);
struct conf_st;
struct conf_method_st;
@@ -118,18 +119,23 @@ typedef void conf_finish_func(CONF_IMODULE *md);
#define CONF_MFLAGS_DEFAULT_SECTION 0x20
int CONF_set_default_method(CONF_METHOD *meth);
void CONF_set_nconf(CONF *conf,LHASH *hash);
LHASH *CONF_load(LHASH *conf,const char *file,long *eline);
void CONF_set_nconf(CONF *conf,LHASH_OF(CONF_VALUE) *hash);
LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf,const char *file,
long *eline);
#ifndef OPENSSL_NO_FP_API
LHASH *CONF_load_fp(LHASH *conf, FILE *fp,long *eline);
LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp,
long *eline);
#endif
LHASH *CONF_load_bio(LHASH *conf, BIO *bp,long *eline);
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,const char *section);
char *CONF_get_string(LHASH *conf,const char *group,const char *name);
long CONF_get_number(LHASH *conf,const char *group,const char *name);
void CONF_free(LHASH *conf);
int CONF_dump_fp(LHASH *conf, FILE *out);
int CONF_dump_bio(LHASH *conf, BIO *out);
LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp,long *eline);
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf,
const char *section);
char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf,const char *group,
const char *name);
long CONF_get_number(LHASH_OF(CONF_VALUE) *conf,const char *group,
const char *name);
void CONF_free(LHASH_OF(CONF_VALUE) *conf);
int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out);
int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out);
void OPENSSL_config(const char *config_name);
void OPENSSL_no_config(void);
@@ -141,7 +147,7 @@ struct conf_st
{
CONF_METHOD *meth;
void *meth_data;
LHASH *data;
LHASH_OF(CONF_VALUE) *data;
};
CONF *NCONF_new(CONF_METHOD *meth);

View File

@@ -69,16 +69,14 @@
#include <openssl/conf_api.h>
#include "e_os.h"
static void value_free_hash(CONF_VALUE *a, LHASH *conf);
static void value_free_stack(CONF_VALUE *a,LHASH *conf);
static IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_hash, CONF_VALUE *, LHASH *)
static IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_stack, CONF_VALUE *, LHASH *)
/* We don't use function pointer casting or wrapper functions - but cast each
* callback parameter inside the callback functions. */
/* static unsigned long hash(CONF_VALUE *v); */
static unsigned long hash(const void *v_void);
/* static int cmp_conf(CONF_VALUE *a,CONF_VALUE *b); */
static int cmp_conf(const void *a_void,const void *b_void);
static void value_free_hash_doall_arg(CONF_VALUE *a,
LHASH_OF(CONF_VALUE) *conf);
static void value_free_stack_doall_arg(CONF_VALUE *a,
LHASH_OF(CONF_VALUE) *conf);
static IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_hash, CONF_VALUE,
LHASH_OF(CONF_VALUE))
static IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_stack, CONF_VALUE,
LHASH_OF(CONF_VALUE))
/* Up until OpenSSL 0.9.5a, this was get_section */
CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section)
@@ -88,7 +86,7 @@ CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section)
if ((conf == NULL) || (section == NULL)) return(NULL);
vv.name=NULL;
vv.section=(char *)section;
v=(CONF_VALUE *)lh_retrieve(conf->data,&vv);
v=lh_CONF_VALUE_retrieve(conf->data,&vv);
return(v);
}
@@ -118,7 +116,7 @@ int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value)
return 0;
}
v = (CONF_VALUE *)lh_insert(conf->data, value);
v = lh_CONF_VALUE_insert(conf->data, value);
if (v != NULL)
{
(void)sk_CONF_VALUE_delete_ptr(ts,v);
@@ -141,7 +139,7 @@ char *_CONF_get_string(const CONF *conf, const char *section, const char *name)
{
vv.name=(char *)name;
vv.section=(char *)section;
v=(CONF_VALUE *)lh_retrieve(conf->data,&vv);
v=lh_CONF_VALUE_retrieve(conf->data,&vv);
if (v != NULL) return(v->value);
if (strcmp(section,"ENV") == 0)
{
@@ -151,7 +149,7 @@ char *_CONF_get_string(const CONF *conf, const char *section, const char *name)
}
vv.section="default";
vv.name=(char *)name;
v=(CONF_VALUE *)lh_retrieve(conf->data,&vv);
v=lh_CONF_VALUE_retrieve(conf->data,&vv);
if (v != NULL)
return(v->value);
else
@@ -182,6 +180,34 @@ long _CONF_get_number(CONF *conf, char *section, char *name)
}
#endif
static unsigned long conf_value_hash(const CONF_VALUE *v)
{
return (lh_strhash(v->section)<<2)^lh_strhash(v->name);
}
static IMPLEMENT_LHASH_HASH_FN(conf_value, CONF_VALUE)
static int conf_value_cmp(const CONF_VALUE *a, const CONF_VALUE *b)
{
int i;
if (a->section != b->section)
{
i=strcmp(a->section,b->section);
if (i) return(i);
}
if ((a->name != NULL) && (b->name != NULL))
{
i=strcmp(a->name,b->name);
return(i);
}
else if (a->name == b->name)
return(0);
else
return((a->name == NULL)?-1:1);
}
static IMPLEMENT_LHASH_COMP_FN(conf_value, CONF_VALUE)
int _CONF_new_data(CONF *conf)
{
if (conf == NULL)
@@ -189,7 +215,7 @@ int _CONF_new_data(CONF *conf)
return 0;
}
if (conf->data == NULL)
if ((conf->data = lh_new(hash, cmp_conf)) == NULL)
if ((conf->data = lh_CONF_VALUE_new()) == NULL)
{
return 0;
}
@@ -200,28 +226,29 @@ void _CONF_free_data(CONF *conf)
{
if (conf == NULL || conf->data == NULL) return;
conf->data->down_load=0; /* evil thing to make sure the 'OPENSSL_free()'
* works as expected */
lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_hash),
conf->data);
lh_CONF_VALUE_down_load(conf->data)=0; /* evil thing to make
* sure the 'OPENSSL_free()' works as
* expected */
lh_CONF_VALUE_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_hash),
LHASH_OF(CONF_VALUE), conf->data);
/* We now have only 'section' entries in the hash table.
* Due to problems with */
lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_stack),
conf->data);
lh_free(conf->data);
lh_CONF_VALUE_doall_arg(conf->data,
LHASH_DOALL_ARG_FN(value_free_stack),
LHASH_OF(CONF_VALUE), conf->data);
lh_CONF_VALUE_free(conf->data);
}
static void value_free_hash(CONF_VALUE *a, LHASH *conf)
static void value_free_hash_doall_arg(CONF_VALUE *a, LHASH_OF(CONF_VALUE) *conf)
{
if (a->name != NULL)
{
a=(CONF_VALUE *)lh_delete(conf,a);
}
lh_CONF_VALUE_delete(conf,a);
}
static void value_free_stack(CONF_VALUE *a, LHASH *conf)
static void value_free_stack_doall_arg(CONF_VALUE *a,
LHASH_OF(CONF_VALUE) *conf)
{
CONF_VALUE *vv;
STACK *sk;
@@ -242,37 +269,6 @@ static void value_free_stack(CONF_VALUE *a, LHASH *conf)
OPENSSL_free(a);
}
/* static unsigned long hash(CONF_VALUE *v) */
static unsigned long hash(const void *v_void)
{
CONF_VALUE *v = (CONF_VALUE *)v_void;
return((lh_strhash(v->section)<<2)^lh_strhash(v->name));
}
/* static int cmp_conf(CONF_VALUE *a, CONF_VALUE *b) */
static int cmp_conf(const void *a_void,const void *b_void)
{
int i;
CONF_VALUE *a = (CONF_VALUE *)a_void;
CONF_VALUE *b = (CONF_VALUE *)b_void;
if (a->section != b->section)
{
i=strcmp(a->section,b->section);
if (i) return(i);
}
if ((a->name != NULL) && (b->name != NULL))
{
i=strcmp(a->name,b->name);
return(i);
}
else if (a->name == b->name)
return(0);
else
return((a->name == NULL)?-1:1);
}
/* Up until OpenSSL 0.9.5a, this was new_section */
CONF_VALUE *_CONF_new_section(CONF *conf, const char *section)
{
@@ -292,7 +288,7 @@ CONF_VALUE *_CONF_new_section(CONF *conf, const char *section)
v->name=NULL;
v->value=(char *)sk;
vv=(CONF_VALUE *)lh_insert(conf->data,v);
vv=lh_CONF_VALUE_insert(conf->data,v);
assert(vv == NULL);
ok=1;
err:

View File

@@ -129,7 +129,7 @@ static CONF *def_create(CONF_METHOD *meth)
{
CONF *ret;
ret = (CONF *)OPENSSL_malloc(sizeof(CONF) + sizeof(unsigned short *));
ret = OPENSSL_malloc(sizeof(CONF) + sizeof(unsigned short *));
if (ret)
if (meth->init(ret) == 0)
{
@@ -145,7 +145,7 @@ static int def_init_default(CONF *conf)
return 0;
conf->meth = &default_method;
conf->meth_data = (void *)CONF_type_default;
conf->meth_data = CONF_type_default;
conf->data = NULL;
return 1;
@@ -722,7 +722,7 @@ static char *scan_dquote(CONF *conf, char *p)
return(p);
}
static void dump_value(CONF_VALUE *a, BIO *out)
static void dump_value_doall_arg(CONF_VALUE *a, BIO *out)
{
if (a->name)
BIO_printf(out, "[%s] %s=%s\n", a->section, a->name, a->value);
@@ -730,11 +730,12 @@ static void dump_value(CONF_VALUE *a, BIO *out)
BIO_printf(out, "[[%s]]\n", a->section);
}
static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_value, CONF_VALUE *, BIO *)
static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_value, CONF_VALUE, BIO)
static int def_dump(const CONF *conf, BIO *out)
{
lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(dump_value), out);
lh_CONF_VALUE_doall_arg(conf->data, LHASH_DOALL_ARG_FN(dump_value),
BIO, out);
return 1;
}

View File

@@ -69,7 +69,7 @@ static CONF_METHOD *default_CONF_method=NULL;
/* Init a 'CONF' structure from an old LHASH */
void CONF_set_nconf(CONF *conf, LHASH *hash)
void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash)
{
if (default_CONF_method == NULL)
default_CONF_method = NCONF_default();
@@ -87,9 +87,10 @@ int CONF_set_default_method(CONF_METHOD *meth)
return 1;
}
LHASH *CONF_load(LHASH *conf, const char *file, long *eline)
LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file,
long *eline)
{
LHASH *ltmp;
LHASH_OF(CONF_VALUE) *ltmp;
BIO *in=NULL;
#ifdef OPENSSL_SYS_VMS
@@ -110,10 +111,11 @@ LHASH *CONF_load(LHASH *conf, const char *file, long *eline)
}
#ifndef OPENSSL_NO_FP_API
LHASH *CONF_load_fp(LHASH *conf, FILE *fp,long *eline)
LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp,
long *eline)
{
BIO *btmp;
LHASH *ltmp;
LHASH_OF(CONF_VALUE) *ltmp;
if(!(btmp = BIO_new_fp(fp, BIO_NOCLOSE))) {
CONFerr(CONF_F_CONF_LOAD_FP,ERR_R_BUF_LIB);
return NULL;
@@ -124,7 +126,8 @@ LHASH *CONF_load_fp(LHASH *conf, FILE *fp,long *eline)
}
#endif
LHASH *CONF_load_bio(LHASH *conf, BIO *bp,long *eline)
LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp,
long *eline)
{
CONF ctmp;
int ret;
@@ -137,7 +140,8 @@ LHASH *CONF_load_bio(LHASH *conf, BIO *bp,long *eline)
return NULL;
}
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,const char *section)
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf,
const char *section)
{
if (conf == NULL)
{
@@ -151,7 +155,8 @@ STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,const char *section)
}
}
char *CONF_get_string(LHASH *conf,const char *group,const char *name)
char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf,const char *group,
const char *name)
{
if (conf == NULL)
{
@@ -165,7 +170,8 @@ char *CONF_get_string(LHASH *conf,const char *group,const char *name)
}
}
long CONF_get_number(LHASH *conf,const char *group,const char *name)
long CONF_get_number(LHASH_OF(CONF_VALUE) *conf,const char *group,
const char *name)
{
int status;
long result = 0;
@@ -189,7 +195,7 @@ long CONF_get_number(LHASH *conf,const char *group,const char *name)
return result;
}
void CONF_free(LHASH *conf)
void CONF_free(LHASH_OF(CONF_VALUE) *conf)
{
CONF ctmp;
CONF_set_nconf(&ctmp, conf);
@@ -197,7 +203,7 @@ void CONF_free(LHASH *conf)
}
#ifndef OPENSSL_NO_FP_API
int CONF_dump_fp(LHASH *conf, FILE *out)
int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out)
{
BIO *btmp;
int ret;
@@ -212,7 +218,7 @@ int CONF_dump_fp(LHASH *conf, FILE *out)
}
#endif
int CONF_dump_bio(LHASH *conf, BIO *out)
int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out)
{
CONF ctmp;
CONF_set_nconf(&ctmp, conf);