[#12164] patch for ext/gdbm — Koji Arai <JCA02266@...>

新井です。

24 messages 2001/02/04
[#12168] Re: patch for ext/gdbm — matz@... (Yukihiro Matsumoto) 2001/02/05

まつもと ゆきひろです

[#12176] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/05

新井です。

[#12179] Re: patch for ext/gdbm — matz@... (Yukihiro Matsumoto) 2001/02/06

まつもと ゆきひろです

[#12219] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/12

新井です。

[#12220] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/12

新井です。

[#12256] set_trace_func — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

15 messages 2001/02/17

[#12293] crash on proc without a block — Kenichi Komiya <kom@...1.accsnet.ne.jp>

15 messages 2001/02/25

[#12323] Re: [ruby-list:28364] class definition extension — "K.Kosako" <kosako@...>

ruby-listから移動しました。

13 messages 2001/02/28
[#12324] Re: [ruby-list:28364] class definition extension — matz@... (Yukihiro Matsumoto) 2001/02/28

まつもと ゆきひろです

[ruby-dev:12176] Re: patch for ext/gdbm

From: Koji Arai <JCA02266@...>
Date: 2001-02-05 21:13:07 UTC
List: ruby-dev #12176
新井です。

> まつもと ゆきひろです

> |GDBM モジュールに手を加えました(ついでにDBMも)。パッチを付けます。

> Fileなどではnewではブロックを受け取らず、openでは受け取ると
> いう仕様になってるんですがこれも揃えたほうがよろしいでしょう
> か。

そうですね。その方が良いと思います。今回「取り急ぎ必要だった
パッチ」なのですが、他にも

o エラーメッセージに gdbm_strerror() の結果を追加する
o fgdbm_has_key() では gdbm_fetch() ではなく gdbm_exists() を使う
o GDBM::FAST を追加したので gdbm_sync() と等価な GDBM#sync が必要

とかあります、が、ちょっと手が回りませんでした。

しばらく、GDBM は軽くお仕事で使うのでしばらく待っていただけ
ればまとめてパッチ出せると思います。むろん、代わりにどなたか
やってくれてもよいですが。。。というか、そのほうが助かります
^^; 私自身はGDBM使うのは今回始めてだし。

--
新井康司 (Koji Arai)

とかいいつつ gdbm_exists() を使うように hack しました。
値取得のための余計なメモリ確保がなくなります。


--- gdbm.c.1	Tue Feb  6 05:39:33 2001
+++ gdbm.c.2	Tue Feb  6 05:50:17 2001
@@ -525,7 +531,7 @@
 fgdbm_has_key(obj, keystr)
     VALUE obj, keystr;
 {
-    datum key, val;
+    datum key;
     struct dbmdata *dbmp;
     GDBM_FILE dbm;
 
@@ -535,8 +541,8 @@
 
     GetDBM(obj, dbmp);
     dbm = dbmp->di_dbm;
-    val = gdbm_fetch(dbm, key);
-    if (val.dptr) return Qtrue;
+    if (gdbm_exists(dbm, key))
+        return Qtrue;
     return Qfalse;
 }
 

In This Thread