[#17881] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — nobu.nakada@...

なかだです。

14 messages 2002/08/02
[#17883] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — nobu.nakada@... 2002/08/02

なかだです。

[#17906] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — Takaaki Tateishi <ttate@...> 2002/08/03

At Fri, 2 Aug 2002 12:17:33 +0900,

[#17908] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17909] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — Takaaki Tateishi <ttate@...> 2002/08/03

At Sat, 3 Aug 2002 23:32:39 +0900,

[#17887] next parser (Re: parenthesize argument(s) for future version) — Minero Aoki <aamine@...>

あおきです。スレッド切ります。

18 messages 2002/08/02
[#17895] Re: next parser (Re: parenthesize argument(s) for future version) — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17898] Re: next parser (Re: parenthesize argument(s) for future version) — Minero Aoki <aamine@...> 2002/08/03

あおきです。

[#17904] Re: next parser (Re: parenthesize argument(s) for future version) — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17920] Re: next parser (Re: parenthesize argument(s) for future version) — Minero Aoki <aamine@...> 2002/08/04

あおきです。

[#17933] Re: next parser (Re: parenthesize argument(s) for future version) — matz@... (Yukihiro Matsumoto) 2002/08/06

まつもと ゆきひろです

[#17889] ruby-bugs-ja incoming/277 — Takaaki Tateishi <ttate@...>

立石です.

15 messages 2002/08/02
[#17890] Re: ruby-bugs-ja incoming/277 — Takaaki Tateishi <ttate@...> 2002/08/02

At Sat, 3 Aug 2002 05:13:32 +0900,

[#17927] Re: import-module (Re: Re: scope-in-state) — keiju@... (石塚圭樹)

けいじゅ@日本ラショナルソフトウェアです.

13 messages 2002/08/05
[#17943] Re: import-module (Re: Re: scope-in-state) — Shin-ichiro HARA <sinara@...> 2002/08/06

原です。

[#17949] Re: import-module (Re: Re: scope-in-state) — keiju@... (石塚圭樹) 2002/08/06

けいじゅ@日本ラショナルソフトウェアです.

[#17955] Re: import-module (Re: Re: scope-in-state) — Shin-ichiro HARA <sinara@...> 2002/08/07

原です。

[#17954] Selection IPv4/IPv6 at TCPSocket — NISHI Takao <zophos@...9.com>

にし@おかやまです。

19 messages 2002/08/07
[#18120] Re: Selection IPv4/IPv6 at TCPSocket — "Akinori MUSHA" <knu@...> 2002/08/31

At Wed, 7 Aug 2002 13:23:37 +0900,

[#18121] Re: Selection IPv4/IPv6 at TCPSocket — GOTO Kentaro <gotoken@...> 2002/08/31

At Sun, 1 Sep 2002 03:31:01 +0900,

[#18127] Re: Selection IPv4/IPv6 at TCPSocket — "Akinori MUSHA" <knu@...> 2002/09/01

At Sun, 1 Sep 2002 04:00:33 +0900,

[#18128] Re: Selection IPv4/IPv6 at TCPSocket — "Akinori MUSHA" <knu@...> 2002/09/01

At Sun, 1 Sep 2002 12:37:05 +0900,

[#18130] Re: Selection IPv4/IPv6 at TCPSocket — GOTO Kentaro <gotoken@...> 2002/09/01

At Sun, 1 Sep 2002 13:00:46 +0900,

[#18131] Re: Selection IPv4/IPv6 at TCPSocket — Minero Aoki <aamine@...> 2002/09/01

あおきです。

[#17965] inferior-ruby-mode and irb — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

22 messages 2002/08/09
[#17971] Re: inferior-ruby-mode and irb — matz@... (Yukihiro Matsumoto) 2002/08/10

まつもと ゆきひろです

[#18008] Re: inferior-ruby-mode and irb — keiju@... (石塚圭樹) 2002/08/14

けいじゅ@日本ラショナルソフトウェアです.

[#17966] Hash has default block? — Tanaka Akira <akr@...17n.org>

ふと、ひさしぶりに(一年ぶりくらい?) AMarshal に手を入れていて気になっ

34 messages 2002/08/09
[#17967] Re: Hash has default block? — "K.Kosako" <kosako@...> 2002/08/09

Tanaka Akiraさんの<hvo8z3gnvr6.fsf@coulee.a02.aist.go.jp>から

[#17969] Re: Hash has default block? — Tanaka Akira <akr@...17n.org> 2002/08/09

In article <20020809121059.B6DC51560@helium.ruby-lang.org>,

[#17977] Re: Hash has default block? — "K.Kosako" <kosako@...> 2002/08/12

Tanaka Akiraさんの<hvo65yknitf.fsf@coulee.a02.aist.go.jp>から

[#17989] Re: Hash has default block? — Tanaka Akira <akr@...17n.org> 2002/08/13

In article <20020812052018.C7F9B1671@helium.ruby-lang.org>,

[#17990] Re: Hash has default block? — matz@... (Yukihiro Matsumoto) 2002/08/13

まつもと ゆきひろです

[#17991] Re: Hash has default block? — matz@... (Yukihiro Matsumoto) 2002/08/13

まつもと ゆきひろです

[#17998] Re: Hash has default block? — "K.Kosako" <kosako@...> 2002/08/13

Yukihiro Matsumotoさんの

[#17999] Re: Hash has default block? — Tanaka Akira <akr@...17n.org> 2002/08/13

In article <20020813075933.DBB611415@helium.ruby-lang.org>,

[#18000] Re: Hash has default block? — matz@... (Yukihiro Matsumoto) 2002/08/13

まつもと ゆきひろです

[#18004] allocation framework — Tanaka Akira <akr@...17n.org> 2002/08/13

In article <1029229143.399680.2549.nullmailer@picachu.netlab.jp>,

[#18021] Re: allocation framework — matz@... (Yukihiro Matsumoto) 2002/08/15

まつもと ゆきひろです

[#18022] Re: allocation framework — Tanaka Akira <akr@...17n.org> 2002/08/15

In article <1029423141.763951.25373.nullmailer@picachu.netlab.jp>,

[#18023] Re: allocation framework — matz@... (Yukihiro Matsumoto) 2002/08/16

まつもと ゆきひろです

[#18024] Re: allocation framework — Tanaka Akira <akr@...17n.org> 2002/08/16

In article <1029464034.601483.27585.nullmailer@picachu.netlab.jp>,

[#18074] source file name at -r option — nobu.nakada@...

なかだです。

30 messages 2002/08/24
[#18352] Re: source file name at -r option — nobu.nakada@... 2002/09/22

なかだです。

[#18662] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/11/06

なひです。

[#18663] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — nobu.nakada@... 2002/11/06

なかだです。

[#18667] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — matz@... (Yukihiro Matsumoto) 2002/11/06

まつもと ゆきひろです

[#18673] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — nobu.nakada@... 2002/11/07

なかだです。

[#18076] Win32 signal, process etc — nobu.nakada@...

なかだです。

14 messages 2002/08/24

[#18103] autoload patch for ruby-1.7 — "Yoshinori K. Okuji" <okuji@...>

[ruby-dev:16180]でトップレベル以外の定数についてもautoloadができるよう

24 messages 2002/08/29
[#18132] Re: autoload patch for ruby-1.7 — Minero Aoki <aamine@...> 2002/09/01

あおきです。

[#18139] Re: autoload patch for ruby-1.7 — "Yoshinori K. Okuji" <okuji@...> 2002/09/01

At Sun, 1 Sep 2002 15:53:24 +0900,

[#18145] Re: autoload patch for ruby-1.7 — Minero Aoki <aamine@...> 2002/09/02

あおきです。

[#18109] mkmf.rb and extmk.rb — WATANABE Hirofumi <eban@...>

わたなべです。

24 messages 2002/08/30
[#18157] Re: mkmf.rb and extmk.rb — matz@... (Yukihiro Matsumoto) 2002/09/03

まつもと ゆきひろです

[#18159] Re: mkmf.rb and extmk.rb — WATANABE Hirofumi <eban@...> 2002/09/03

わたなべです。

[ruby-dev:18080] Re: Win32 signal, process etc

From: nobu.nakada@...
Date: 2002-08-26 07:08:04 UTC
List: ruby-dev #18080
なかだです。

At Mon, 26 Aug 2002 14:23:18 +0900,
U.Nakamura <usa@osb.att.ne.jp> wrote:
> > win32/win32.c:kill()でSIGINTとSIGKILLだけ処理していますが、
> > signal.cではSIGKILLが定義されていないため、実際には即値で指定し
> > ないと使えません。win32.cのSIGKILLの定義をsignal.cにもコピーす
> > るか、win32.hでsignal.hもインクルードしてそっちに持っていくかす
> > る必要があると思います。あるいは、SIGTERMはあるようなのでこれも
> > SIGKILLと同じ処理にするとか。
> 
> win32.hに入れようと思って、そのまま忘れてました。
> 候補にないですが、win32.hじゃなくてrubysig.h(ですよね?)じゃ
> ないと何かまずいんでしたっけ?

そっちのほうがいいかも知れません。

> > もうひとつ、pipe_exec()では一旦stdin/stdoutにdupしてから
> > CreateProcess()してますが、なんとなくこれはCreateChild()と機能
> > 的に重複してるような気がします。
> 
> pipe_exec()ではCreateProcess()じゃなくてCreateChild()を呼ん
> でるつもりですが、見間違え?

いや、だからこそ重複してるような気がするわけです。

> ただ、CreateChild()の後ろの三つの引数を結局どこでも使ってな
> くて意味がないというのは思います。
> pipe_exec()で使うような使い方のために用意したつもりだったよ
> うな気もするんですけどね。

です。それを使うとたぶんこんな感じ。

# DuplicateHandleしないとまずい?


Index: win32.c
===================================================================
RCS file: /cvs/ruby/src/ruby/win32/win32.c,v
retrieving revision 1.63
diff -u -2 -p -r1.63 win32.c
--- win32.c	20 Aug 2002 13:03:22 -0000	1.63
+++ win32.c	24 Aug 2002 14:18:02 -0000
@@ -85,4 +85,7 @@ static DWORD wait_events(HANDLE event, D
 #ifndef __BORLANDC__
 static int rb_w32_open_osfhandle(long osfhandle, int flags);
+#define open_osfhandle rb_w32_open_osfhandle
+#else
+#define open_osfhandle _open_osfhandle
 #endif
 
@@ -440,11 +443,8 @@ pipe_exec(char *cmd, int mode, FILE **fp
     HANDLE hReadIn, hReadOut;
     HANDLE hWriteIn, hWriteOut;
-    HANDLE hSavedStdIn, hSavedStdOut;
-    HANDLE hDupInFile, hDupOutFile;
-    HANDLE hCurProc;
     SECURITY_ATTRIBUTES sa;
-    BOOL fRet;
     BOOL reading, writing;
-    int fdin, fdout;
+    FILE *fr, *fw;
+    int fd;
     int pipemode;
     char modes[3];
@@ -454,5 +454,13 @@ pipe_exec(char *cmd, int mode, FILE **fp
     writing = (mode & (O_WRONLY | O_RDWR)) ? TRUE : FALSE;
     reading = ((mode & O_RDWR) || !writing) ? TRUE : FALSE;
-    pipemode = (mode & O_BINARY) ? O_BINARY : O_TEXT;
+    if (mode & O_BINARY) {
+	pipemode = O_BINARY;
+	modes[1] = 'b';
+	modes[2] = '\0';
+    }
+    else {
+	pipemode = O_TEXT;
+	modes[1] = '\0';
+    }
 
     sa.nLength              = sizeof (SECURITY_ATTRIBUTES);
@@ -463,168 +471,67 @@ pipe_exec(char *cmd, int mode, FILE **fp
     RUBY_CRITICAL(do {
 	ret = -1;
-	hCurProc = GetCurrentProcess();
 	if (reading) {
-	    fRet = CreatePipe(&hReadIn, &hReadOut, &sa, 2048L);
-	    if (!fRet) {
+	    if (!CreatePipe(&hReadIn, &hReadOut, &sa, 2048L)) {
 		errno = GetLastError();
 		break;
 	    }
-	    hSavedStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
-	    if (!SetStdHandle(STD_OUTPUT_HANDLE, hReadOut) ||
-		!DuplicateHandle(hCurProc, hReadIn, hCurProc, &hDupInFile, 0,
-				 FALSE, DUPLICATE_SAME_ACCESS)) {
-		errno = GetLastError();
-		CloseHandle(hReadIn);
-		CloseHandle(hReadOut);
-		CloseHandle(hCurProc);
-		break;
-	    }
-	    CloseHandle(hReadIn);
 	}
 	if (writing) {
-	    fRet = CreatePipe(&hWriteIn, &hWriteOut, &sa, 2048L);
-	    if (!fRet) {
+	    if (!CreatePipe(&hWriteIn, &hWriteOut, &sa, 2048L)) {
 		errno = GetLastError();
 		if (reading) {
-		    CloseHandle(hDupInFile);
+		    CloseHandle(hReadIn);
 		    CloseHandle(hReadOut);
 		}
 		break;
 	    }
-	    hSavedStdIn = GetStdHandle(STD_INPUT_HANDLE);
-	    if (!SetStdHandle(STD_INPUT_HANDLE, hWriteIn) ||
-		!DuplicateHandle(hCurProc, hWriteOut, hCurProc, &hDupOutFile, 0,
-				 FALSE, DUPLICATE_SAME_ACCESS)) {
-		errno = GetLastError();
-		CloseHandle(hWriteIn);
-		CloseHandle(hWriteOut);
-		CloseHandle(hCurProc);
-		if (reading) {
-		    CloseHandle(hDupInFile);
-		    CloseHandle(hReadOut);
-		}
-		break;
-	    }
-	    CloseHandle(hWriteOut);
 	}
-	CloseHandle(hCurProc);
-	ret = 0;
-    } while (0));
-    if (ret != 0) {
-	return ret;
-    }
 
-    /* create child process */
-    child = CreateChild(cmd, &sa, NULL, NULL, NULL);
-    if (!child) {
-	RUBY_CRITICAL({
-	    if (reading) {
-		SetStdHandle(STD_OUTPUT_HANDLE, hSavedStdOut);
-		CloseHandle(hReadOut);
-		CloseHandle(hDupInFile);
-	    }
-	    if (writing) {
-		SetStdHandle(STD_INPUT_HANDLE, hSavedStdIn);
-		CloseHandle(hWriteIn);
-		CloseHandle(hDupOutFile);
-	    }
-	});
-	return -1;
-    }
+	/* create child process */
+	child = CreateChild(cmd, &sa, hWriteIn, hReadOut, NULL);
+	if (reading) CloseHandle(hReadOut);
+	if (writing) CloseHandle(hWriteIn);
+	if (!child) {
+	    if (reading) CloseHandle(hReadIn);
+	    if (writing) CloseHandle(hWriteOut);
+	    break;
+	}
 
-    /* restore STDIN/STDOUT */
-    RUBY_CRITICAL(do {
-	ret = -1;
 	if (reading) {
-	    if (!SetStdHandle(STD_OUTPUT_HANDLE, hSavedStdOut)) {
-		errno = GetLastError();
+	    fd = open_osfhandle((long)hReadIn, (_O_RDONLY | pipemode));
+	    if (fd == -1) {
+		CloseHandle(hReadIn);
+	      read_open_failed:
+		if (writing) CloseHandle(hWriteOut);
 		CloseChildHandle(child);
-		CloseHandle(hReadOut);
-		CloseHandle(hDupInFile);
-		if (writing) {
-		    CloseHandle(hWriteIn);
-		    CloseHandle(hDupOutFile);
-		}
 		break;
 	    }
+	    modes[0] = 'r';
+	    if ((fr = (FILE *)fdopen(fd, modes)) == NULL) {
+		_close(fd);
+		goto read_open_failed;
+	    }
 	}
 	if (writing) {
-	    if (!SetStdHandle(STD_INPUT_HANDLE, hSavedStdIn)) {
-		errno = GetLastError();
+	    fd = open_osfhandle((long)hWriteOut, (_O_WRONLY | pipemode));
+	    if (fd == -1) {
+		CloseHandle(hWriteOut);
+	      write_open_failed:
+		if (reading) fclose(fr);
 		CloseChildHandle(child);
-		CloseHandle(hWriteIn);
-		CloseHandle(hDupOutFile);
-		if (reading) {
-		    CloseHandle(hReadOut);
-		    CloseHandle(hDupInFile);
-		}
 		break;
 	    }
-	}
-	ret = 0;
-    } while (0));
-    if (ret != 0) {
-	return ret;
-    }
-
-    if (reading) {
-#ifdef __BORLANDC__
-	fdin = _open_osfhandle((long)hDupInFile, (_O_RDONLY | pipemode));
-#else
-	fdin = rb_w32_open_osfhandle((long)hDupInFile, (_O_RDONLY | pipemode));
-#endif
-	CloseHandle(hReadOut);
-	if (fdin == -1) {
-	    CloseHandle(hDupInFile);
-	    if (writing) {
-		CloseHandle(hWriteIn);
-		CloseHandle(hDupOutFile);
-	    }
-	    CloseChildHandle(child);
-	    return -1;
-	}
-    }
-    if (writing) {
-#ifdef __BORLANDC__
-	fdout = _open_osfhandle((long)hDupOutFile, (_O_WRONLY | pipemode));
-#else
-	fdout = rb_w32_open_osfhandle((long)hDupOutFile,
-				      (_O_WRONLY | pipemode));
-#endif
-	CloseHandle(hWriteIn);
-	if (fdout == -1) {
-	    CloseHandle(hDupOutFile);
-	    if (reading) {
-		_close(fdin);
-	    }
-	    CloseChildHandle(child);
-	    return -1;
-	}
-    }
-
-    if (reading) {
-	sprintf(modes, "r%s", pipemode == O_BINARY ? "b" : "");
-	if ((*fpr = (FILE *)fdopen(fdin, modes)) == NULL) {
-	    _close(fdin);
-	    if (writing) {
-		_close(fdout);
-	    }
-	    CloseChildHandle(child);
-	    return -1;
-	}
-    }
-    if (writing) {
-	sprintf(modes, "w%s", pipemode == O_BINARY ? "b" : "");
-	if ((*fpw = (FILE *)fdopen(fdout, modes)) == NULL) {
-	    _close(fdout);
-	    if (reading) {
-		fclose(*fpr);
+	    modes[0] = 'w';
+	    if ((fw = (FILE *)fdopen(fd, modes)) == NULL) {
+		_close(fd);
+		goto write_open_failed;
 	    }
-	    CloseChildHandle(child);
-	    return -1;
 	}
-    }
+	*fpr = fr;
+	*fpw = fw;
+	ret = child->pid;
+    } while (0));
 
-    return child->pid;
+    return ret;
 }
 
@@ -2031,9 +1938,5 @@ rb_w32_socket (int af, int type, int pro
 	//fprintf(stderr, "socket fail (%d)", WSAGetLastError());
     }
-#ifdef __BORLANDC__
-    return _open_osfhandle(s, O_RDWR|O_BINARY);
-#else
-    return rb_w32_open_osfhandle(s, O_RDWR|O_BINARY);
-#endif
+    return open_osfhandle(s, O_RDWR|O_BINARY);
 }
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread