summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--databases/ruby-bdb/Makefile5
-rw-r--r--databases/ruby-bdb/files/patch-bdbxml1-bdbxml.cc9
-rw-r--r--databases/ruby-bdb/files/patch-bdbxml2-bdbxml.h4
-rw-r--r--databases/ruby-bdb/files/patch-src-bdb.c15
-rw-r--r--databases/ruby-bdb/files/patch-src-common.c1091
-rw-r--r--databases/ruby-bdb/files/patch-src-delegator.c11
-rw-r--r--databases/ruby-bdb/files/patch-src-env.c402
-rw-r--r--databases/ruby-bdb/files/patch-src-lock.c11
-rw-r--r--databases/ruby-bdb/files/patch-src-log.c11
-rw-r--r--databases/ruby-bdb/files/patch-src-recnum.c9
-rw-r--r--databases/ruby-bdb/files/patch-src-sequence.c20
-rw-r--r--databases/ruby-bdb/files/patch-src-transaction.c27
12 files changed, 1582 insertions, 33 deletions
diff --git a/databases/ruby-bdb/Makefile b/databases/ruby-bdb/Makefile
index c08b74f499e7..7396ee4a97bc 100644
--- a/databases/ruby-bdb/Makefile
+++ b/databases/ruby-bdb/Makefile
@@ -1,6 +1,6 @@
PORTNAME= bdb
PORTVERSION= 0.6.6
-PORTREVISION= 8
+PORTREVISION= 9
CATEGORIES= databases ruby
MASTER_SITES= ftp://ftp.idaemons.org/pub/distfiles/ruby/ \
http://idaemons.org/distfiles/ruby/ \
@@ -14,9 +14,6 @@ WWW= https://github.com/knu/ruby-bdb
LICENSE= RUBY
-BROKEN_RUBY32= yes
-BROKEN_RUBY33= yes
-
BUILD_DEPENDS= rubygem-rdoc>=0.a:devel/rubygem-rdoc
USES= bdb ruby:extconf shebangfix tar:bzip2
diff --git a/databases/ruby-bdb/files/patch-bdbxml1-bdbxml.cc b/databases/ruby-bdb/files/patch-bdbxml1-bdbxml.cc
index afd3561f8df8..b7a9b2093410 100644
--- a/databases/ruby-bdb/files/patch-bdbxml1-bdbxml.cc
+++ b/databases/ruby-bdb/files/patch-bdbxml1-bdbxml.cc
@@ -109,3 +109,12 @@
}
xb_eFatal = rb_const_get(xb_mDb, rb_intern("Fatal"));
+@@ -2477,7 +2491,7 @@ extern "C" {
+ rb_define_method(xb_cUpd, "<<", RMF(xb_upd_add), 1);
+ rb_define_method(xb_cUpd, "delete", RMF(xb_upd_delete), -1);
+ rb_define_method(xb_cUpd, "update", RMF(xb_upd_update), -1);
+- xb_cTmp = rb_define_class_under(xb_mXML, "Tmp", rb_cData);
++ xb_cTmp = rb_define_class_under(xb_mXML, "Tmp", rb_cObject);
+ rb_undef_method(CLASS_OF(xb_cTmp), "allocate");
+ rb_undef_method(CLASS_OF(xb_cTmp), "new");
+ rb_define_method(xb_cTmp, "[]", RMF(xb_cxt_name_get), 1);
diff --git a/databases/ruby-bdb/files/patch-bdbxml2-bdbxml.h b/databases/ruby-bdb/files/patch-bdbxml2-bdbxml.h
index ba92db94b87c..3b9fced8a529 100644
--- a/databases/ruby-bdb/files/patch-bdbxml2-bdbxml.h
+++ b/databases/ruby-bdb/files/patch-bdbxml2-bdbxml.h
@@ -1,11 +1,11 @@
--- bdbxml2/bdbxml.h.orig 2011-04-06 19:35:39 UTC
+++ bdbxml2/bdbxml.h
-@@ -377,7 +377,7 @@
+@@ -377,7 +377,7 @@ get_mod(VALUE obj)
static inline void
rset_obj(VALUE obj)
{
- RBASIC(obj)->klass = rb_cData;
-+ RBASIC_SET_CLASS_RAW(obj, rb_cData);
++ RBASIC_SET_CLASS_RAW(obj, rb_cObject);
RDATA(obj)->dfree = (RDF)free;
RDATA(obj)->dmark = 0;
}
diff --git a/databases/ruby-bdb/files/patch-src-bdb.c b/databases/ruby-bdb/files/patch-src-bdb.c
index 3ad6c0cb8163..87bc6d797eec 100644
--- a/databases/ruby-bdb/files/patch-src-bdb.c
+++ b/databases/ruby-bdb/files/patch-src-bdb.c
@@ -1,14 +1,16 @@
--- src/bdb.c.orig 2011-04-06 19:35:39 UTC
+++ src/bdb.c
-@@ -166,11 +166,10 @@
+@@ -165,12 +165,11 @@ Init_bdb()
+ if (rb_const_defined_at(rb_cObject, rb_intern("BDB"))) {
rb_raise(rb_eNameError, "module already defined");
}
- version = rb_tainted_str_new2(db_version(&major, &minor, &patch));
+- version = rb_tainted_str_new2(db_version(&major, &minor, &patch));
- if (major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR
- || patch != DB_VERSION_PATCH) {
- rb_raise(rb_eNotImpError, "\nBDB needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d.%d and libdb version %d.%d.%d\n",
- DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
- major, minor, patch);
++ version = rb_str_new_cstr(db_version(&major, &minor, &patch));
+ if (major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR) {
+ rb_raise(rb_eNotImpError, "\nBDB needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d and libdb version %d.%d\n",
+ DB_VERSION_MAJOR, DB_VERSION_MINOR,
@@ -16,3 +18,12 @@
}
bdb_mMarshal = rb_const_get(rb_cObject, rb_intern("Marshal"));
bdb_id_current_db = rb_intern("__bdb_current_db__");
+@@ -958,7 +957,7 @@ Init_bdb()
+ bdb_init_delegator();
+ bdb_init_sequence();
+
+- bdb_errstr = rb_tainted_str_new(0, 0);
++ bdb_errstr = rb_str_new(0, 0);
+ rb_global_variable(&bdb_errstr);
+
+ }
diff --git a/databases/ruby-bdb/files/patch-src-common.c b/databases/ruby-bdb/files/patch-src-common.c
index ba1783425a39..19682dfb76a5 100644
--- a/databases/ruby-bdb/files/patch-src-common.c
+++ b/databases/ruby-bdb/files/patch-src-common.c
@@ -1,5 +1,32 @@
--- src/common.c.orig 2011-04-06 19:35:39 UTC
+++ src/common.c
+@@ -273,7 +273,7 @@ bdb_test_load(VALUE obj, DBT *a, int type_kv)
+ res = Qnil;
+ }
+ else {
+- res = rb_tainted_str_new(a->data, a->size);
++ res = rb_str_new(a->data, a->size);
+ if (dbst->filter[2 + posi]) {
+ if (FIXNUM_P(dbst->filter[2 + posi])) {
+ res = rb_funcall(obj, NUM2INT(dbst->filter[2 + posi]),
+@@ -494,7 +494,7 @@ bdb_h_hash(DB *dbbd, const void *bytes, u_int32_t leng
+ #endif
+
+ GetIdDbSec(obj, dbst, dbbd);
+- st = rb_tainted_str_new((char *)bytes, length);
++ st = rb_str_new((char *)bytes, length);
+ if (dbst->h_hash == 0)
+ res = rb_funcall(obj, id_h_hash, 1, st);
+ else
+@@ -603,7 +603,7 @@ compar_func(VALUE value)
+ }
+
+ static VALUE
+-bdb_i_options(VALUE obj, VALUE dbstobj)
++bdb_i_options(VALUE obj, VALUE dbstobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ VALUE key, value;
+ char *options, *str;
@@ -1080,9 +1080,11 @@ bdb_close(int argc, VALUE *argv, VALUE obj)
bdb_DB *dbst;
int flags = 0;
@@ -12,7 +39,27 @@
Data_Get_Struct(obj, bdb_DB, dbst);
if (dbst->dbp != NULL) {
if (rb_scan_args(argc, argv, "01", &opt)) {
-@@ -1229,7 +1231,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
+@@ -1140,8 +1142,7 @@ bdb_hard_count(dbp)
+ #endif
+
+ static long
+-bdb_is_recnum(dbp)
+- DB *dbp;
++bdb_is_recnum(DB *dbp)
+ {
+ DB_BTREE_STAT *bdb_stat;
+ long count;
+@@ -1172,8 +1173,7 @@ bdb_is_recnum(dbp)
+ }
+
+ static VALUE
+-bdb_recno_length(obj)
+- VALUE obj;
++bdb_recno_length(VALUE obj)
+ {
+ bdb_DB *dbst;
+ DB_BTREE_STAT *bdb_stat;
+@@ -1229,7 +1229,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE v, f = argv[argc - 1];
@@ -21,7 +68,7 @@
if (!rb_obj_is_kind_of(v, bdb_cTxn)) {
rb_raise(bdb_eFatal, "argument of txn must be a transaction");
}
-@@ -1241,7 +1243,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
+@@ -1241,7 +1241,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
dbst->options |= envst->options & BDB_NO_THREAD;
dbst->marshal = txnst->marshal;
}
@@ -30,7 +77,7 @@
if (!rb_obj_is_kind_of(v, bdb_cEnv)) {
rb_raise(bdb_eFatal, "argument of env must be an environnement");
}
-@@ -1254,11 +1256,11 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
+@@ -1254,11 +1254,11 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
#if HAVE_CONST_DB_ENCRYPT
if (envst && (envst->options & BDB_ENV_ENCRYPT)) {
VALUE tmp = rb_str_new2("set_flags");
@@ -44,7 +91,16 @@
rb_hash_aset(f, tmp, INT2NUM(NUM2INT(v) | DB_ENCRYPT));
}
else {
-@@ -1431,15 +1433,19 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
+@@ -1338,7 +1338,7 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
+ #endif
+ if (argc && TYPE(argv[argc - 1]) == T_HASH) {
+ hash_arg = argv[argc - 1];
+- rb_iterate(rb_each, argv[argc - 1], bdb_i_options, obj);
++ rb_block_call(argv[argc - 1], rb_intern("each"), 0, NULL, bdb_i_options, obj);
+ argc--;
+ }
+ mode = flags = 0;
+@@ -1431,15 +1431,19 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
dbst->options |= BDB_FEEDBACK;
}
#endif
@@ -64,7 +120,22 @@
#if HAVE_CONST_DB_DUPSORT
if (dbst->options & BDB_DUP_COMPARE) {
#if HAVE_TYPE_DB_INFO
-@@ -1570,10 +1576,10 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
+@@ -1540,12 +1544,12 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
+ }
+ dbst->filename = dbst->database = Qnil;
+ if (name) {
+- dbst->filename = rb_tainted_str_new2(name);
++ dbst->filename = rb_str_new_cstr(name);
+ OBJ_FREEZE(dbst->filename);
+ }
+ #if HAVE_ST_DB_OPEN
+ if (subname) {
+- dbst->database = rb_tainted_str_new2(subname);
++ dbst->database = rb_str_new_cstr(subname);
+ OBJ_FREEZE(dbst->database);
+ }
+ #endif
+@@ -1570,10 +1574,10 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
#endif
switch(dbst->type) {
case DB_BTREE:
@@ -77,7 +148,7 @@
break;
case DB_RECNO:
{
-@@ -1581,17 +1587,17 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
+@@ -1581,17 +1585,17 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
rb_warning("It's hard to distinguish Recnum with Recno for all versions of Berkeley DB");
if ((count = bdb_is_recnum(dbst->dbp)) != -1) {
@@ -98,7 +169,17 @@
break;
#endif
default:
-@@ -1635,29 +1641,29 @@ bdb_s_alloc(obj)
+@@ -1625,8 +1629,7 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
+ }
+
+ static VALUE
+-bdb_s_alloc(obj)
+- VALUE obj;
++bdb_s_alloc(VALUE obj)
+ {
+ VALUE res, cl;
+ bdb_DB *dbst;
+@@ -1635,29 +1638,29 @@ bdb_s_alloc(obj)
dbst->options = BDB_NOT_OPEN;
cl = obj;
while (cl) {
@@ -134,9 +215,81 @@
dbst->type = DB_UNKNOWN;
break;
}
-@@ -1802,7 +1808,9 @@ bdb_append_internal(argc, argv, obj, flag, retval)
+@@ -1671,8 +1674,7 @@ bdb_s_alloc(obj)
+ }
+
+ static VALUE
+-bdb_i_s_create(obj, db)
+- VALUE obj, db;
++bdb_i_s_create(VALUE obj, VALUE db, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ VALUE tmp[2];
+ tmp[0] = rb_ary_entry(obj, 0);
+@@ -1689,7 +1691,7 @@ bdb_s_create(int argc, VALUE *argv, VALUE obj)
+
+ res = rb_funcall2(obj, rb_intern("new"), 0, 0);
+ if (argc == 1 && TYPE(argv[0]) == T_HASH) {
+- rb_iterate(rb_each, argv[0], bdb_i_s_create, res);
++ rb_block_call(argv[0], rb_intern("each"), 0, NULL, bdb_i_s_create, res);
+ return res;
+ }
+ if (argc % 2 != 0) {
+@@ -1718,8 +1720,7 @@ struct re {
+ };
+
+ static VALUE
+-bdb_queue_i_search_re_len(obj, restobj)
+- VALUE obj, restobj;
++bdb_queue_i_search_re_len(VALUE obj, VALUE restobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ VALUE key, value;
+ char *str;
+@@ -1760,14 +1761,14 @@ bdb_queue_s_new(int argc, VALUE *argv, VALUE obj)
+ rest->re_len = -1;
+ rest->re_pad = -1;
+ if (argc && TYPE(argv[argc - 1]) == T_HASH) {
+- rb_iterate(rb_each, argv[argc - 1], bdb_queue_i_search_re_len, restobj);
++ rb_block_call(argv[argc - 1], rb_intern("each"), 0, NULL, bdb_queue_i_search_re_len, restobj);
+ if (rest->re_len <= 0) {
+ rest->re_len = DEFAULT_RECORD_LENGTH;
+- rb_hash_aset(argv[argc - 1], rb_tainted_str_new2("set_re_len"), INT2NUM(rest->re_len));
++ rb_hash_aset(argv[argc - 1], rb_str_new_cstr("set_re_len"), INT2NUM(rest->re_len));
+ }
+ if (rest->re_pad < 0) {
+ rest->re_pad = DEFAULT_RECORD_PAD;
+- rb_hash_aset(argv[argc - 1], rb_tainted_str_new2("set_re_pad"), INT2NUM(rest->re_pad));
++ rb_hash_aset(argv[argc - 1], rb_str_new_cstr("set_re_pad"), INT2NUM(rest->re_pad));
+ }
+ nargv = argv;
+ }
+@@ -1777,8 +1778,8 @@ bdb_queue_s_new(int argc, VALUE *argv, VALUE obj)
+ nargv[argc] = rb_hash_new();
+ rest->re_len = DEFAULT_RECORD_LENGTH;
+ rest->re_pad = DEFAULT_RECORD_PAD;
+- rb_hash_aset(nargv[argc], rb_tainted_str_new2("set_re_len"), INT2NUM(DEFAULT_RECORD_LENGTH));
+- rb_hash_aset(nargv[argc], rb_tainted_str_new2("set_re_pad"), INT2NUM(DEFAULT_RECORD_PAD));
++ rb_hash_aset(nargv[argc], rb_str_new_cstr("set_re_len"), INT2NUM(DEFAULT_RECORD_LENGTH));
++ rb_hash_aset(nargv[argc], rb_str_new_cstr("set_re_pad"), INT2NUM(DEFAULT_RECORD_PAD));
+ argc += 1;
+ }
+ ret = bdb_s_new(argc, nargv, obj);
+@@ -1790,9 +1791,7 @@ bdb_queue_s_new(int argc, VALUE *argv, VALUE obj)
+ #endif
+
+ static VALUE
+-bdb_append_internal(argc, argv, obj, flag, retval)
+- int argc, flag;
+- VALUE *argv, obj;
++bdb_append_internal(int argc, VALUE *argv, VALUE obj, int flag, retval)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -1800,9 +1799,11 @@ bdb_append_internal(argc, argv, obj, flag, retval)
+ db_recno_t recno;
+ int i;
VALUE *a, ary = Qnil;
- volatile VALUE res = Qnil;
+- volatile VALUE res = Qnil;
++ volatile VALUE res;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
@@ -144,7 +297,16 @@
if (argc < 1)
return obj;
INIT_TXN(txnid, obj, dbst);
-@@ -1885,7 +1893,9 @@ bdb_put(int argc, VALUE *argv, VALUE obj)
+@@ -1876,7 +1877,7 @@ bdb_unshift(int argc, VALUE *argv, VALUE obj)
+ VALUE
+ bdb_put(int argc, VALUE *argv, VALUE obj)
+ {
+- volatile VALUE a0 = Qnil;
++ volatile VALUE a0;
+ volatile VALUE b0 = Qnil;
+ VALUE a, b, c;
+ bdb_DB *dbst;
+@@ -1885,7 +1886,9 @@ bdb_put(int argc, VALUE *argv, VALUE obj)
int ret, flags;
db_recno_t recno;
@@ -154,7 +316,226 @@
INIT_TXN(txnid, obj, dbst);
flags = 0;
a = b = c = Qnil;
-@@ -2374,7 +2384,9 @@ bdb_consume(obj)
+@@ -1924,8 +1927,7 @@ bdb_put(int argc, VALUE *argv, VALUE obj)
+ }
+
+ static VALUE
+-bdb_aset(obj, a, b)
+- VALUE obj, a, b;
++bdb_aset(VALUE obj, VALUE a, VALUE b)
+ {
+ VALUE tmp[2];
+ tmp[0] = a;
+@@ -1935,9 +1937,7 @@ bdb_aset(obj, a, b)
+ }
+
+ VALUE
+-bdb_test_load_key(obj, key)
+- VALUE obj;
+- DBT *key;
++bdb_test_load_key(VALUE obj, DBT *key)
+ {
+ bdb_DB *dbst;
+ Data_Get_Struct(obj, bdb_DB, dbst);
+@@ -1947,18 +1947,14 @@ bdb_test_load_key(obj, key)
+ }
+
+ VALUE
+-bdb_assoc(obj, key, data)
+- VALUE obj;
+- DBT *key, *data;
++bdb_assoc(VALUE obj, DBT *key, DBT *data)
+ {
+ return rb_assoc_new(bdb_test_load_key(obj, key),
+ bdb_test_load(obj, data, FILTER_VALUE));
+ }
+
+ VALUE
+-bdb_assoc_dyna(obj, key, data)
+- VALUE obj;
+- DBT *key, *data;
++bdb_assoc_dyna(VALUE obj, DBT *key, DBT *data)
+ {
+ VALUE k, v;
+ int to_free = key->flags & DB_DBT_MALLOC;
+@@ -1976,9 +1972,7 @@ bdb_assoc_dyna(obj, key, data)
+ #if HAVE_ST_DB_PGET
+
+ static VALUE
+-bdb_assoc2(obj, skey, pkey, data)
+- VALUE obj;
+- DBT *skey, *pkey, *data;
++bdb_assoc2(VALUE obj, DBT *skey, DBT *pkey, DBT *data)
+ {
+ return rb_assoc_new(
+ rb_assoc_new(bdb_test_load_key(obj, skey), bdb_test_load_key(obj, pkey)),
+@@ -1988,9 +1982,7 @@ bdb_assoc2(obj, skey, pkey, data)
+ #endif
+
+ VALUE
+-bdb_assoc3(obj, skey, pkey, data)
+- VALUE obj;
+- DBT *skey, *pkey, *data;
++bdb_assoc3(VALUE obj, DBT *skey, DBT *pkey, DBT *data)
+ {
+ return rb_ary_new3(3, bdb_test_load_key(obj, skey),
+ bdb_test_load_key(obj, pkey),
+@@ -2006,12 +1998,7 @@ static VALUE bdb_has_both_internal _((VALUE, VALUE, VA
+ #endif
+
+ static VALUE
+-bdb_get_internal(argc, argv, obj, notfound, dyna)
+- int argc;
+- VALUE *argv;
+- VALUE obj;
+- VALUE notfound;
+- int dyna;
++bdb_get_internal(int argc, VALUE *argv, VALUE obj, VALUE notfound, int dyna)
+ {
+ VALUE a = Qnil;
+ VALUE b = Qnil;
+@@ -2019,13 +2006,12 @@ bdb_get_internal(argc, argv, obj, notfound, dyna)
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+ DBT key, data;
+- int flagss;
+ int ret, flags;
+ db_recno_t recno;
+ void *tmp_data = 0;
+
+ INIT_TXN(txnid, obj, dbst);
+- flagss = flags = 0;
++ flags = 0;
+ MEMZERO(&key, DBT, 1);
+ MEMZERO(&data, DBT, 1);
+ data.flags |= DB_DBT_MALLOC;
+@@ -2043,7 +2029,7 @@ bdb_get_internal(argc, argv, obj, notfound, dyna)
+ }
+ break;
+ case 2:
+- flagss = flags = NUM2INT(b);
++ flags = NUM2INT(b);
+ break;
+ }
+ a = bdb_test_recno(obj, &key, &recno, a);
+@@ -2128,13 +2114,12 @@ bdb_pget(int argc, VALUE *argv, VALUE obj)
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+ DBT pkey, data, skey;
+- int flagss;
+ int ret, flags;
+ db_recno_t srecno;
+ void *tmp_data = 0;
+
+ INIT_TXN(txnid, obj, dbst);
+- flagss = flags = 0;
++ flags = 0;
+ MEMZERO(&skey, DBT, 1);
+ MEMZERO(&pkey, DBT, 1);
+ MEMZERO(&data, DBT, 1);
+@@ -2150,7 +2135,7 @@ bdb_pget(int argc, VALUE *argv, VALUE obj)
+ }
+ break;
+ case 2:
+- flagss = flags = NUM2INT(b);
++ flags = NUM2INT(b);
+ break;
+ }
+ a = bdb_test_recno(obj, &skey, &srecno, a);
+@@ -2174,15 +2159,14 @@ bdb_pget(int argc, VALUE *argv, VALUE obj)
+ #if HAVE_TYPE_DB_KEY_RANGE
+
+ static VALUE
+-bdb_btree_key_range(obj, a)
+- VALUE obj, a;
++bdb_btree_key_range(VALUE obj, VALUE a)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+ DBT key;
+ db_recno_t recno;
+ DB_KEY_RANGE key_range;
+- volatile VALUE b = Qnil;
++ volatile VALUE b;
+
+ INIT_TXN(txnid, obj, dbst);
+ MEMZERO(&key, DBT, 1);
+@@ -2203,8 +2187,7 @@ struct data_flags {
+ };
+
+ static VALUE
+-bdb_compact_i(obj, dataobj)
+- VALUE obj, dataobj;
++bdb_compact_i(VALUE obj, VALUE dataobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ VALUE key, value;
+ char *str;
+@@ -2255,10 +2238,10 @@ bdb_treerec_compact(int argc, VALUE *argv, VALUE obj)
+ struct data_flags *dtf;
+ VALUE dtobj;
+
+- dtobj = Data_Make_Struct(rb_cData, struct data_flags, 0, free, dtf);
++ dtobj = Data_Make_Struct(rb_cObject, struct data_flags, 0, free, dtf);
+ dtf->cdata = &cdata;
+ dtf->flags = 0;
+- rb_iterate(rb_each, c, bdb_compact_i, dtobj);
++ rb_block_call(c, rb_intern("each"), 0, NULL, bdb_compact_i, dtobj);
+ flags = dtf->flags;
+ }
+ /* ... */
+@@ -2280,16 +2263,16 @@ bdb_treerec_compact(int argc, VALUE *argv, VALUE obj)
+ bdb_test_error(dbst->dbp->compact(dbst->dbp, txnid, pstart, pstop, &cdata,
+ flags, &end));
+ result = rb_hash_new();
+- rb_hash_aset(result, rb_tainted_str_new2("end"), bdb_test_load_key(obj, &end));
+- rb_hash_aset(result, rb_tainted_str_new2("compact_deadlock"),
++ rb_hash_aset(result, rb_str_new_cstr("end"), bdb_test_load_key(obj, &end));
++ rb_hash_aset(result, rb_str_new_cstr("compact_deadlock"),
+ INT2NUM(cdata.compact_deadlock));
+- rb_hash_aset(result, rb_tainted_str_new2("compact_levels"),
++ rb_hash_aset(result, rb_str_new_cstr("compact_levels"),
+ INT2NUM(cdata.compact_levels));
+- rb_hash_aset(result, rb_tainted_str_new2("compact_pages_free"),
++ rb_hash_aset(result, rb_str_new_cstr("compact_pages_free"),
+ INT2NUM(cdata.compact_pages_free));
+- rb_hash_aset(result, rb_tainted_str_new2("compact_pages_examine"),
++ rb_hash_aset(result, rb_str_new_cstr("compact_pages_examine"),
+ INT2NUM(cdata.compact_pages_examine));
+- rb_hash_aset(result, rb_tainted_str_new2("compact_pages_truncated"),
++ rb_hash_aset(result, rb_str_new_cstr("compact_pages_truncated"),
+ INT2NUM(cdata.compact_pages_truncated));
+ return result;
+ }
+@@ -2301,8 +2284,7 @@ bdb_treerec_compact(int argc, VALUE *argv, VALUE obj)
+ #if HAVE_CONST_DB_NEXT_DUP
+
+ static VALUE
+-bdb_count(obj, a)
+- VALUE obj, a;
++bdb_count(VALUE obj, VALUE a)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -2311,7 +2293,7 @@ bdb_count(obj, a)
+ int ret, flags27;
+ db_recno_t recno;
+ db_recno_t count;
+- volatile VALUE b = Qnil;
++ volatile VALUE b;
+
+ INIT_TXN(txnid, obj, dbst);
+ MEMZERO(&key, DBT, 1);
+@@ -2364,8 +2346,7 @@ bdb_count(obj, a)
+ #if HAVE_CONST_DB_CONSUME
+
+ static VALUE
+-bdb_consume(obj)
+- VALUE obj;
++bdb_consume(VALUE obj)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -2374,7 +2355,9 @@ bdb_consume(obj)
int ret;
db_recno_t recno;
@@ -164,9 +545,63 @@
INIT_TXN(txnid, obj, dbst);
MEMZERO(&key, DBT, 1);
MEMZERO(&data, DBT, 1);
-@@ -2551,7 +2563,9 @@ bdb_del(obj, a)
+@@ -2396,8 +2379,7 @@ bdb_consume(obj)
+ #endif
+
+ static VALUE
+-bdb_has_key(obj, key)
+- VALUE obj, key;
++bdb_has_key(VALUE obj, VALUE key)
+ {
+ return (bdb_get_internal(1, &key, obj, Qundef, 0) == Qundef)?Qfalse:Qtrue;
+ }
+@@ -2405,8 +2387,7 @@ bdb_has_key(obj, key)
+ #if CANT_DB_CURSOR_GET_BOTH
+
+ static VALUE
+-bdb_has_both_internal(obj, a, b, flag)
+- VALUE obj, a, b, flag;
++bdb_has_both_internal(VALUE obj, VALUE a, VALUE b, VALUE flag)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -2491,8 +2472,7 @@ bdb_has_both_internal(obj, a, b, flag)
+ #endif
+
+ static VALUE
+-bdb_has_both(obj, a, b)
+- VALUE obj, a, b;
++bdb_has_both(VALUE obj, VALUE a, VALUE b)
+ {
+ #if ! HAVE_CONST_DB_GET_BOTH
+ return bdb_has_both_internal(obj, a, b, Qfalse);
+@@ -2502,8 +2482,8 @@ bdb_has_both(obj, a, b)
+ DBT key, data;
+ int ret, flags;
+ db_recno_t recno;
+- volatile VALUE c = Qnil;
+- volatile VALUE d = Qnil;
++ volatile VALUE c;
++ volatile VALUE d;
+ void *tmp_key, *tmp_data;
+
+ INIT_TXN(txnid, obj, dbst);
+@@ -2540,8 +2520,7 @@ bdb_has_both(obj, a, b)
+ }
+
+ VALUE
+-bdb_del(obj, a)
+- VALUE a, obj;
++bdb_del(VALUE obj, VALUE a)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -2549,9 +2528,11 @@ bdb_del(obj, a)
+ DBT key;
+ int ret;
db_recno_t recno;
- volatile VALUE b = Qnil;
+- volatile VALUE b = Qnil;
++ volatile VALUE b;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
@@ -174,7 +609,142 @@
INIT_TXN(txnid, obj, dbst);
#if HAVE_CONST_DB_AUTO_COMMIT
if (txnid == NULL && (dbst->options & BDB_AUTO_COMMIT)) {
-@@ -3004,8 +3018,8 @@ bdb_each_kvc(argc, argv, obj, sens, replace, type)
+@@ -2568,8 +2549,7 @@ bdb_del(obj, a)
+ }
+
+ static VALUE
+-bdb_empty(obj)
+- VALUE obj;
++bdb_empty(VALUE obj)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -2603,8 +2583,7 @@ bdb_empty(obj)
+ }
+
+ static VALUE
+-bdb_lgth_intern(obj, delete)
+- VALUE obj, delete;
++bdb_lgth_intern(VALUE obj, VALUE delete)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -2646,8 +2625,7 @@ bdb_lgth_intern(obj, delete)
+ }
+
+ static VALUE
+-bdb_length(obj)
+- VALUE obj;
++bdb_length(VALUE obj)
+ {
+ return bdb_lgth_intern(obj, Qfalse);
+ }
+@@ -2667,10 +2645,10 @@ typedef struct {
+ } eachst;
+
+ static VALUE
+-bdb_each_ensure(st)
+- eachst *st;
++bdb_each_ensure(VALUE pst)
+ {
+ #if HAVE_CONST_DB_MULTIPLE_KEY
++ eachst *st = (eachst *)pst;
+ if (st->len && st->data) {
+ free(st->data);
+ }
+@@ -2680,9 +2658,7 @@ bdb_each_ensure(st)
+ }
+
+ static void
+-bdb_treat(st, pkey, key, data)
+- eachst *st;
+- DBT *pkey, *key, *data;
++bdb_treat(eachst *st, DBT *pkey, DBT *key, DBT *data)
+ {
+ bdb_DB *dbst;
+ DBC *dbcp;
+@@ -2772,10 +2748,7 @@ bdb_treat(st, pkey, key, data)
+ }
+
+ static int
+-bdb_i_last_prefix(dbcp, key, pkey, data, orig, st)
+- DBC *dbcp;
+- DBT *key, *pkey, *data, *orig;
+- eachst *st;
++bdb_i_last_prefix(DBC *dbcp, DBT *key, DBT *pkey, DBT *data, DBT *orig, eachst *st)
+ {
+ int ret, flags = DB_LAST;
+
+@@ -2811,15 +2784,14 @@ bdb_i_last_prefix(dbcp, key, pkey, data, orig, st)
+ }
+
+ static VALUE
+-bdb_i_each_kv(st)
+- eachst *st;
++bdb_i_each_kv(VALUE pst)
+ {
++ eachst *st = (eachst *)pst;
+ bdb_DB *dbst;
+ DBC *dbcp;
+ DBT pkey, key, data, orig;
+ int ret, init = Qfalse, prefix = Qfalse;
+ db_recno_t recno;
+- volatile VALUE res = Qnil;
+
+ prefix = st->type & BDB_ST_PREFIX;
+ st->type &= ~BDB_ST_PREFIX;
+@@ -2834,7 +2806,7 @@ bdb_i_each_kv(st)
+ MEMZERO(&pkey, DBT, 1);
+ pkey.flags = DB_DBT_MALLOC;
+ if (!NIL_P(st->set)) {
+- res = bdb_test_recno(st->db, &key, &recno, st->set);
++ bdb_test_recno(st->db, &key, &recno, st->set);
+ if (prefix) {
+ init = Qtrue;
+ orig.size = key.size;
+@@ -2929,9 +2901,9 @@ bdb_i_each_kv(st)
+ #if HAVE_CONST_DB_MULTIPLE_KEY
+
+ static VALUE
+-bdb_i_each_kv_bulk(st)
+- eachst *st;
++bdb_i_each_kv_bulk(VALUE pst)
+ {
++ eachst *st = (eachst *)pst;
+ bdb_DB *dbst;
+ DBC *dbcp;
+ DBT key, data;
+@@ -2940,7 +2912,6 @@ bdb_i_each_kv_bulk(st)
+ int ret, init;
+ db_recno_t recno;
+ void *p;
+- volatile VALUE res = Qnil;
+
+ GetDB(st->db, dbst);
+ dbcp = st->dbcp;
+@@ -2958,7 +2929,7 @@ bdb_i_each_kv_bulk(st)
+ init = 1;
+ do {
+ if (init && !NIL_P(st->set)) {
+- res = bdb_test_recno(st->db, &key, &recno, st->set);
++ bdb_test_recno(st->db, &key, &recno, st->set);
+ ret = bdb_test_error(dbcp->c_get(dbcp, &key, &data,
+ ((st->type & BDB_ST_DUP)?DB_SET:
+ DB_SET_RANGE)|DB_MULTIPLE_KEY));
+@@ -2990,11 +2961,7 @@ bdb_i_each_kv_bulk(st)
+ #endif
+
+ VALUE
+-bdb_each_kvc(argc, argv, obj, sens, replace, type)
+- VALUE obj, *argv;
+- int argc, sens;
+- VALUE replace;
+- int type;
++bdb_each_kvc(int argc, VALUE *argv, VALUE obj, int sens, VALUE replace, int type)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -3004,8 +2971,8 @@ bdb_each_kvc(argc, argv, obj, sens, replace, type)
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE g, f = argv[argc - 1];
@@ -185,7 +755,7 @@
flags = NUM2INT(g);
}
argc--;
-@@ -3053,9 +3067,11 @@ bdb_each_kvc(argc, argv, obj, sens, replace, type)
+@@ -3053,9 +3020,11 @@ bdb_each_kvc(argc, argv, obj, sens, replace, type)
}
#endif
type &= ~BDB_ST_ONE;
@@ -197,7 +767,56 @@
INIT_TXN(txnid, obj, dbst);
#if HAVE_DB_CURSOR_4
bdb_test_error(dbst->dbp->cursor(dbst->dbp, txnid, &dbcp, flags));
-@@ -3309,7 +3325,9 @@ bdb_clear(int argc, VALUE *argv, VALUE obj)
+@@ -3211,8 +3180,7 @@ bdb_each_riap_prim(int argc, VALUE *argv, VALUE obj)
+ }
+
+ VALUE
+-bdb_to_type(obj, result, flag)
+- VALUE obj, result, flag;
++bdb_to_type(VALUE obj, VALUE result, VALUE flag)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -3266,15 +3234,13 @@ bdb_to_type(obj, result, flag)
+ }
+
+ static VALUE
+-bdb_to_a(obj)
+- VALUE obj;
++bdb_to_a(VALUE obj)
+ {
+ return bdb_to_type(obj, rb_ary_new(), Qtrue);
+ }
+
+ static VALUE
+-bdb_update_i(pair, obj)
+- VALUE pair, obj;
++bdb_update_i(VALUE pair, VALUE obj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ Check_Type(pair, T_ARRAY);
+ if (RARRAY_LEN(pair) < 2) {
+@@ -3285,17 +3251,15 @@ bdb_update_i(pair, obj)
+ }
+
+ static VALUE
+-each_pair(obj)
+- VALUE obj;
++each_pair(VALUE obj)
+ {
+ return rb_funcall(obj, rb_intern("each_pair"), 0, 0);
+ }
+
+ static VALUE
+-bdb_update(obj, other)
+- VALUE obj, other;
++bdb_update(VALUE obj, VALUE other)
+ {
+- rb_iterate(each_pair, other, bdb_update_i, obj);
++ rb_block_call(other, each_pair, 0, NULL, bdb_update_i, obj);
+ return obj;
+ }
+
+@@ -3309,7 +3273,9 @@ bdb_clear(int argc, VALUE *argv, VALUE obj)
#endif
int flags = 0;
@@ -207,7 +826,7 @@
#if HAVE_ST_DB_TRUNCATE
INIT_TXN(txnid, obj, dbst);
#if HAVE_CONST_DB_AUTO_COMMIT
-@@ -3323,8 +3341,8 @@ bdb_clear(int argc, VALUE *argv, VALUE obj)
+@@ -3323,8 +3289,8 @@ bdb_clear(int argc, VALUE *argv, VALUE obj)
flags = 0;
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE g, f = argv[argc - 1];
@@ -218,7 +837,7 @@
flags = NUM2INT(g);
}
argc--;
-@@ -3348,8 +3366,8 @@ bdb_replace(int argc, VALUE *argv, VALUE obj)
+@@ -3348,8 +3314,8 @@ bdb_replace(int argc, VALUE *argv, VALUE obj)
flags = 0;
if (TYPE(argv[argc - 1]) == T_HASH) {
VALUE f = argv[argc - 1];
@@ -229,7 +848,91 @@
flags = NUM2INT(g);
}
argc--;
-@@ -3557,8 +3575,10 @@ bdb_sync(obj)
+@@ -3359,28 +3325,24 @@ bdb_replace(int argc, VALUE *argv, VALUE obj)
+ }
+ g = INT2FIX(flags);
+ bdb_clear(1, &g, obj);
+- rb_iterate(each_pair, argv[0], bdb_update_i, obj);
++ rb_block_call(argv[0], rb_intern("each_pair"), 0, NULL, bdb_update_i, obj);
+ return obj;
+ }
+
+ static VALUE
+-bdb_invert(obj)
+- VALUE obj;
++bdb_invert(VALUE obj)
+ {
+ return bdb_to_type(obj, rb_hash_new(), Qfalse);
+ }
+
+ static VALUE
+-bdb_to_hash(obj)
+- VALUE obj;
++bdb_to_hash(VALUE obj)
+ {
+ return bdb_to_type(obj, rb_hash_new(), Qtrue);
+ }
+
+ static VALUE
+-bdb_kv(obj, type)
+- VALUE obj;
+- int type;
++bdb_kv(VALUE obj, int type)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -3426,23 +3388,19 @@ bdb_kv(obj, type)
+ }
+
+ static VALUE
+-bdb_values(obj)
+- VALUE obj;
++bdb_values(VALUE obj)
+ {
+ return bdb_kv(obj, BDB_ST_VALUE);
+ }
+
+ static VALUE
+-bdb_keys(obj)
+- VALUE obj;
++bdb_keys(VALUE obj)
+ {
+ return bdb_kv(obj, BDB_ST_KEY);
+ }
+
+ VALUE
+-bdb_internal_value(obj, a, b, sens)
+- VALUE obj, a, b;
+- int sens;
++bdb_internal_value(VALUE obj, VALUE a, VALUE b, int sens)
+ {
+ bdb_DB *dbst;
+ DB_TXN *txnid;
+@@ -3490,8 +3448,7 @@ bdb_internal_value(obj, a, b, sens)
+ }
+
+ VALUE
+-bdb_index(obj, a)
+- VALUE obj, a;
++bdb_index(VALUE obj, VALUE a)
+ {
+ return bdb_internal_value(obj, a, Qtrue, DB_NEXT);
+ }
+@@ -3545,20 +3502,20 @@ bdb_select(int argc, VALUE *argv, VALUE obj)
+ }
+
+ VALUE
+-bdb_has_value(obj, a)
+- VALUE obj, a;
++bdb_has_value(VALUE obj, VALUE a)
+ {
+ return bdb_internal_value(obj, a, Qfalse, DB_NEXT);
+ }
+
+ static VALUE
+-bdb_sync(obj)
+- VALUE obj;
++bdb_sync(VALUE obj)
{
bdb_DB *dbst;
@@ -240,7 +943,215 @@
GetDB(obj, dbst);
bdb_test_error(dbst->dbp->sync(dbst->dbp, 0));
return Qtrue;
-@@ -3884,7 +3904,9 @@ bdb_s_upgrade(int argc, VALUE *argv, VALUE obj)
+@@ -3597,36 +3554,36 @@ bdb_hash_stat(int argc, VALUE *argv, VALUE obj)
+ bdb_test_error(dbst->dbp->stat(dbst->dbp, &bdb_stat, flags));
+ #endif
+ hash = rb_hash_new();
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_magic"), INT2NUM(bdb_stat->hash_magic));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_version"), INT2NUM(bdb_stat->hash_version));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_pagesize"), INT2NUM(bdb_stat->hash_pagesize));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_magic"), INT2NUM(bdb_stat->hash_magic));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_version"), INT2NUM(bdb_stat->hash_version));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_pagesize"), INT2NUM(bdb_stat->hash_pagesize));
+ #if HAVE_ST_DB_HASH_STAT_HASH_NKEYS
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_nkeys"), INT2NUM(bdb_stat->hash_nkeys));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_nkeys"), INT2NUM(bdb_stat->hash_nkeys));
+ #if ! HAVE_ST_DB_HASH_STAT_HASH_NRECS
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_nrecs"), INT2NUM(bdb_stat->hash_nkeys));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_nrecs"), INT2NUM(bdb_stat->hash_nkeys));
+ #endif
+ #endif
+ #if HAVE_ST_DB_HASH_STAT_HASH_NRECS
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_nrecs"), INT2NUM(bdb_stat->hash_nrecs));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_nrecs"), INT2NUM(bdb_stat->hash_nrecs));
+ #endif
+ #if HAVE_ST_DB_HASH_STAT_HASH_NDATA
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_ndata"), INT2NUM(bdb_stat->hash_ndata));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_ndata"), INT2NUM(bdb_stat->hash_ndata));
+ #endif
+ #if HAVE_ST_DB_HASH_STAT_HASH_NELEM
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_nelem"), INT2NUM(bdb_stat->hash_nelem));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_nelem"), INT2NUM(bdb_stat->hash_nelem));
+ #endif
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_ffactor"), INT2NUM(bdb_stat->hash_ffactor));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_buckets"), INT2NUM(bdb_stat->hash_buckets));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_free"), INT2NUM(bdb_stat->hash_free));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_bfree"), INT2NUM(bdb_stat->hash_bfree));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_bigpages"), INT2NUM(bdb_stat->hash_bigpages));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_big_bfree"), INT2NUM(bdb_stat->hash_big_bfree));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_overflows"), INT2NUM(bdb_stat->hash_overflows));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_ovfl_free"), INT2NUM(bdb_stat->hash_ovfl_free));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_dup"), INT2NUM(bdb_stat->hash_dup));
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_dup_free"), INT2NUM(bdb_stat->hash_dup_free));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_ffactor"), INT2NUM(bdb_stat->hash_ffactor));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_buckets"), INT2NUM(bdb_stat->hash_buckets));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_free"), INT2NUM(bdb_stat->hash_free));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_bfree"), INT2NUM(bdb_stat->hash_bfree));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_bigpages"), INT2NUM(bdb_stat->hash_bigpages));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_big_bfree"), INT2NUM(bdb_stat->hash_big_bfree));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_overflows"), INT2NUM(bdb_stat->hash_overflows));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_ovfl_free"), INT2NUM(bdb_stat->hash_ovfl_free));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_dup"), INT2NUM(bdb_stat->hash_dup));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_dup_free"), INT2NUM(bdb_stat->hash_dup_free));
+ #if HAVE_ST_DB_HASH_STAT_HASH_PAGECNT
+- rb_hash_aset(hash, rb_tainted_str_new2("hash_pagecnt"), INT2NUM(bdb_stat->hash_pagecnt));
++ rb_hash_aset(hash, rb_str_new_cstr("hash_pagecnt"), INT2NUM(bdb_stat->hash_pagecnt));
+ #endif
+ free(bdb_stat);
+ return hash;
+@@ -3666,37 +3623,37 @@ bdb_tree_stat(int argc, VALUE *argv, VALUE obj)
+ bdb_test_error(dbst->dbp->stat(dbst->dbp, &bdb_stat, flags));
+ #endif
+ hash = rb_hash_new();
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_magic"), INT2NUM(bdb_stat->bt_magic));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_version"), INT2NUM(bdb_stat->bt_version));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_dup_pg"), INT2NUM(bdb_stat->bt_dup_pg));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_dup_pgfree"), INT2NUM(bdb_stat->bt_dup_pgfree));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_free"), INT2NUM(bdb_stat->bt_free));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_int_pg"), INT2NUM(bdb_stat->bt_int_pg));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_int_pgfree"), INT2NUM(bdb_stat->bt_int_pgfree));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_leaf_pg"), INT2NUM(bdb_stat->bt_leaf_pg));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_leaf_pgfree"), INT2NUM(bdb_stat->bt_leaf_pgfree));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_levels"), INT2NUM(bdb_stat->bt_levels));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_minkey"), INT2NUM(bdb_stat->bt_minkey));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_magic"), INT2NUM(bdb_stat->bt_magic));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_version"), INT2NUM(bdb_stat->bt_version));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_dup_pg"), INT2NUM(bdb_stat->bt_dup_pg));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_dup_pgfree"), INT2NUM(bdb_stat->bt_dup_pgfree));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_free"), INT2NUM(bdb_stat->bt_free));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_int_pg"), INT2NUM(bdb_stat->bt_int_pg));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_int_pgfree"), INT2NUM(bdb_stat->bt_int_pgfree));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_leaf_pg"), INT2NUM(bdb_stat->bt_leaf_pg));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_leaf_pgfree"), INT2NUM(bdb_stat->bt_leaf_pgfree));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_levels"), INT2NUM(bdb_stat->bt_levels));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_minkey"), INT2NUM(bdb_stat->bt_minkey));
+ #if HAVE_ST_DB_BTREE_STAT_BT_NRECS
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_nrecs"), INT2NUM(bdb_stat->bt_nrecs));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_nrecs"), INT2NUM(bdb_stat->bt_nrecs));
+ #endif
+ #if HAVE_ST_DB_BTREE_STAT_BT_NKEYS
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_nkeys"), INT2NUM(bdb_stat->bt_nkeys));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_nkeys"), INT2NUM(bdb_stat->bt_nkeys));
+ #if ! HAVE_ST_DB_BTREE_STAT_BT_NRECS
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_nrecs"), INT2NUM(bdb_stat->bt_nkeys));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_nrecs"), INT2NUM(bdb_stat->bt_nkeys));
+ #endif
+ #endif
+ #if HAVE_ST_DB_BTREE_STAT_BT_NDATA
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_ndata"), INT2NUM(bdb_stat->bt_ndata));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_ndata"), INT2NUM(bdb_stat->bt_ndata));
+ #endif
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_over_pg"), INT2NUM(bdb_stat->bt_over_pg));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_over_pgfree"), INT2NUM(bdb_stat->bt_over_pgfree));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_pagesize"), INT2NUM(bdb_stat->bt_pagesize));
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_re_len"), INT2NUM(bdb_stat->bt_re_len));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_over_pg"), INT2NUM(bdb_stat->bt_over_pg));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_over_pgfree"), INT2NUM(bdb_stat->bt_over_pgfree));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_pagesize"), INT2NUM(bdb_stat->bt_pagesize));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_re_len"), INT2NUM(bdb_stat->bt_re_len));
+ pad = (char)bdb_stat->bt_re_pad;
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_re_pad"), rb_tainted_str_new(&pad, 1));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_re_pad"), rb_str_new(&pad, 1));
+ #if HAVE_ST_DB_BTREE_STAT_BT_PAGECNT
+- rb_hash_aset(hash, rb_tainted_str_new2("bt_pagecnt"), INT2NUM(bdb_stat->bt_pagecnt));
++ rb_hash_aset(hash, rb_str_new_cstr("bt_pagecnt"), INT2NUM(bdb_stat->bt_pagecnt));
+ #endif
+ free(bdb_stat);
+ return hash;
+@@ -3736,38 +3693,37 @@ bdb_queue_stat(int argc, VALUE *argv, VALUE obj)
+ bdb_test_error(dbst->dbp->stat(dbst->dbp, &bdb_stat, flags));
+ #endif
+ hash = rb_hash_new();
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_magic"), INT2NUM(bdb_stat->qs_magic));
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_version"), INT2NUM(bdb_stat->qs_version));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_magic"), INT2NUM(bdb_stat->qs_magic));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_version"), INT2NUM(bdb_stat->qs_version));
+ #if HAVE_ST_DB_QUEUE_STAT_QS_NKEYS
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_nkeys"), INT2NUM(bdb_stat->qs_nkeys));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_nkeys"), INT2NUM(bdb_stat->qs_nkeys));
+ #if ! HAVE_ST_DB_QUEUE_STAT_QS_NRECS
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_nrecs"), INT2NUM(bdb_stat->qs_nkeys));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_nrecs"), INT2NUM(bdb_stat->qs_nkeys));
+ #endif
+ #endif
+ #if HAVE_ST_DB_QUEUE_STAT_QS_NDATA
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_ndata"), INT2NUM(bdb_stat->qs_ndata));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_ndata"), INT2NUM(bdb_stat->qs_ndata));
+ #endif
+ #if HAVE_ST_DB_QUEUE_STAT_QS_NRECS
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_nrecs"), INT2NUM(bdb_stat->qs_nrecs));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_nrecs"), INT2NUM(bdb_stat->qs_nrecs));
+ #endif
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_pages"), INT2NUM(bdb_stat->qs_pages));
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_pagesize"), INT2NUM(bdb_stat->qs_pagesize));
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_pgfree"), INT2NUM(bdb_stat->qs_pgfree));
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_re_len"), INT2NUM(bdb_stat->qs_re_len));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_pages"), INT2NUM(bdb_stat->qs_pages));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_pagesize"), INT2NUM(bdb_stat->qs_pagesize));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_pgfree"), INT2NUM(bdb_stat->qs_pgfree));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_re_len"), INT2NUM(bdb_stat->qs_re_len));
+ pad = (char)bdb_stat->qs_re_pad;
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_re_pad"), rb_tainted_str_new(&pad, 1));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_re_pad"), rb_str_new(&pad, 1));
+ #if HAVE_ST_DB_QUEUE_STAT_QS_START
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_start"), INT2NUM(bdb_stat->qs_start));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_start"), INT2NUM(bdb_stat->qs_start));
+ #endif
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_first_recno"), INT2NUM(bdb_stat->qs_first_recno));
+- rb_hash_aset(hash, rb_tainted_str_new2("qs_cur_recno"), INT2NUM(bdb_stat->qs_cur_recno));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_first_recno"), INT2NUM(bdb_stat->qs_first_recno));
++ rb_hash_aset(hash, rb_str_new_cstr("qs_cur_recno"), INT2NUM(bdb_stat->qs_cur_recno));
+ free(bdb_stat);
+ return hash;
+ }
+
+ static VALUE
+-bdb_queue_padlen(obj)
+- VALUE obj;
++bdb_queue_padlen(VALUE obj)
+ {
+ bdb_DB *dbst;
+ DB_QUEUE_STAT *bdb_stat;
+@@ -3794,7 +3750,7 @@ bdb_queue_padlen(obj)
+ bdb_test_error(dbst->dbp->stat(dbst->dbp, &bdb_stat, 0));
+ #endif
+ pad = (char)bdb_stat->qs_re_pad;
+- hash = rb_assoc_new(rb_tainted_str_new(&pad, 1), INT2NUM(bdb_stat->qs_re_len));
++ hash = rb_assoc_new(rb_str_new(&pad, 1), INT2NUM(bdb_stat->qs_re_len));
+ free(bdb_stat);
+ return hash;
+ }
+@@ -3802,8 +3758,7 @@ bdb_queue_padlen(obj)
+ #endif
+
+ static VALUE
+-bdb_set_partial(obj, a, b)
+- VALUE obj, a, b;
++bdb_set_partial(VALUE obj, VALUE a, VALUE b)
+ {
+ bdb_DB *dbst;
+ VALUE ret;
+@@ -3823,8 +3778,7 @@ bdb_set_partial(obj, a, b)
+ }
+
+ static VALUE
+-bdb_clear_partial(obj)
+- VALUE obj;
++bdb_clear_partial(VALUE obj)
+ {
+ bdb_DB *dbst;
+ VALUE ret;
+@@ -3844,8 +3798,7 @@ bdb_clear_partial(obj)
+ #if HAVE_ST_DB_SET_ERRCALL
+
+ static VALUE
+-bdb_i_create(obj)
+- VALUE obj;
++bdb_i_create(VALUE obj)
+ {
+ DB *dbp;
+ bdb_ENV *envst = 0;
+@@ -3884,7 +3837,9 @@ bdb_s_upgrade(int argc, VALUE *argv, VALUE obj)
int flags;
VALUE val;
@@ -250,7 +1161,7 @@
flags = 0;
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flags = NUM2INT(b);
-@@ -3908,7 +3930,9 @@ bdb_s_remove(int argc, VALUE *argv, VALUE obj)
+@@ -3908,7 +3863,9 @@ bdb_s_remove(int argc, VALUE *argv, VALUE obj)
VALUE a, b, c;
char *name, *subname;
@@ -260,7 +1171,7 @@
c = bdb_i_create(obj);
GetDB(c, dbst);
name = subname = NULL;
-@@ -3936,7 +3960,9 @@ bdb_s_rename(int argc, VALUE *argv, VALUE obj)
+@@ -3936,7 +3893,9 @@ bdb_s_rename(int argc, VALUE *argv, VALUE obj)
VALUE a, b, c;
char *name, *subname, *newname;
@@ -270,7 +1181,94 @@
c = bdb_i_create(obj);
GetDB(c, dbst);
name = subname = NULL;
-@@ -4222,7 +4248,9 @@ bdb_verify(int argc, VALUE *argv, VALUE obj)
+@@ -3959,9 +3918,9 @@ bdb_s_rename(int argc, VALUE *argv, VALUE obj)
+ #if HAVE_ST_DB_JOIN
+
+ static VALUE
+-bdb_i_joinclose(st)
+- eachst *st;
++bdb_i_joinclose(VALUE pst)
+ {
++ eachst *st = (eachst *)pst;
+ bdb_DB *dbst;
+
+ GetDB(st->db, dbst);
+@@ -3973,9 +3932,9 @@ bdb_i_joinclose(st)
+
+
+ static VALUE
+-bdb_i_join(st)
+- eachst *st;
++bdb_i_join(VALUE pst)
+ {
++ eachst *st = (eachst *)pst;
+ int ret;
+ DBT key, data;
+ db_recno_t recno;
+@@ -4004,9 +3963,8 @@ bdb_join(int argc, VALUE *argv, VALUE obj)
+ DBC *dbc, **dbcarr;
+ int flags, i;
+ eachst st;
+- VALUE a, b, c;
++ VALUE a, b;
+
+- c = 0;
+ flags = 0;
+ GetDB(obj, dbst);
+ if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
+@@ -4050,8 +4008,7 @@ bdb_join(int argc, VALUE *argv, VALUE obj)
+ #if HAVE_ST_DB_BYTESWAPPED || HAVE_ST_DB_GET_BYTESWAPPED
+
+ static VALUE
+-bdb_byteswapp(obj)
+- VALUE obj;
++bdb_byteswapp(VALUE obj)
+ {
+ bdb_DB *dbst;
+ int byteswap = 0;
+@@ -4072,18 +4029,14 @@ bdb_byteswapp(obj)
+ #if HAVE_ST_DB_ASSOCIATE
+
+ static VALUE
+-bdb_internal_second_call(tmp)
+- VALUE *tmp;
++bdb_internal_second_call(VALUE ptmp)
+ {
++ VALUE *tmp = (VALUE *)ptmp;
+ return rb_funcall2(tmp[0], bdb_id_call, 3, tmp + 1);
+ }
+
+ static int
+-bdb_call_secondary(secst, pkey, pdata, skey)
+- DB *secst;
+- DBT *pkey;
+- DBT *pdata;
+- DBT *skey;
++bdb_call_secondary(DB *secst, DBT *pkey, DBT *pdata, DBT *skey)
+ {
+ VALUE obj, ary, second;
+ bdb_DB *dbst, *secondst;
+@@ -4189,8 +4142,7 @@ bdb_associate(int argc, VALUE *argv, VALUE obj)
+ #endif
+
+ static VALUE
+-bdb_filename(obj)
+- VALUE obj;
++bdb_filename(VALUE obj)
+ {
+ bdb_DB *dbst;
+ GetDB(obj, dbst);
+@@ -4198,8 +4150,7 @@ bdb_filename(obj)
+ }
+
+ static VALUE
+-bdb_database(obj)
+- VALUE obj;
++bdb_database(VALUE obj)
+ {
+ bdb_DB *dbst;
+ GetDB(obj, dbst);
+@@ -4222,7 +4173,9 @@ bdb_verify(int argc, VALUE *argv, VALUE obj)
#endif
FILE *io = NULL;
@@ -280,3 +1278,50 @@
file = database = NULL;
switch(rb_scan_args(argc, argv, "02", &iov, &flagv)) {
case 2:
+@@ -4346,8 +4299,7 @@ bdb_feedback_set(VALUE obj, VALUE a)
+ #endif
+
+ static VALUE
+-bdb_i_conf(obj, a)
+- VALUE obj, a;
++bdb_i_conf(VALUE obj, VALUE a)
+ {
+ bdb_DB *dbst;
+ u_int32_t value;
+@@ -4390,13 +4342,13 @@ bdb_i_conf(obj, a)
+ bdb_test_error(dbst->dbp->get_dbname(dbst->dbp, &filename, &dbname));
+ res = rb_ary_new2(3);
+ if (filename && strlen(filename)) {
+- rb_ary_push(res, rb_tainted_str_new2(filename));
++ rb_ary_push(res, rb_str_new_cstr(filename));
+ }
+ else {
+ rb_ary_push(res, Qnil);
+ }
+ if (dbname && strlen(dbname)) {
+- rb_ary_push(res, rb_tainted_str_new2(dbname));
++ rb_ary_push(res, rb_str_new_cstr(dbname));
+ }
+ else {
+ rb_ary_push(res, Qnil);
+@@ -4463,7 +4415,7 @@ bdb_i_conf(obj, a)
+
+ bdb_test_error(dbst->dbp->get_re_source(dbst->dbp, &strval));
+ if (strval && strlen(strval)) {
+- return rb_tainted_str_new2(strval);
++ return rb_str_new_cstr(strval);
+ }
+ return Qnil;
+ }
+@@ -4539,9 +4491,9 @@ struct optst {
+ };
+
+ static VALUE
+-bdb_intern_conf(optp)
+- struct optst *optp;
++bdb_intern_conf(VALUE poptp)
+ {
++ struct optst *optp = (struct optst *)poptp;
+ return bdb_i_conf(optp->obj, optp->str);
+ }
+
diff --git a/databases/ruby-bdb/files/patch-src-delegator.c b/databases/ruby-bdb/files/patch-src-delegator.c
new file mode 100644
index 000000000000..8a65b0124760
--- /dev/null
+++ b/databases/ruby-bdb/files/patch-src-delegator.c
@@ -0,0 +1,11 @@
+--- src/delegator.c.orig 2011-04-06 19:35:39 UTC
++++ src/delegator.c
+@@ -32,7 +32,7 @@ bdb_deleg_missing(int argc, VALUE *argv, VALUE obj)
+ Data_Get_Struct(obj, struct deleg_class, delegst);
+ if (rb_block_given_p()) {
+ #if HAVE_RB_BLOCK_CALL
+- res = rb_block_call(delegst->obj, id_send, argc, argv, rb_yield, 0);
++ res = rb_block_call(delegst->obj, id_send, argc, argv, (rb_block_call_func_t)rb_yield, 0);
+ #else
+ VALUE tmp[3];
+
diff --git a/databases/ruby-bdb/files/patch-src-env.c b/databases/ruby-bdb/files/patch-src-env.c
index be5ccea26a5e..a8dcbc9d4f7e 100644
--- a/databases/ruby-bdb/files/patch-src-env.c
+++ b/databases/ruby-bdb/files/patch-src-env.c
@@ -1,5 +1,49 @@
--- src/env.c.orig 2011-04-06 19:35:39 UTC
+++ src/env.c
+@@ -67,8 +67,8 @@ bdb_env_rep_transport(DB_ENV *env, const DBT *control,
+ lsnobj = bdb_makelsn(obj);
+ Data_Get_Struct(lsnobj, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, lsn, DB_LSN, 1);
+- av = rb_tainted_str_new(control->data, control->size);
+- bv = rb_tainted_str_new(rec->data, rec->size);
++ av = rb_str_new(control->data, control->size);
++ bv = rb_str_new(rec->data, rec->size);
+ if (envst->rep_transport == 0) {
+ res = rb_funcall(obj, rb_intern("bdb_rep_transport"), 5, av, bv, lsnobj,
+ INT2FIX(envid), INT2FIX(flags));
+@@ -90,8 +90,8 @@ bdb_env_rep_transport(DB_ENV *env, const DBT *control,
+ bdb_ENV *envst;
+
+ GetIdEnv(obj, envst);
+- av = rb_tainted_str_new(control->data, control->size);
+- bv = rb_tainted_str_new(rec->data, rec->size);
++ av = rb_str_new(control->data, control->size);
++ bv = rb_str_new(rec->data, rec->size);
+ if (envst->rep_transport == 0) {
+ res = rb_funcall(obj, rb_intern("bdb_rep_transport"), 4, av, bv,
+ INT2FIX(envid), INT2FIX(flags));
+@@ -328,10 +328,10 @@ bdb_env_msgcall(const DB_ENV *dbenv, const char *msg)
+ return;
+ }
+ if (envst->msgcall == 0) {
+- rb_funcall(obj, id_msgcall, 1, rb_tainted_str_new2(msg));
++ rb_funcall(obj, id_msgcall, 1, rb_str_new_cstr(msg));
+ }
+ else {
+- rb_funcall(envst->msgcall, bdb_id_call, 1, rb_tainted_str_new2(msg));
++ rb_funcall(envst->msgcall, bdb_id_call, 1, rb_str_new_cstr(msg));
+ }
+ }
+
+@@ -508,7 +508,7 @@ bdb_env_set_notify(VALUE obj, VALUE a)
+
+
+ static VALUE
+-bdb_env_i_options(VALUE obj, VALUE db_stobj)
++bdb_env_i_options(VALUE obj, VALUE db_stobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ char *options;
+ DB_ENV *envp;
@@ -1121,9 +1121,11 @@ bdb_env_close(VALUE obj)
{
bdb_ENV *envst;
@@ -12,7 +56,76 @@
GetEnvDB(obj, envst);
bdb_final(envst);
RDATA(obj)->dfree = free;
-@@ -1517,12 +1519,16 @@ bdb_env_init(int argc, VALUE *argv, VALUE obj)
+@@ -1193,10 +1195,10 @@ bdb_env_open_db(int argc, VALUE *argv, VALUE obj)
+ argv[argc - 1] = rb_hash_new();
+ }
+ if (rb_obj_is_kind_of(obj, bdb_cEnv)) {
+- rb_hash_aset(argv[argc - 1], rb_tainted_str_new2("env"), obj);
++ rb_hash_aset(argv[argc - 1], rb_str_new_cstr("env"), obj);
+ }
+ else {
+- rb_hash_aset(argv[argc - 1], rb_tainted_str_new2("txn"), obj);
++ rb_hash_aset(argv[argc - 1], rb_str_new_cstr("txn"), obj);
+ }
+ return rb_funcall2(cl, rb_intern("new"), argc, argv);
+ }
+@@ -1206,7 +1208,7 @@ void
+ bdb_env_errcall(const DB_ENV *env, const char *errpfx, const char *msg)
+ {
+ bdb_errcall = 1;
+- bdb_errstr = rb_tainted_str_new2(msg);
++ bdb_errstr = rb_str_new_cstr(msg);
+ }
+
+ #else
+@@ -1215,7 +1217,7 @@ void
+ bdb_env_errcall(const char *errpfx, char *msg)
+ {
+ bdb_errcall = 1;
+- bdb_errstr = rb_tainted_str_new2(msg);
++ bdb_errstr = rb_str_new_cstr(msg);
+ }
+
+ #endif
+@@ -1303,7 +1305,7 @@ bdb_env_each_options(VALUE opt, VALUE stobj)
+ DB_ENV *envp;
+ struct db_stoptions *db_st;
+
+- res = rb_iterate(rb_each, opt, bdb_env_i_options, stobj);
++ res = rb_block_call(opt, rb_intern("each"), 0, NULL, bdb_env_i_options, stobj);
+ Data_Get_Struct(stobj, struct db_stoptions, db_st);
+ envp = db_st->env->envp;
+ #if HAVE_ST_DB_ENV_SET_LG_BSIZE
+@@ -1322,8 +1324,9 @@ bdb_env_each_options(VALUE opt, VALUE stobj)
+ }
+
+ static VALUE
+-bdb_env_s_i_options(VALUE obj, int *flags)
++bdb_env_s_i_options(VALUE obj, VALUE pflags, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
++ int *flags = (int *)pflags;
+ char *options;
+ VALUE key, value;
+
+@@ -1394,7 +1397,7 @@ bdb_env_s_new(int argc, VALUE *argv, VALUE obj)
+ envst->envp->db_errcall = bdb_env_errcall;
+ #else
+ if (argc && TYPE(argv[argc - 1]) == T_HASH) {
+- rb_iterate(rb_each, argv[argc - 1], bdb_env_s_i_options, (VALUE)&flags);
++ rb_block_call(argv[argc - 1], rb_intern("each"), 0, NULL, bdb_env_s_i_options, (VALUE)&flags);
+ }
+ bdb_test_error(db_env_create(&(envst->envp), flags));
+ envst->envp->set_errpfx(envst->envp, "BDB::");
+@@ -1406,7 +1409,7 @@ bdb_env_s_new(int argc, VALUE *argv, VALUE obj)
+ if (argc && TYPE(argv[argc - 1]) == T_HASH) {
+ VALUE value = Qnil;
+
+- rb_iterate(rb_each, argv[argc - 1], bdb_env_s_j_options, (VALUE)&value);
++ rb_block_call(argv[argc - 1], rb_intern("each"), 0, NULL, bdb_env_s_j_options, (VALUE)&value);
+ if (!NIL_P(value)) {
+ if (!rb_respond_to(value, bdb_id_call)) {
+ rb_raise(bdb_eFatal, "arg must respond to #call");
+@@ -1517,12 +1520,16 @@ bdb_env_init(int argc, VALUE *argv, VALUE obj)
flags = NUM2INT(c);
break;
}
@@ -29,7 +142,16 @@
#ifndef BDB_NO_THREAD_COMPILE
if (!(envst->options & BDB_NO_THREAD)) {
bdb_set_func(envst);
-@@ -1658,7 +1664,9 @@ bdb_env_s_remove(int argc, VALUE *argv, VALUE obj)
+@@ -1621,7 +1628,7 @@ bdb_env_init(int argc, VALUE *argv, VALUE obj)
+ envst->options |= BDB_AUTO_COMMIT;
+ }
+ #endif
+- envst->home = rb_tainted_str_new2(db_home);
++ envst->home = rb_str_new_cstr(db_home);
+ OBJ_FREEZE(envst->home);
+ #if HAVE_CONST_DB_INIT_REP
+ if (flags & DB_INIT_REP) {
+@@ -1658,7 +1665,9 @@ bdb_env_s_remove(int argc, VALUE *argv, VALUE obj)
char *db_home;
int flag = 0;
@@ -39,3 +161,279 @@
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flag = NUM2INT(b);
}
+@@ -1754,13 +1763,13 @@ bdb_thread_init(int argc, VALUE *argv, VALUE obj)
+ if (rb_block_given_p()) {
+ #if HAVE_RB_BLOCK_CALL
+ return rb_block_call(obj, rb_intern("__bdb_thread_init__"), argc, argv,
+- rb_yield, obj);
++ (rb_block_call_func_t)rb_yield, obj);
+ #else
+ VALUE tmp[3];
+ tmp[0] = obj;
+ tmp[1] = (VALUE)argc;
+ tmp[2] = (VALUE)argv;
+- return rb_iterate((VALUE (*)(VALUE))bdb_env_iterate, (VALUE)tmp, rb_yield, obj);
++ return rb_block_call((VALUE)tmp, bdb_env_iterate, 0, NULL, (rb_block_call_func_t)rb_yield, obj);
+ #endif
+ }
+ return rb_funcall2(obj, rb_intern("__bdb_thread_init__"), argc, argv);
+@@ -1828,7 +1837,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ res = rb_ary_new();
+ if (dirs) {
+ for (i = 0; dirs[i] != NULL; i++) {
+- rb_ary_push(res, rb_tainted_str_new2(dirs[i]));
++ rb_ary_push(res, rb_str_new_cstr(dirs[i]));
+ }
+ }
+ return res;
+@@ -1844,7 +1853,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ if (strcmp(str, "home") == 0) {
+ bdb_test_error(envst->envp->get_home(envst->envp, &strval));
+ if (strval && strlen(strval)) {
+- return rb_tainted_str_new2(strval);
++ return rb_str_new_cstr(strval);
+ }
+ return Qnil;
+ }
+@@ -1859,7 +1868,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ if (strcmp(str, "lg_dir") == 0) {
+ bdb_test_error(envst->envp->get_lg_dir(envst->envp, &strval));
+ if (strval && strlen(strval)) {
+- return rb_tainted_str_new2(strval);
++ return rb_str_new_cstr(strval);
+ }
+ return Qnil;
+ }
+@@ -1961,7 +1970,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ if (strcmp(str, "tmp_dir") == 0) {
+ bdb_test_error(envst->envp->get_tmp_dir(envst->envp, &strval));
+ if (strval && strlen(strval)) {
+- return rb_tainted_str_new2(strval);
++ return rb_str_new_cstr(strval);
+ }
+ return Qnil;
+ }
+@@ -2343,10 +2352,10 @@ bdb_env_repmgr_site_list(VALUE obj)
+ res = rb_ary_new();
+ for (i = 0; i < count; i++) {
+ tmp = rb_hash_new();
+- rb_hash_aset(tmp, rb_tainted_str_new2("eid"), INT2NUM(list[i].eid));
+- rb_hash_aset(tmp, rb_tainted_str_new2("host"), rb_tainted_str_new2(list[i].host));
+- rb_hash_aset(tmp, rb_tainted_str_new2("port"), INT2NUM(list[i].port));
+- rb_hash_aset(tmp, rb_tainted_str_new2("status"), INT2NUM(list[i].status));
++ rb_hash_aset(tmp, rb_str_new_cstr("eid"), INT2NUM(list[i].eid));
++ rb_hash_aset(tmp, rb_str_new_cstr("host"), rb_str_new_cstr(list[i].host));
++ rb_hash_aset(tmp, rb_str_new_cstr("port"), INT2NUM(list[i].port));
++ rb_hash_aset(tmp, rb_str_new_cstr("status"), INT2NUM(list[i].status));
+ rb_ary_push(res, tmp);
+ }
+ free(list);
+@@ -2445,7 +2454,7 @@ bdb_env_rep_set_nsites(VALUE obj, VALUE a)
+ }
+
+ static VALUE
+-bdb_env_rep_get_nsites(VALUE obj, VALUE a)
++bdb_env_rep_get_nsites(VALUE obj)
+ {
+ bdb_ENV *envst;
+ int offon;
+@@ -2470,7 +2479,7 @@ bdb_env_rep_set_priority(VALUE obj, VALUE a)
+ }
+
+ static VALUE
+-bdb_env_rep_get_priority(VALUE obj, VALUE a)
++bdb_env_rep_get_priority(VALUE obj)
+ {
+ bdb_ENV *envst;
+ int offon;
+@@ -2571,102 +2580,102 @@ bdb_env_rep_stat(int argc, VALUE *argv, VALUE obj)
+ bdb_test_error(envst->envp->rep_stat(envst->envp, &bs, flags));
+ a = rb_hash_new();
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_FILLS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_fills"), INT2NUM(bs->st_bulk_fills));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_fills"), INT2NUM(bs->st_bulk_fills));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_OVERFLOWS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_overflows"), INT2NUM(bs->st_bulk_overflows));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_overflows"), INT2NUM(bs->st_bulk_overflows));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_RECORDS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_records"), INT2NUM(bs->st_bulk_records));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_records"), INT2NUM(bs->st_bulk_records));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_TRANSFERS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_transfers"), INT2NUM(bs->st_bulk_transfers));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_transfers"), INT2NUM(bs->st_bulk_transfers));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_CLIENT_REREQUESTS
+- rb_hash_aset(a, rb_tainted_str_new2("st_client_rerequests"), INT2NUM(bs->st_client_rerequests));
++ rb_hash_aset(a, rb_str_new_cstr("st_client_rerequests"), INT2NUM(bs->st_client_rerequests));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_CLIENT_SVC_MISS
+- rb_hash_aset(a, rb_tainted_str_new2("st_client_svc_miss"), INT2NUM(bs->st_client_svc_miss));
++ rb_hash_aset(a, rb_str_new_cstr("st_client_svc_miss"), INT2NUM(bs->st_client_svc_miss));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_CLIENT_SVC_REQ
+- rb_hash_aset(a, rb_tainted_str_new2("st_client_svc_req"), INT2NUM(bs->st_client_svc_req));
++ rb_hash_aset(a, rb_str_new_cstr("st_client_svc_req"), INT2NUM(bs->st_client_svc_req));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_dupmasters"), INT2NUM(bs->st_dupmasters));
++ rb_hash_aset(a, rb_str_new_cstr("st_dupmasters"), INT2NUM(bs->st_dupmasters));
+ #if HAVE_ST_DB_REP_STAT_ST_EGEN
+- rb_hash_aset(a, rb_tainted_str_new2("st_egen"), INT2NUM(bs->st_egen));
++ rb_hash_aset(a, rb_str_new_cstr("st_egen"), INT2NUM(bs->st_egen));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_cur_winner"), INT2NUM(bs->st_election_cur_winner));
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_gen"), INT2NUM(bs->st_election_gen));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_cur_winner"), INT2NUM(bs->st_election_cur_winner));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_gen"), INT2NUM(bs->st_election_gen));
+
+ lsn = bdb_makelsn(obj);
+ Data_Get_Struct(lsn, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, &bs->st_election_lsn, DB_LSN, 1);
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_lsn"), lsn);
++ rb_hash_aset(a, rb_str_new_cstr("st_election_lsn"), lsn);
+
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_nsites"), INT2NUM(bs->st_election_nsites));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_nsites"), INT2NUM(bs->st_election_nsites));
+ #if HAVE_ST_DB_REP_STAT_ST_ELECTION_NVOTES
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_nvotes"), INT2NUM(bs->st_election_nvotes));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_nvotes"), INT2NUM(bs->st_election_nvotes));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_priority"), INT2NUM(bs->st_election_priority));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_priority"), INT2NUM(bs->st_election_priority));
+ #if HAVE_ST_DB_REP_STAT_ST_ELECTION_SEC
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_sec"), INT2NUM(bs->st_election_sec));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_sec"), INT2NUM(bs->st_election_sec));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_status"), INT2NUM(bs->st_election_status));
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_tiebreaker"), INT2NUM(bs->st_election_tiebreaker));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_status"), INT2NUM(bs->st_election_status));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_tiebreaker"), INT2NUM(bs->st_election_tiebreaker));
+ #if HAVE_ST_DB_REP_STAT_ST_ELECTION_USEC
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_usec"), INT2NUM(bs->st_election_usec));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_usec"), INT2NUM(bs->st_election_usec));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_votes"), INT2NUM(bs->st_election_votes));
+- rb_hash_aset(a, rb_tainted_str_new2("st_elections"), INT2NUM(bs->st_elections));
+- rb_hash_aset(a, rb_tainted_str_new2("st_elections_won"), INT2NUM(bs->st_elections_won));
+- rb_hash_aset(a, rb_tainted_str_new2("st_env_id"), INT2NUM(bs->st_env_id));
+- rb_hash_aset(a, rb_tainted_str_new2("st_env_priority"), INT2NUM(bs->st_env_priority));
+- rb_hash_aset(a, rb_tainted_str_new2("st_gen"), INT2NUM(bs->st_gen));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_duplicated"), INT2NUM(bs->st_log_duplicated));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_queued"), INT2NUM(bs->st_log_queued));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_queued_max"), INT2NUM(bs->st_log_queued_max));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_queued_total"), INT2NUM(bs->st_log_queued_total));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_records"), INT2NUM(bs->st_log_records));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_requested"), INT2NUM(bs->st_log_requested));
+- rb_hash_aset(a, rb_tainted_str_new2("st_master"), INT2NUM(bs->st_master));
+- rb_hash_aset(a, rb_tainted_str_new2("st_master_changes"), INT2NUM(bs->st_master_changes));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_badgen"), INT2NUM(bs->st_msgs_badgen));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_processed"), INT2NUM(bs->st_msgs_processed));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_recover"), INT2NUM(bs->st_msgs_recover));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_send_failures"), INT2NUM(bs->st_msgs_send_failures));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_sent"), INT2NUM(bs->st_msgs_sent));
+- rb_hash_aset(a, rb_tainted_str_new2("st_newsites"), INT2NUM(bs->st_newsites));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_votes"), INT2NUM(bs->st_election_votes));
++ rb_hash_aset(a, rb_str_new_cstr("st_elections"), INT2NUM(bs->st_elections));
++ rb_hash_aset(a, rb_str_new_cstr("st_elections_won"), INT2NUM(bs->st_elections_won));
++ rb_hash_aset(a, rb_str_new_cstr("st_env_id"), INT2NUM(bs->st_env_id));
++ rb_hash_aset(a, rb_str_new_cstr("st_env_priority"), INT2NUM(bs->st_env_priority));
++ rb_hash_aset(a, rb_str_new_cstr("st_gen"), INT2NUM(bs->st_gen));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_duplicated"), INT2NUM(bs->st_log_duplicated));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_queued"), INT2NUM(bs->st_log_queued));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_queued_max"), INT2NUM(bs->st_log_queued_max));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_queued_total"), INT2NUM(bs->st_log_queued_total));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_records"), INT2NUM(bs->st_log_records));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_requested"), INT2NUM(bs->st_log_requested));
++ rb_hash_aset(a, rb_str_new_cstr("st_master"), INT2NUM(bs->st_master));
++ rb_hash_aset(a, rb_str_new_cstr("st_master_changes"), INT2NUM(bs->st_master_changes));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_badgen"), INT2NUM(bs->st_msgs_badgen));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_processed"), INT2NUM(bs->st_msgs_processed));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_recover"), INT2NUM(bs->st_msgs_recover));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_send_failures"), INT2NUM(bs->st_msgs_send_failures));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_sent"), INT2NUM(bs->st_msgs_sent));
++ rb_hash_aset(a, rb_str_new_cstr("st_newsites"), INT2NUM(bs->st_newsites));
+
+ lsn = bdb_makelsn(obj);
+ Data_Get_Struct(lsn, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, &bs->st_next_lsn, DB_LSN, 1);
+- rb_hash_aset(a, rb_tainted_str_new2("st_next_lsn"), lsn);
++ rb_hash_aset(a, rb_str_new_cstr("st_next_lsn"), lsn);
+ #if HAVE_ST_DB_REP_STAT_ST_NEXT_PG
+- rb_hash_aset(a, rb_tainted_str_new2("st_next_pg"), INT2NUM(bs->st_next_pg));
++ rb_hash_aset(a, rb_str_new_cstr("st_next_pg"), INT2NUM(bs->st_next_pg));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_nsites"), INT2NUM(bs->st_nsites));
+- rb_hash_aset(a, rb_tainted_str_new2("st_nthrottles"), INT2NUM(bs->st_nthrottles));
+- rb_hash_aset(a, rb_tainted_str_new2("st_outdated"), INT2NUM(bs->st_outdated));
++ rb_hash_aset(a, rb_str_new_cstr("st_nsites"), INT2NUM(bs->st_nsites));
++ rb_hash_aset(a, rb_str_new_cstr("st_nthrottles"), INT2NUM(bs->st_nthrottles));
++ rb_hash_aset(a, rb_str_new_cstr("st_outdated"), INT2NUM(bs->st_outdated));
+ #if HAVE_ST_DB_REP_STAT_ST_PG_DUPLICATED
+- rb_hash_aset(a, rb_tainted_str_new2("st_pg_duplicated"), INT2NUM(bs->st_pg_duplicated));
++ rb_hash_aset(a, rb_str_new_cstr("st_pg_duplicated"), INT2NUM(bs->st_pg_duplicated));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_PG_RECORDS
+- rb_hash_aset(a, rb_tainted_str_new2("st_pg_records"), INT2NUM(bs->st_pg_records));
++ rb_hash_aset(a, rb_str_new_cstr("st_pg_records"), INT2NUM(bs->st_pg_records));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_PG_REQUESTED
+- rb_hash_aset(a, rb_tainted_str_new2("st_pg_requested"), INT2NUM(bs->st_pg_requested));
++ rb_hash_aset(a, rb_str_new_cstr("st_pg_requested"), INT2NUM(bs->st_pg_requested));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_STARTUP_COMPLETE
+- rb_hash_aset(a, rb_tainted_str_new2("st_startup_complete"), INT2NUM(bs->st_startup_complete));
++ rb_hash_aset(a, rb_str_new_cstr("st_startup_complete"), INT2NUM(bs->st_startup_complete));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_status"), INT2NUM(bs->st_status));
+- rb_hash_aset(a, rb_tainted_str_new2("st_txns_applied"), INT2NUM(bs->st_txns_applied));
++ rb_hash_aset(a, rb_str_new_cstr("st_status"), INT2NUM(bs->st_status));
++ rb_hash_aset(a, rb_str_new_cstr("st_txns_applied"), INT2NUM(bs->st_txns_applied));
+ lsn = bdb_makelsn(obj);
+ Data_Get_Struct(lsn, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, &bs->st_waiting_lsn, DB_LSN, 1);
+- rb_hash_aset(a, rb_tainted_str_new2("st_waiting_lsn"), lsn);
++ rb_hash_aset(a, rb_str_new_cstr("st_waiting_lsn"), lsn);
+ #if HAVE_ST_DB_REP_STAT_ST_WAITING_PG
+- rb_hash_aset(a, rb_tainted_str_new2("st_waiting_pg"), INT2NUM(bs->st_waiting_pg));
++ rb_hash_aset(a, rb_str_new_cstr("st_waiting_pg"), INT2NUM(bs->st_waiting_pg));
+ #endif
+ free(bs);
+ return a;
+@@ -2764,7 +2773,7 @@ bdb_env_rep_set_clockskew(VALUE obj, VALUE a, VALUE b)
+ }
+
+ static VALUE
+-bdb_env_rep_get_clockskew(VALUE obj, VALUE a)
++bdb_env_rep_get_clockskew(VALUE obj)
+ {
+ bdb_ENV *envst;
+ u_int32_t fast, slow;
+@@ -2791,7 +2800,7 @@ bdb_env_rep_set_request(VALUE obj, VALUE a, VALUE b)
+ }
+
+ static VALUE
+-bdb_env_rep_get_request(VALUE obj, VALUE a)
++bdb_env_rep_get_request(VALUE obj)
+ {
+ bdb_ENV *envst;
+ u_int32_t frmin, frmax;
+@@ -2816,7 +2825,7 @@ bdb_env_dir_mode(VALUE obj)
+ if (envst->envp->get_intermediate_dir_mode(envst->envp, &dir)) {
+ rb_raise(rb_eArgError, "invalid environment");
+ }
+- return rb_tainted_str_new2(dir);
++ return rb_str_new_cstr(dir);
+ }
+
+ #endif
+@@ -3012,7 +3021,7 @@ void bdb_init_env()
+ rb_define_method(bdb_cEnv, "rep_timeout?", bdb_env_rep_intern_timeout, 1);
+ #endif
+ #if HAVE_ST_DB_ENV_REP_STAT
+- rb_define_method(bdb_cEnv, "rep_stat", bdb_env_rep_stat, 0);
++ rb_define_method(bdb_cEnv, "rep_stat", bdb_env_rep_stat, -1);
+ #endif
+ #if HAVE_ST_DB_ENV_REP_SYNC
+ rb_define_method(bdb_cEnv, "rep_sync", bdb_env_rep_sync, -1);
diff --git a/databases/ruby-bdb/files/patch-src-lock.c b/databases/ruby-bdb/files/patch-src-lock.c
new file mode 100644
index 000000000000..1192f5f14b2d
--- /dev/null
+++ b/databases/ruby-bdb/files/patch-src-lock.c
@@ -0,0 +1,11 @@
+--- src/lock.c.orig 2011-04-06 19:35:39 UTC
++++ src/lock.c
+@@ -335,7 +335,7 @@ struct lockreq {
+ };
+
+ static VALUE
+-bdb_lockid_each(VALUE obj, VALUE listobj)
++bdb_lockid_each(VALUE obj, VALUE listobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ VALUE key, value;
+ DB_LOCKREQ *list;
diff --git a/databases/ruby-bdb/files/patch-src-log.c b/databases/ruby-bdb/files/patch-src-log.c
new file mode 100644
index 000000000000..d35bd60444ac
--- /dev/null
+++ b/databases/ruby-bdb/files/patch-src-log.c
@@ -0,0 +1,11 @@
+--- src/log.c.orig 2011-04-06 19:35:39 UTC
++++ src/log.c
+@@ -688,7 +688,7 @@ bdb_log_unregister(VALUE obj)
+ void bdb_init_log()
+ {
+ rb_define_method(bdb_cEnv, "log_put", bdb_s_log_put, -1);
+- rb_define_method(bdb_cEnv, "log_curlsn", bdb_s_log_curlsn, 0);
++ rb_define_method(bdb_cEnv, "log_curlsn", bdb_s_log_curlsn, 1);
+ rb_define_method(bdb_cEnv, "log_checkpoint", bdb_s_log_checkpoint, 1);
+ rb_define_method(bdb_cEnv, "log_flush", bdb_s_log_flush, -1);
+ rb_define_method(bdb_cEnv, "log_stat", bdb_env_log_stat, -1);
diff --git a/databases/ruby-bdb/files/patch-src-recnum.c b/databases/ruby-bdb/files/patch-src-recnum.c
index db95ad281c90..66aade8fac08 100644
--- a/databases/ruby-bdb/files/patch-src-recnum.c
+++ b/databases/ruby-bdb/files/patch-src-recnum.c
@@ -30,3 +30,12 @@
flags = NUM2INT(g);
}
argc--;
+@@ -948,7 +950,7 @@ void bdb_init_recnum()
+ rb_define_method(bdb_cRecnum, "collect", bdb_sary_collect, -1);
+ rb_define_method(bdb_cRecnum, "collect!", bdb_sary_collect_bang, -1);
+ #if HAVE_RB_ARY_VALUES_AT
+- rb_define_method(bdb_cRecnum, "map", bdb_sary_collect, 0);
++ rb_define_method(bdb_cRecnum, "map", bdb_sary_collect, -1);
+ rb_define_method(bdb_cRecnum, "select", bdb_sary_select, -1);
+ rb_define_method(bdb_cRecnum, "values_at", bdb_sary_values_at, -1);
+ #endif
diff --git a/databases/ruby-bdb/files/patch-src-sequence.c b/databases/ruby-bdb/files/patch-src-sequence.c
new file mode 100644
index 000000000000..909ea1a5d783
--- /dev/null
+++ b/databases/ruby-bdb/files/patch-src-sequence.c
@@ -0,0 +1,20 @@
+--- src/sequence.c.orig 2011-04-06 19:35:39 UTC
++++ src/sequence.c
+@@ -66,7 +66,7 @@ bdb_seq_txn_close(VALUE obj, VALUE commit, VALUE real)
+ }
+
+ static VALUE
+-bdb_seq_i_options(VALUE obj, VALUE seqobj)
++bdb_seq_i_options(VALUE obj, VALUE seqobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ VALUE key, value;
+ bdb_SEQ *seqst;
+@@ -148,7 +148,7 @@ bdb_seq_open(int argc, VALUE *argv, VALUE obj)
+ break;
+ }
+ if (!NIL_P(options)) {
+- rb_iterate(rb_each, options, bdb_seq_i_options, res);
++ rb_block_call(options, rb_intern("each"), 0, NULL, bdb_seq_i_options, res);
+ }
+ a = bdb_test_recno(obj, &key, &recno, a);
+ if (seqst->seqp->open(seqst->seqp, txnid, &key, flags)) {
diff --git a/databases/ruby-bdb/files/patch-src-transaction.c b/databases/ruby-bdb/files/patch-src-transaction.c
index 22b9a7d65312..3c25a82824e6 100644
--- a/databases/ruby-bdb/files/patch-src-transaction.c
+++ b/databases/ruby-bdb/files/patch-src-transaction.c
@@ -10,6 +10,33 @@
flags = 0;
if (rb_scan_args(argc, argv, "01", &a) == 1) {
flags = NUM2INT(a);
+@@ -205,7 +207,7 @@ bdb_txn_unlock(VALUE txnv)
+ }
+
+ static VALUE
+-bdb_catch(VALUE val, VALUE args, VALUE self)
++bdb_catch(VALUE val, VALUE args, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ rb_yield(args);
+ return Qtrue;
+@@ -260,7 +262,7 @@ struct dbtxnopt {
+ };
+
+ static VALUE
+-bdb_txn_i_options(VALUE obj, VALUE dbstobj)
++bdb_txn_i_options(VALUE obj, VALUE dbstobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ struct dbtxnopt *opt = (struct dbtxnopt *)dbstobj;
+ VALUE key, value;
+@@ -329,7 +331,7 @@ bdb_env_rslbl_begin(VALUE origin, int argc, VALUE *arg
+ if (argc > 0 && TYPE(argv[argc - 1]) == T_HASH) {
+ options = argv[argc - 1];
+ argc--;
+- rb_iterate(rb_each, options, bdb_txn_i_options, (VALUE)&opt);
++ rb_block_call(options, rb_intern("each"), 0, NULL, bdb_txn_i_options, (VALUE)&opt);
+ flags = opt.flags;
+ if (flags & BDB_TXN_COMMIT) {
+ commit = 1;
@@ -552,7 +554,9 @@ bdb_env_recover(VALUE obj)
if (!rb_block_given_p()) {
rb_raise(bdb_eFatal, "call out of an iterator");