Compile rand_egd.c on VMS as well.
[openssl.git] / crypto / conf / conf.c
index 3a055fac3c220325a3821bcc50c8708c22197e72..3031fa3b44902f6089788a07260f9a307e889085 100644 (file)
@@ -70,7 +70,7 @@
 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);
@@ -86,28 +86,25 @@ const char *CONF_version="CONF" OPENSSL_VERSION_PTEXT;
 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;
@@ -120,6 +117,7 @@ LHASH *CONF_load_fp(LHASH *h, FILE *in, long *line)
        BIO_free(btmp);
        return ltmp;
 }
+#endif
 
 LHASH *CONF_load_bio(LHASH *h, BIO *in, long *line)
        {
@@ -134,7 +132,7 @@ 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)
@@ -153,7 +151,7 @@ LHASH *CONF_load_bio(LHASH *h, BIO *in, long *line)
 
        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;
@@ -169,7 +167,7 @@ LHASH *CONF_load_bio(LHASH *h, BIO *in, long *line)
                                        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 (;;)
@@ -261,7 +259,7 @@ again:
                                        CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
                                goto err;
                                }
-                       section_sk=(STACK *)sv->value;
+                       section_sk=(STACK_OF(CONF_VALUE) *)sv->value;
                        continue;
                        }
                else
@@ -295,7 +293,7 @@ again:
                        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);
@@ -321,10 +319,10 @@ again:
                                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
                                {
@@ -332,16 +330,16 @@ again:
                                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);
@@ -380,7 +378,7 @@ char *CONF_get_string(LHASH *conf, char *section, char *name)
                        {
                        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)
                                {
@@ -390,7 +388,7 @@ char *CONF_get_string(LHASH *conf, char *section, char *name)
                        }
                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
@@ -407,17 +405,17 @@ static CONF_VALUE *get_section(LHASH *conf, char *section)
        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);
        }
@@ -445,12 +443,12 @@ void CONF_free(LHASH *conf)
 
        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);
        }
 
@@ -458,7 +456,7 @@ static void value_free_hash(CONF_VALUE *a, LHASH *conf)
        {
        if (a->name != NULL)
                {
-               a=(CONF_VALUE *)lh_delete(conf,(char *)a);
+               a=(CONF_VALUE *)lh_delete(conf,a);
                }
        }
 
@@ -653,7 +651,7 @@ static unsigned long hash(CONF_VALUE *v)
        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;
 
@@ -710,7 +708,7 @@ static CONF_VALUE *new_section(LHASH *conf, char *section)
        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)
@@ -728,3 +726,5 @@ err:
                }
        return(v);
        }
+
+IMPLEMENT_STACK_OF(CONF_VALUE)