[前][次][番号順一覧][スレッド一覧]

ruby-changes:5902

From: usa <ko1@a...>
Date: Wed, 18 Jun 2008 18:32:18 +0900 (JST)
Subject: [ruby-changes:5902] Ruby:r17410 (trunk): * win32/win32.c (errmap): add some pipe errors.

usa	2008-06-18 18:32:03 +0900 (Wed, 18 Jun 2008)

  New Revision: 17410

  Modified files:
    trunk/ChangeLog
    trunk/win32/win32.c

  Log:
    * win32/win32.c (errmap): add some pipe errors.
    
    * win32/win32.c (rb_w32_write): set errno when CRT's errno is EINVAL
      for pipe errors.
    


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/win32/win32.c?r1=17410&r2=17409&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17410&r2=17409&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 17409)
+++ ChangeLog	(revision 17410)
@@ -1,3 +1,10 @@
+Wed Jun 18 18:31:03 2008  NAKAMURA Usaku  <usa@r...>
+
+	* win32/win32.c (errmap): add some pipe errors.
+
+	* win32/win32.c (rb_w32_write): set errno when CRT's errno is EINVAL
+	  for pipe errors.
+
 Wed Jun 18 18:09:08 2008  NAKAMURA Usaku  <usa@r...>
 
 	* win32/win32.c (poll_child_status): set EINVAL to errno when
Index: win32/win32.c
===================================================================
--- win32/win32.c	(revision 17409)
+++ win32/win32.c	(revision 17410)
@@ -156,6 +156,14 @@
     {	ERROR_INFLOOP_IN_RELOC_CHAIN,	ENOEXEC		},
     {	ERROR_FILENAME_EXCED_RANGE,	ENOENT		},
     {	ERROR_NESTING_NOT_ALLOWED,	EAGAIN		},
+#ifndef ERROR_PIPE_LOCAL
+#define ERROR_PIPE_LOCAL	229L
+#endif
+    {	ERROR_PIPE_LOCAL,		EPIPE		},
+    {	ERROR_BAD_PIPE,			EPIPE		},
+    {	ERROR_PIPE_BUSY,		EAGAIN		},
+    {	ERROR_NO_DATA,			EPIPE		},
+    {	ERROR_PIPE_NOT_CONNECTED,	EPIPE		},
     {	ERROR_NOT_ENOUGH_QUOTA,		ENOMEM		},
     {	WSAENAMETOOLONG,		ENAMETOOLONG	},
     {	WSAENOTEMPTY,			ENOTEMPTY	},
@@ -3873,8 +3881,12 @@
 {
     SOCKET sock = TO_SOCKET(fd);
 
-    if (!is_socket(sock))
-	return write(fd, buf, size);
+    if (!is_socket(sock)) {
+	size_t ret = write(fd, buf, size);
+	if ((int)ret < 0 && errno == EINVAL)
+	    errno = map_errno(GetLastError());
+	return ret;
+    }
     else
 	return rb_w32_send(fd, buf, size, 0);
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]