From: Koji Oda Date: 1998-11-24T11:02:03+09:00 Subject: [ruby-list:11026] Re: make ruby on WinNT with VC++6.0 小田@QNES です。 コマンド全部を command.com/cmd.exe に渡すというのはダメだということが わかりました。 # ``で囲んだコマンド実行が結果異常になります。 適当なことを書いてしまい、申し訳ありません >木村さん subject: [ruby-list:10891] Re: make ruby on WinNT with VC++6.0 > 小田@QNES です。 > > --- > On Mon, 16 Nov 1998 19:36:49 +0900 > KIMURA Koichi wrote: > > > serowさんのjperlの様に、command.com/cmd.exeの内部コマンドがsystem() > > 経由で渡されたときにはごにょごにょするという目論見だったのですが、 > > 95/NTやcommand.com/cmd.exeの切りわけや内部コマンドの洗い出しが面 > > 倒になってそのまま放ってあります。 > > command.com/cmd.exeの切りわけは、今実装されている環境変数COMSPECを > 使うという方法でいいと思います。 > 確認したところでは、環境変数COMSPECは95/98/NT全て標準でセットされて > いるようです。 > # 変更されているとちょっと困りますが... > > systemメソッドを使ったコマンド実行は、全て、環境変数COMSPECのコマンド > インタプリタに渡してしまうということでいいような気がします。 で、1.1c8 をmakeしてみたのですが、今のままでも"echo"などの内部コマンド 実行で失敗しますので、パッチを作ってみました。 以下のパッチは、for ruby-1.1c8 です。 =========== >diff -uNi nt.c.org nt.c --- nt.c.org Tue Nov 24 11:00:12 1998 +++ nt.c Tue Nov 24 10:58:54 1998 @@ -251,6 +251,9 @@ static char *szInternalCmds[] = { + "append", + "break", + "call", "cd", "chdir", "cls", @@ -258,12 +261,15 @@ "date", "del", "dir", + "diskcopy", "echo", "erase", "label", "md", "mkdir", + "move", "path", + "pause", "rd", "rem", "ren", @@ -274,19 +280,36 @@ "time", "type", "ver", + "verify", "vol", +/* for WinNT */ + "assoc", + "ftype", +/* for Win98 */ + "1024fd", + "chcp", + "ctty", + "deltree", + NULL }; int isInternalCmd(char *cmd) { - int fRet; + int i, fRet = 0; char **vec; int vecc = NtMakeCmdVector(cmd, &vec, FALSE); + for( i = 0; szInternalCmds[i] ; i++){ + if(!strcmp(szInternalCmds[i], vec[0])){ + fRet = 1; + break; + } + } + SafeFree (vec, vecc); - return 0; + return fRet; } =========== ∪*****/\*****\/*****/\*****∪ 1st Development Department Based Software Division E-Mail:oda@bsd1.qnes.nec.co.jp ∩*****/\*****\/*****/\*****∩