[Gauche-devel-jp] Re: Couldn't open database file to read が表示

Back to archive index

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/



Gauche-devel-jp メーリングリストの案内
Back to archive index