LHASH revamp. make depend.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user