Pass CFLAG to dependency makers, so non-standard system include paths are
[openssl.git] / crypto / conf / conf_api.c
index 4d30c6835ce0b906eac349a55963ddfa3e72af8a..0032baa7119b2e250ec08b4bbc0db66a4b2cce8d 100644 (file)
 #include <string.h>
 #include <openssl/conf.h>
 #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 unsigned long hash(CONF_VALUE *v);
-static int cmp_conf(CONF_VALUE *a,CONF_VALUE *b);
+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);
 
 /* Up until OpenSSL 0.9.5a, this was get_section */
-CONF_VALUE *_CONF_get_section(CONF *conf, char *section)
+CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section)
        {
        CONF_VALUE *v,vv;
 
        if ((conf == NULL) || (section == NULL)) return(NULL);
        vv.name=NULL;
-       vv.section=section;
+       vv.section=(char *)section;
        v=(CONF_VALUE *)lh_retrieve(conf->data,&vv);
        return(v);
        }
 
 /* Up until OpenSSL 0.9.5a, this was CONF_get_section */
-STACK_OF(CONF_VALUE) *_CONF_get_section_values(CONF *conf, char *section)
+STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf,
+                                              const char *section)
        {
        CONF_VALUE *v;
 
@@ -121,7 +129,7 @@ int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value)
        return 1;
        }
 
-char *_CONF_get_string(CONF *conf, char *section, char *name)
+char *_CONF_get_string(const CONF *conf, const char *section, const char *name)
        {
        CONF_VALUE *v,vv;
        char *p;
@@ -131,8 +139,8 @@ char *_CONF_get_string(CONF *conf, char *section, char *name)
                {
                if (section != NULL)
                        {
-                       vv.name=name;
-                       vv.section=section;
+                       vv.name=(char *)name;
+                       vv.section=(char *)section;
                        v=(CONF_VALUE *)lh_retrieve(conf->data,&vv);
                        if (v != NULL) return(v->value);
                        if (strcmp(section,"ENV") == 0)
@@ -142,7 +150,7 @@ char *_CONF_get_string(CONF *conf, char *section, char *name)
                                }
                        }
                vv.section="default";
-               vv.name=name;
+               vv.name=(char *)name;
                v=(CONF_VALUE *)lh_retrieve(conf->data,&vv);
                if (v != NULL)
                        return(v->value);
@@ -181,8 +189,7 @@ int _CONF_new_data(CONF *conf)
                return 0;
                }
        if (conf->data == NULL)
-               if ((conf->data = lh_new((LHASH_HASH_FN_TYPE)hash,
-                                       (LHASH_COMP_FN_TYPE)cmp_conf)) == NULL)
+               if ((conf->data = lh_new(hash, cmp_conf)) == NULL)
                        {
                        return 0;
                        }
@@ -195,13 +202,13 @@ void _CONF_free_data(CONF *conf)
 
        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_TYPE)value_free_hash,
+       lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_hash),
                        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_TYPE)value_free_stack,
+       lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_stack),
                        conf->data);
        lh_free(conf->data);
        }
@@ -235,14 +242,19 @@ static void value_free_stack(CONF_VALUE *a, LHASH *conf)
        OPENSSL_free(a);
        }
 
-static unsigned long hash(CONF_VALUE *v)
+/* 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(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)
                {
@@ -262,7 +274,7 @@ static int cmp_conf(CONF_VALUE *a, CONF_VALUE *b)
        }
 
 /* Up until OpenSSL 0.9.5a, this was new_section */
-CONF_VALUE *_CONF_new_section(CONF *conf, char *section)
+CONF_VALUE *_CONF_new_section(CONF *conf, const char *section)
        {
        STACK *sk=NULL;
        int ok=0,i;