summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-06 14:58:46 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-06 14:58:46 +0000
commit0c19297362d1a400e4ea536f963ff5e7d3e40112 (patch)
treeee06759c26852725642b59d5632a2e1307a6c621
parent8eb656fcf59129d7f450de2dbd381095ffb613cd (diff)
downloadruby-0c19297362d1a400e4ea536f963ff5e7d3e40112.tar.gz
ruby-0c19297362d1a400e4ea536f963ff5e7d3e40112.tar.xz
ruby-0c19297362d1a400e4ea536f963ff5e7d3e40112.zip
* win32/win32.c (init_stdhandle): redirect unopened IOs to NUL.
[ruby-core:09572] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11362 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--win32/win32.c15
2 files changed, 16 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 1febdabba..8c6b376b0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,11 @@
-Wed Dec 6 23:56:14 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Dec 6 23:58:36 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
* Makefile.in, common.mk (NULLCMD): moved for platforms that empty
command does not run. fixed: [ruby-dev:29994]
+ * win32/win32.c (init_stdhandle): redirect unopened IOs to NUL.
+ [ruby-core:09572]
+
Tue Dec 5 19:01:42 2006 WATANABE Hirofumi <eban@ruby-lang.org>
* configure.in (SITE_DIR): fixed to emtpy RUBY_SITE_LIB in config.h on
diff --git a/win32/win32.c b/win32/win32.c
index a8e755e1f..a50a5f480 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -1731,15 +1731,24 @@ rb_w32_open_osfhandle(long osfhandle, int flags)
static void
init_stdhandle(void)
{
+ int nullfd = -1;
+ int keep = 0;
+#define open_null(fd) \
+ (((nullfd < 0) ? \
+ (nullfd = open("NUL", O_RDWR|O_BINARY)) : 0), \
+ ((nullfd == (fd)) ? (keep = 1) : dup2(nullfd, fd)), \
+ (fd))
+
if (fileno(stdin) < 0) {
- stdin->_file = 0;
+ stdin->_file = open_null(0);
}
if (fileno(stdout) < 0) {
- stdout->_file = 1;
+ stdout->_file = open_null(1);
}
if (fileno(stderr) < 0) {
- stderr->_file = 2;
+ stderr->_file = open_null(2);
}
+ if (nullfd >= 0 && !keep) close(nullfd);
}
#else