$NetBSD: patch-dm,v 1.1 2009/08/11 14:26:58 taca Exp $

* Take care for API of OpenSSL 1.0.0 and later.
* Constify.

--- ext/openssl/ossl_config.c.orig	2007-07-20 15:22:54.000000000 +0900
+++ ext/openssl/ossl_config.c
@@ -294,8 +294,17 @@ ossl_config_get_section_old(VALUE self, 
 
 #ifdef IMPLEMENT_LHASH_DOALL_ARG_FN
 static void
-get_conf_section(CONF_VALUE *cv, VALUE ary)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+get_conf_section_doall_arg(void *arg1, void *arg2)
+#else
+get_conf_section(void *arg1, void *arg2)
+#endif
 {
+    CONF_VALUE *cv;
+    VALUE ary;
+
+    cv = arg1;
+    ary = (VALUE)arg2;
     if(cv->name) return;
     rb_ary_push(ary, rb_str_new2(cv->section));
 }
@@ -310,19 +319,31 @@ ossl_config_get_sections(VALUE self)
 
     GetConfig(self, conf);
     ary = rb_ary_new();
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+    LHM_lh_doall_arg(CONF_VALUE, conf->data,
+		     LHASH_DOALL_ARG_FN(get_conf_section), void, (void*)ary);
+#else
     lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(get_conf_section), (void*)ary);
+#endif
 
     return ary;
 }
 
 static void
-dump_conf_value(CONF_VALUE *cv, VALUE str)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+dump_conf_value_doall_arg(void *arg1, void *arg2)
+#else
+dump_conf_value(void *arg1, void *arg2)
+#endif
 {
     STACK_OF(CONF_VALUE) *sk;
-    CONF_VALUE *v;
+    CONF_VALUE *cv, *v;
+    VALUE str;
     int i, num;
 
+    cv = arg1;
     if (cv->name) return;
+    str = (VALUE)arg2;
     sk = (STACK_OF(CONF_VALUE)*)cv->value;
     num = sk_CONF_VALUE_num(sk);
     rb_str_cat2(str, "[ ");
@@ -346,7 +367,12 @@ dump_conf(CONF *conf)
     VALUE str;
 
     str = rb_str_new(0, 0);
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+    LHM_lh_doall_arg(CONF_VALUE, conf->data,
+		     LHASH_DOALL_ARG_FN(dump_conf_value), void, (void*)str);
+#else
     lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(dump_conf_value), (void*)str);
+#endif
 
     return str;
 }
@@ -362,13 +388,18 @@ ossl_config_to_s(VALUE self)
 }
 
 static void
-each_conf_value(CONF_VALUE *cv, void* dummy)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+each_conf_value_doall_arg(void *arg1, void* dummy)
+#else
+each_conf_value(void *arg1, void* dummy)
+#endif
 {
     STACK_OF(CONF_VALUE) *sk;
-    CONF_VALUE *v;
+    CONF_VALUE *cv, *v;
     VALUE section, name, value, args;
     int i, num;
 
+    cv = arg1;
     if (cv->name) return;
     sk = (STACK_OF(CONF_VALUE)*)cv->value;
     num = sk_CONF_VALUE_num(sk);
@@ -390,7 +421,12 @@ ossl_config_each(VALUE self)
     CONF *conf;
 
     GetConfig(self, conf);
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+    LHM_lh_doall_arg(CONF_VALUE, conf->data,
+		     LHASH_DOALL_ARG_FN(each_conf_value), void, (void*)NULL);
+#else
     lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(each_conf_value), (void*)NULL);
+#endif
 
     return self;
 }
@@ -421,7 +457,7 @@ static VALUE
 ossl_config_inspect(VALUE self)
 {
     VALUE str, ary = ossl_config_get_sections(self);
-    char *cname = rb_class2name(rb_obj_class(self));
+    const char *cname = rb_class2name(rb_obj_class(self));
 
     str = rb_str_new2("#<");
     rb_str_cat2(str, cname);
