From: "藤本尚邦 / FUJIMOTO Hisakuni" Date: 1997-11-19T13:06:37+09:00 Subject: [ruby-list:5346] Re: DBM.delete_if bug ? 藤本です、こんにちは。 From: matz@netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-list:5338] Re: DBM.delete_if bug ? Date: Wed, 19 Nov 97 11:05:38 +0900 > In message "[ruby-list:5336] DBM.delete_if bug ?" > on 97/11/19, 藤本尚邦 / FUJIMOTO Hisakuni writes: > |のですが、GetDBM() のあと dbm = dbmp->di_dbm が必要じゃないでしょうか? > 必要です.どうもありがとうございます.早速修正しましょう. どうもありがとうございます。 > | 僕のところ(Linux, RedHat4.1)では ndbm.h がなくて DBM クラスが使え > |ないみたいなので、名前がgdbm_で始まるgdbm.hの関数を使うように dbm.c を > |書き換えました。それで動作確認しているときに delete_if を送ったところ > |で止まってしまうので発見しました。 > > 変更を行ったものをgdbmモジュールとしてcontribして頂けません > でしょうか? はい、ぜひそうしたいと思います。dbm.c自体を直接書き換えてしまってい るだけなので、gdbmモジュールの形に直そうと思います。 わからないところがあるので確認したいのですが、dbm.cの関数fdbm_store の定義の中で、dbm_clearerr(dbm)を使っているところがあります。これに相 当する関数が gdbm.h にないようなので、以下のようにとりあえずコメントア ウトしました。 if (gdbm_store(dbm, key, val, GDBM_REPLACE)) { /* dbm_clearerr(dbm); */ if (errno == EPERM) rb_sys_fail(Qnil); Fail("dbm_store failed"); } 僕のところにはdbm_clearerrのmanページがなくて、これでいいのかわから ないのですがどうでしょうか? gdbm_errno = GDBM_NOERR とすればいいかなとも思ったのですが、 dbm_clearerrが、(DBMインスタンスはそれぞれエラー状態を持っていて)引 数で指定されたDBMインスタンスのエラー状態をクリアするという意味だと想 像すると、gdbm_errno = GDBM_NOERR に置き換えるのはちょっとズレてるよう な気もするし.. ============================================================= 藤本尚邦 FUJIMOTO Hisakuni hisa@imasy.or.jp =============================================================