diff options
-rw-r--r-- | databases/ruby-bdb/Makefile | 5 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-bdbxml1-bdbxml.cc | 9 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-bdbxml2-bdbxml.h | 4 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-bdb.c | 15 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-common.c | 1091 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-delegator.c | 11 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-env.c | 402 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-lock.c | 11 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-log.c | 11 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-recnum.c | 9 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-sequence.c | 20 | ||||
-rw-r--r-- | databases/ruby-bdb/files/patch-src-transaction.c | 27 |
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"); |