[Gauche-devel-jp] [help] sys-normalize-pathname と sys-chdir

アーカイブの一覧に戻る

OGURISU Osamu oguri****@lagen*****
2005年 9月 30日 (金) 16:33:52 JST


こんにちは、小栗栖です。

Gauche 0.8.5をLinuxで使ってますが、sys-normalize-pathname 
とsys-chdirを同時につかうと文字列が壊れるという変な現象に
ぶつかりました。原因が全然わかりません。

かなり特定の状況で発生します。例えば、
/home/123456/12345/0123456789012345 というディレクトリを作っ
て、そこに次のスクリプト check.scm を置きます。

#!/usr/bin/env gosh
(define (main args)
  (print (gauche-version))
  (sys-chdir "..")
  (let* ((b "abcdefghi")
         (d "123456789")
         (base #`",|b|.,|d|"))
    (write base)
    (newline)
    (sys-normalize-pathname "ABCDE" :absolute #t)
    (write base)
    (newline)))

これを実行した結果です。

$ cd /home/123456/12345/0123456789012345
$ ./check.scm
0.8.5
"abcdefghi.123456789"
"\0bcdefghi.123456789"
$

2回目の(write base)の最初の#\aが#\0になってしまっています。
スクリプト内の文字列 "abcdefghi" "123456789" "ABCDE" や、
ディレクトリ名 /home/123456/12345/0123456789012345 の長さ
を変えると、文字列が壊れたり壊れなかったりします。

途中の(sys-chdir "..")を消すと、2回目の(write base)もちゃ
んと "abcdefghi.123456789" となります。

この現象は 0.8.4と0.8.5で起きて、0.8.3では起きません。
FreeBSDでは0.8.4でも0.8.5でも、起きません。

私のLinux環境がおかしいのかと思って、Debian sargeとFedora
Core 4を新しくインストールしてみて試してみたのですが、どち
らでもこの現象が起きました。どうしてなんだろう…
--
小栗栖 修 / OGURISU Osamu



Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る