[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24143] ヒアドキュメント形式の外部コマンド実行時の不具合(mswin版)?

From: OKADOME Junichi <tome@...>
Date: 2004-08-20 11:00:21 UTC
List: ruby-dev #24143
まつもとさん、みなさん、はじめまして。
とめ と申します。つい最近始めたRuby初心者です。

早速ではありますが、不具合らしき現象を発見しましたので
報告いたします。バージョンは
ruby 1.8.1 (2003-12-25) [i386-mswin32]
です。

■現象
ヒアドキュメント形式で外部コマンド(<-なんといえばよいのでしょうか)
を実行すると、プログラムが見つからないといわれて実行に失敗します。
コマンド出力 `command` 形式ではOKです。

■エラーメッセージの例
debug.rb:14:in ``': No such file or directory - ls.exe (Errno::ENOENT)

■プログラムの例
#bad
p <<`EOC`
ls.exe
EOC
#good
p `ls.exe`

■デバッグ
少しだけ、コードを追いかけてみました。
win32/win32.c の CreateChild の中で、CreateProcess が呼ばれていますが、
これに引き渡される cmd は 'ls.exe\n' となっています。
つまり、行末の'\n'がchompされないままなので、失敗しています。
同じように、以下のようなRubyプログラムの場合

#bad2 (indented)
  p <<-`EOC`
  ls.exe
  EOC

やはり、先行するwhitespaceまで含めて引き渡されるので、
そのようなファイルは無いということになってしまいます。

■対応案
遅くとも win32/win32.c の CreateChildの中で、isInternalCmd() で、
cmd文字列中にパイプやリダイレクトも含まれず、内部コマンドでない
と判断されたあとで、先行するwhitespaceと行末の改行をけずってやる
必要があると思われます。


いかがでしょうか。

#過去ログの検索はしてみたつもりですが、既出でしたらすみません。


日立造船情報システム(株)システム開発部 基本システムグループ
岡留 淳一(Junichi OKADOME) 




In This Thread

Prev Next