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