1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* io.c (rb_cloexec_open): set O_NOINHERIT instead of O_CLOEXEC if it is

available (for Windows).

* win32/win32.c (fcntl): on F_DUPFD, determine the inheritance of the
  new handle by O_NOINHERIT flag of original fd.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33783 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
usa 2011-11-18 04:06:01 +00:00
parent d6c86e631d
commit 44cff77b95
3 changed files with 12 additions and 1 deletions

View file

@ -1,3 +1,11 @@
Fri Nov 18 13:03:38 2011 NAKAMURA Usaku <usa@ruby-lang.org>
* io.c (rb_cloexec_open): set O_NOINHERIT instead of O_CLOEXEC if it is
available (for Windows).
* win32/win32.c (fcntl): on F_DUPFD, determine the inheritance of the
new handle by O_NOINHERIT flag of original fd.
Fri Nov 18 08:00:41 2011 Ryan Davis <ryan@lust.zenspider.com>
* lib/minitest/*: Imported minitest 2.8.1 (r6750)

2
io.c
View file

@ -195,6 +195,8 @@ rb_cloexec_open(const char *pathname, int flags, mode_t mode)
#ifdef O_CLOEXEC
/* O_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */
flags |= O_CLOEXEC;
#elif defined O_NOINHERIT
flags |= O_NOINHERIT;
#endif
ret = open(pathname, flags, mode);
if (ret == -1) return -1;

View file

@ -3849,7 +3849,8 @@ fcntl(int fd, int cmd, ...)
int ret;
HANDLE hDup;
if (!(DuplicateHandle(GetCurrentProcess(), (HANDLE)_get_osfhandle(fd),
GetCurrentProcess(), &hDup, 0L, TRUE,
GetCurrentProcess(), &hDup, 0L,
!(_osfile(fd) & FNOINHERIT),
DUPLICATE_SAME_ACCESS))) {
errno = map_errno(GetLastError());
return -1;