static void value_free_hash(CONF_VALUE *a, LHASH *conf);
static void value_free_stack(CONF_VALUE *a,LHASH *conf);
static unsigned long hash(CONF_VALUE *v);
-static int cmp(CONF_VALUE *a,CONF_VALUE *b);
+static int cmp_conf(CONF_VALUE *a,CONF_VALUE *b);
static char *eat_ws(char *p);
static char *eat_alpha_numeric(char *p);
static void clear_comments(char *p);
LHASH *CONF_load(LHASH *h, const char *file, long *line)
{
LHASH *ltmp;
- FILE *in=NULL;
+ BIO *in=NULL;
#ifdef VMS
- in=fopen(file,"r");
+ in=BIO_new_file(file, "r");
#else
- in=fopen(file,"rb");
+ in=BIO_new_file(file, "rb");
#endif
if (in == NULL)
{
- SYSerr(SYS_F_FOPEN,get_last_sys_error());
- ERR_set_error_data(BUF_strdup(file),
- ERR_TXT_MALLOCED|ERR_TXT_STRING);
CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
return NULL;
}
- ltmp = CONF_load_fp(h, in, line);
- fclose(in);
+ ltmp = CONF_load_bio(h, in, line);
+ BIO_free(in);
return ltmp;
}
-
+#ifndef NO_FP_API
LHASH *CONF_load_fp(LHASH *h, FILE *in, long *line)
{
BIO *btmp;
BIO_free(btmp);
return ltmp;
}
+#endif
LHASH *CONF_load_bio(LHASH *h, BIO *in, long *line)
{
CONF_VALUE *v=NULL,*vv,*tv;
CONF_VALUE *sv=NULL;
char *section=NULL,*buf;
- STACK *section_sk=NULL,*ts;
+ STACK_OF(CONF_VALUE) *section_sk=NULL,*ts;
char *start,*psection,*pname;
if ((buff=BUF_MEM_new()) == NULL)
if (h == NULL)
{
- if ((ret=lh_new(hash,cmp)) == NULL)
+ if ((ret=lh_new(hash,cmp_conf)) == NULL)
{
CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_MALLOC_FAILURE);
goto err;
CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
goto err;
}
- section_sk=(STACK *)sv->value;
+ section_sk=(STACK_OF(CONF_VALUE) *)sv->value;
bufnum=0;
for (;;)
CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
goto err;
}
- section_sk=(STACK *)sv->value;
+ section_sk=(STACK_OF(CONF_VALUE) *)sv->value;
continue;
}
else
p++;
*p='\0';
- if ((v=(CONF_VALUE *)Malloc(sizeof(CONF_VALUE))) == NULL)
+ if (!(v=(CONF_VALUE *)Malloc(sizeof(CONF_VALUE))))
{
CONFerr(CONF_F_CONF_LOAD_BIO,
ERR_R_MALLOC_FAILURE);
if (tv == NULL)
{
CONFerr(CONF_F_CONF_LOAD_BIO,
- CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
+ CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
goto err;
}
- ts=(STACK *)tv->value;
+ ts=(STACK_OF(CONF_VALUE) *)tv->value;
}
else
{
ts=section_sk;
}
v->section=tv->section;
- if (!sk_push(ts,(char *)v))
+ if (!sk_CONF_VALUE_push(ts,v))
{
CONFerr(CONF_F_CONF_LOAD_BIO,
ERR_R_MALLOC_FAILURE);
goto err;
}
- vv=(CONF_VALUE *)lh_insert(ret,(char *)v);
+ vv=(CONF_VALUE *)lh_insert(ret,v);
if (vv != NULL)
{
- sk_delete_ptr(ts,(char *)vv);
+ sk_CONF_VALUE_delete_ptr(ts,vv);
Free(vv->name);
Free(vv->value);
Free(vv);
{
vv.name=name;
vv.section=section;
- v=(CONF_VALUE *)lh_retrieve(conf,(char *)&vv);
+ v=(CONF_VALUE *)lh_retrieve(conf,&vv);
if (v != NULL) return(v->value);
if (strcmp(section,"ENV") == 0)
{
}
vv.section="default";
vv.name=name;
- v=(CONF_VALUE *)lh_retrieve(conf,(char *)&vv);
+ v=(CONF_VALUE *)lh_retrieve(conf,&vv);
if (v != NULL)
return(v->value);
else
if ((conf == NULL) || (section == NULL)) return(NULL);
vv.name=NULL;
vv.section=section;
- v=(CONF_VALUE *)lh_retrieve(conf,(char *)&vv);
+ v=(CONF_VALUE *)lh_retrieve(conf,&vv);
return(v);
}
-STACK *CONF_get_section(LHASH *conf, char *section)
+STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf, char *section)
{
CONF_VALUE *v;
v=get_section(conf,section);
if (v != NULL)
- return((STACK *)v->value);
+ return((STACK_OF(CONF_VALUE) *)v->value);
else
return(NULL);
}
conf->down_load=0; /* evil thing to make sure the 'Free()'
* works as expected */
- lh_doall_arg(conf,(void (*)())value_free_hash,(char *)conf);
+ lh_doall_arg(conf,(void (*)())value_free_hash,conf);
/* We now have only 'section' entries in the hash table.
* Due to problems with */
- lh_doall_arg(conf,(void (*)())value_free_stack,(char *)conf);
+ lh_doall_arg(conf,(void (*)())value_free_stack,conf);
lh_free(conf);
}
{
if (a->name != NULL)
{
- a=(CONF_VALUE *)lh_delete(conf,(char *)a);
+ a=(CONF_VALUE *)lh_delete(conf,a);
}
}
return((lh_strhash(v->section)<<2)^lh_strhash(v->name));
}
-static int cmp(CONF_VALUE *a, CONF_VALUE *b)
+static int cmp_conf(CONF_VALUE *a, CONF_VALUE *b)
{
int i;
v->name=NULL;
v->value=(char *)sk;
- vv=(CONF_VALUE *)lh_insert(conf,(char *)v);
+ vv=(CONF_VALUE *)lh_insert(conf,v);
if (vv != NULL)
{
#if !defined(NO_STDIO) && !defined(WIN16)
}
return(v);
}
+
+IMPLEMENT_STACK_OF(CONF_VALUE)