Kazunori Iriya
iriya****@yahoo*****
2006年 5月 18日 (木) 13:17:52 JST
shiro さん、 お返事ありがとうございます。 さっそく gdbm_errno を取得し二回目の切り分けを行ったとこ ろ gdbmopen.c の 380 行目の GDBM_FILE_READ_ERROR (6) が セットされていることを確認できました。 ---- ここから num_bytes = read (dbf->desc, dbf->dir, dbf->header->dir_size); if (num_bytes != dbf->header->dir_size) { gdbm_close (dbf); gdbm_errno = GDBM_FILE_READ_ERROR; // ★ return NULL; } ---- ここまで 周辺の値をみると dbf->header->dir_size == 10 num_bytes == 0 なので、read(2) が、シーク位置が eof か eof よりも後を指 して 0 を返しているようです。 ここまで切り分けできたので GDBM に視点をうつして、切り分 けを進めてみようと思います。 Gauche のホスティング環境は、Linux version 2.4.14 (root****@sv*****) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)) 上で、Gauche 0.7.4.2 を動かしていたのですが、いつの間に か FreeBSD 上に /home 配下ごそっと移動されていることに気 づかず、また気づいた後も WiLiKi が動作していたので放って おいていました。 RHL 7.1, GDBM ?, Gauche 0.7.4.2 ⇒ FreeBSD 5.4, GDBM 1.3, Gauche 0.8.7 と環境の大きな変化が発生しているので一つずつつぶしていっ てみます。 どうもありがとうございました。 入谷 --- Shiro Kawai <shiro****@lava*****> からのメッセージ: > これはエラーメッセージの出しかたが変ですね。Scm_SysError を使っちゃって > いるために、errnoを見に行ってるせいですな。 > > もしGaucheのリビルドが可能な環境なら、ext/dbm/gdbm.stub の128行目あたり > > z->dbf = gdbm_open(Scm_GetString(name), size, > rwmode, fmode, NULL); > if (z->dbf == NULL) Scm_SysError(\"couldn't open > gdbm file %S\", name); > > を > > z->dbf = gdbm_open(Scm_GetString(name), size, > rwmode, fmode, NULL); > if (z->dbf == NULL) Scm_SysError(\"couldn't open > gdbm file %S (gdbm_errno=%d)\", name, gdbm_errno); > > みたいにしてリビルド、実行してみてください。そしたらgdbm のエラーコードが > 得られると思うので、/usr/include/gdbm.h > に定義されているエラーコードと > 見比べてくてください。 > > --shiro -------------------------------------- Yahoo! JAPAN 10th Anniversary Special Feature --- Enjoy Yahoo! Auction with Yahoo! Mail !! --- http://pr.mail.yahoo.co.jp/auction/