Sort openssl.ec, the configuration file for mkerr.pl.
[openssl.git] / crypto / conf / conf_api.c
index 8b6bc9a..9615df5 100644 (file)
 
 /* Part of the code in here was originally in conf.c, which is now removed */
 
+#ifndef CONF_DEBUG
+# undef NDEBUG /* avoid conflicting definitions */
+# define NDEBUG
+#endif
+
+#include <assert.h>
+#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)
@@ -146,6 +160,9 @@ char *_CONF_get_string(CONF *conf, char *section, char *name)
                return(Getenv(name));
        }
 
+#if 0 /* There's no way to provide error checking with this function, so
+        force implementors of the higher levels to get a string and read
+        the number themselves. */
 long _CONF_get_number(CONF *conf, char *section, char *name)
        {
        char *str;
@@ -162,6 +179,7 @@ long _CONF_get_number(CONF *conf, char *section, char *name)
                str++;
                }
        }
+#endif
 
 int _CONF_new_data(CONF *conf)
        {
@@ -170,7 +188,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_new(hash, cmp_conf)) == NULL)
                        {
                        return 0;
                        }
@@ -183,12 +201,14 @@ 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,(void (*)())value_free_hash,conf->data);
+       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,(void (*)())value_free_stack,conf->data);
+       lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_stack),
+                       conf->data);
        lh_free(conf->data);
        }
 
@@ -221,14 +241,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)
                {
@@ -267,13 +292,7 @@ CONF_VALUE *_CONF_new_section(CONF *conf, char *section)
        v->value=(char *)sk;
        
        vv=(CONF_VALUE *)lh_insert(conf->data,v);
-       if (vv != NULL)
-               {
-#if !defined(NO_STDIO) && !defined(WIN16)
-               fprintf(stderr,"internal fault\n");
-#endif
-               abort();
-               }
+       assert(vv == NULL);
        ok=1;
 err:
        if (!ok)