[#26664] refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

22 messages 2005/08/01
[#26665] Re: refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/01

山本です。

[#26668] Re: refactoring tcltklib.c (deleted ip check) — Hidetoshi NAGAI <nagai@...> 2005/08/01

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

[#26678] Re: refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/01

山本です。

[#26684] Re: refactoring tcltklib.c (deleted ip check) — Hidetoshi NAGAI <nagai@...> 2005/08/01

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

[#26686] Re: refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/01

山本です。

[#26817] test/socket/test_tcp.rb freeze on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

12 messages 2005/08/18

[#26829] cannot check EOF of pipe on windows — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

19 messages 2005/08/19
[#26830] Re: cannot check EOF of pipe on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/19

山本です。

[#26831] Re: cannot check EOF of pipe on windows — "U.Nakamura" <usa@...> 2005/08/19

こんにちは、なかむら(う)です。

[#26832] Re: cannot check EOF of pipe on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/19

山本です。

[#26836] Re: cannot check EOF of pipe on windows — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/08/19

なかだです。

[#26872] irb -I/ruby -Iと$LOAD_PATH — akira yamada / やまだあきら <akira@...>

Debianユーザからruby -Iとirb -Iで

17 messages 2005/08/24
[#26873] Re: irb -I/ruby -Iと$LOAD_PATH — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/08/24

なかだです。

[#26875] Re: irb -I/ruby -Iと$LOAD_PATH — akira yamada / やまだあきら <akira@...> 2005/08/24

nobuyoshi nakada wrote:

[#26885] Re: irb -I/ruby -Iと$LOAD_PATH — keiju@... (石塚圭樹) 2005/08/26

けいじゅ@いしつかです.

[#26897] fail on make install — KIMURA Koichi <kimura.koichi@...>

木村です。

28 messages 2005/08/29
[#26898] Re: fail on make install — "U.Nakamura" <usa@...> 2005/08/29

こんにちは、なかむら(う)です。

[#26903] Re: fail on make install — KIMURA Koichi <kbk@...> 2005/08/29

木村です。

[#26922] Re: fail on make install — KIMURA Koichi <kimura.koichi@...> 2005/08/30

木村です。

[#26926] Re: fail on make install — KIMURA Koichi <kimura.koichi@...> 2005/08/31

木村です。

[#26927] Re: fail on make install — "U.Nakamura" <usa@...> 2005/08/31

こんにちは、なかむら(う)です。

[#26928] Re: fail on make install — KIMURA Koichi <kimura.koichi@...> 2005/08/31

木村です。

[#26929] Re: fail on make install — "U.Nakamura" <usa@...> 2005/08/31

こんにちは、なかむら(う)です。

[#26930] Re: fail on make install — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/08/31

なかだです。

[#26931] Re: fail on make install — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/31

山本です。

[#26933] Re: fail on make install — nobu@... 2005/08/31

なかだです。

[#26938] Re: fail on make install — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/09/01

なかだです。

[#26939] Re: fail on make install — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/09/01

山本です。

[#26900] multiplying empty string — nobuyoshi nakada <nobuyoshi.nakada@...>

19 messages 2005/08/29
[#26904] Re: multiplying empty string — Yukihiro Matsumoto <matz@...> 2005/08/29

まつもと ゆきひろです

[#26907] Re: multiplying empty string — Tanaka Akira <akr@...17n.org> 2005/08/29

In article <1125327516.070646.12845.nullmailer@x31.priv.netlab.jp>,

[#26909] Re: multiplying empty string — Yukihiro Matsumoto <matz@...> 2005/08/29

まつもと ゆきひろです

[ruby-dev:26829] cannot check EOF of pipe on windows

From: "U.Nakamura" <usa@...>
Date: 2005-08-19 01:53:16 UTC
List: ruby-dev #26829
こんにちは、なかむら(う)です。

現在、Windows版のrubyでは、以下のスクリプト(ささださん作成)を
実行すると、実際にEOFになるべき時点でErrno::EINVAL例外が発生
してしまいます(bccwin32版ではErrno::ENOENT)。

  IO.popen('ruby', 'r+'){|io|
    io.write %q{
      p 1
      print 'xy'
    }
    io.close_write
  
    while c = io.read(1)
      p c
      p io.eof?
    end
  }

IO.popenで作成されるパイプの正体はソケットなのですが、この問
題は、Cランタイムのread()が相手側がソケットであることを考慮し
ていないために発生しています。
と、ここまでが前提。


さて、実際には何が起きているかというと、read()の中でエラーが
発生しているのですが、このエラーは ERROR_NETNAME_DELETED とい
うものです(なんでこのエラーになるのかは聞かないで下さい)。
そこで、以下のようなパッチを作成するとこの問題は回避できるは
ずです。
実際、mswin32版ではこれで問題がなくなります。

Index: win32/win32.c
===================================================================
RCS file: /home/cvs/ruby/win32/win32.c,v
retrieving revision 1.164
diff -u -1 -p -r1.164 win32.c
--- win32/win32.c	18 Aug 2005 02:07:28 -0000	1.164
+++ win32/win32.c	19 Aug 2005 01:42:20 -0000
@@ -3746 +3746,13 @@ rb_w32_fsopen(const char *path, const ch
 #endif
+
+size_t
+rb_w32_read(int fd, void *buf, size_t size)
+{
+    int oerr = errno;
+    int ret = _read(fd, buf, size);
+    if (ret < 0 && GetLastError() == ERROR_NETNAME_DELETED) {
+	errno = oerr;
+	ret = 0;
+    }
+    return ret;
+}
Index: win32/win32.h
===================================================================
RCS file: /home/cvs/ruby/win32/win32.h,v
retrieving revision 1.70
diff -u -1 -p -r1.70 win32.h
--- win32/win32.h	3 Aug 2005 01:21:20 -0000	1.70
+++ win32/win32.h	19 Aug 2005 01:42:20 -0000
@@ -105,3 +105,2 @@ extern "C++" {
 #define tell(h)			_tell(h)
-#define unlink(p)		_unlink(p)
 #define write(h, b, l)		_write(h, b, l)
@@ -135,2 +134,4 @@ extern "C++" {
 #define unlink(p)		rb_w32_unlink(p)
+#undef read
+#define read(fd, buf, size)	rb_w32_read(fd, buf, size)
 
@@ -202,2 +203,3 @@ extern int rb_w32_rmdir(const char *);
 extern int rb_w32_unlink(const char*);
+extern size_t rb_w32_read(int, void *, size_t);
 

で、これでめでたしめでたしということでcommitしようかと思った
のですが、bccwin32版にこのパッチを適用すると、mkexports.rbが
Errno::EPIPE例外を発生してしまうようになりました。
bccのCランタイムのソースを持ってないのでこれ以上追うのは困難
なのですが、どなたか確認できる方はいらっしゃいませんか?


それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>



In This Thread

Prev Next