summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-18 09:32:03 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-18 09:32:03 +0000
commitad24701cceb53750abae8b0a86db44bc86a8c746 (patch)
tree2dd10d0a225f78dd1132d3bc9821414363ed283e /win32
parent32c63d1f3567a8b096c13ebf1c77621abc0a8d78 (diff)
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32')
-rw-r--r--win32/win32.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/win32/win32.c b/win32/win32.c
index 813c4ee191..1d6b7c0eed 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -156,6 +156,14 @@ static struct {
{ 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 @@ rb_w32_write(int fd, const void *buf, size_t size)
{
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);
}