From eac1d9cfcad5d2d56951e540eb7023eccf7a3593 Mon Sep 17 00:00:00 2001 From: akr Date: Tue, 21 Feb 2012 21:04:04 +0000 Subject: [PATCH] * ext/dbm/dbm.c (fdbm_initialize): disable Berkeley DB error messages. * ext/dbm/extconf.rb: check DBC type for above. [ruby-dev:45269] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34724 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++++++ ext/dbm/dbm.c | 6 ++++++ ext/dbm/extconf.rb | 5 +++++ 3 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1d0c2dc141..f3f86ce82d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Wed Feb 22 06:02:42 2012 Tanaka Akira + + * ext/dbm/dbm.c (fdbm_initialize): disable Berkeley DB error messages. + + * ext/dbm/extconf.rb: check DBC type for above. + + [ruby-dev:45269] + Tue Feb 21 20:23:47 2012 Nobuyoshi Nakada * hash.c (rb_any_hash): treat Qundef like as other special constants. diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index d6d1f4959a..30f0d9d504 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -196,6 +196,12 @@ fdbm_initialize(int argc, VALUE *argv, VALUE obj) #if defined(HAVE_DBM_DIRFNO) rb_fd_fix_cloexec(dbm_dirfno(dbm)); #endif + +#if defined(_DB_H_) && defined(HAVE_TYPE_DBC) + /* Disable Berkeley DB error messages such as: + * DB->put: attempt to modify a read-only database */ + ((DBC*)dbm)->dbp->set_errfile(((DBC*)dbm)->dbp, NULL); +#endif } if (!dbm) { diff --git a/ext/dbm/extconf.rb b/ext/dbm/extconf.rb index 751fb40dd0..f2bf148cd6 100644 --- a/ext/dbm/extconf.rb +++ b/ext/dbm/extconf.rb @@ -222,6 +222,11 @@ def headers.db_check2(db, hdr) return false end + # DBC type is required to disable error messages by Berkeley DB 2 or later. + if have_db_header + have_type("DBC", hdr, hsearch) + end + if hsearch $defs << hsearch @defs = hsearch