зеркало из https://github.com/github/ruby.git
* include/ruby/win32.h, win32/win32.c (rb_w32_is_valid_fd): new function
to validate fd. * io.c (rb_io_initialize): check fd with above function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21734 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
7e4ca52669
Коммит
a3e8d63a75
|
@ -1,3 +1,10 @@
|
|||
Thu Jan 22 15:54:02 2009 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* include/ruby/win32.h, win32/win32.c (rb_w32_is_valid_fd): new function
|
||||
to validate fd.
|
||||
|
||||
* io.c (rb_io_initialize): check fd with above function.
|
||||
|
||||
Thu Jan 22 14:53:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* test/ruby/test_process.rb (MANDATORY_ENVS): needs RUBYLIB to run
|
||||
|
|
|
@ -214,6 +214,7 @@ extern int WSAAPI rb_w32_connect(int, const struct sockaddr *, int);
|
|||
extern void rb_w32_fdset(int, fd_set*);
|
||||
extern void rb_w32_fdclr(int, fd_set*);
|
||||
extern int rb_w32_fdisset(int, fd_set*);
|
||||
extern int rb_w32_is_valid_fd(int);
|
||||
extern int WSAAPI rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
|
||||
extern int WSAAPI rb_w32_getpeername(int, struct sockaddr *, int *);
|
||||
extern int WSAAPI rb_w32_getsockname(int, struct sockaddr *, int *);
|
||||
|
|
6
io.c
6
io.c
|
@ -5971,13 +5971,15 @@ rb_io_initialize(int argc, VALUE *argv, VALUE io)
|
|||
fd = NUM2INT(fnum);
|
||||
if (fstat(fd, &st) == -1) rb_sys_fail(0);
|
||||
UPDATE_MAXFD(fd);
|
||||
if (NIL_P(vmode)) {
|
||||
#if defined(HAVE_FCNTL) && defined(F_GETFL)
|
||||
if (NIL_P(vmode)) {
|
||||
oflags = fcntl(fd, F_GETFL);
|
||||
if (oflags == -1) rb_sys_fail(0);
|
||||
fmode = rb_io_oflags_fmode(oflags);
|
||||
#endif
|
||||
}
|
||||
#elif defined(_WIN32)
|
||||
if (rb_w32_is_valid_fd(fd)) rb_sys_fail(0);
|
||||
#endif
|
||||
MakeOpenFile(io, fp);
|
||||
fp->fd = fd;
|
||||
fp->mode = fmode;
|
||||
|
|
|
@ -1836,6 +1836,15 @@ rb_w32_open_osfhandle(intptr_t osfhandle, int flags)
|
|||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
rb_w32_is_valid_fd(int fd)
|
||||
{
|
||||
if (_get_osfhandle(fd) == -1)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
#undef getsockopt
|
||||
|
||||
static int
|
||||
|
|
Загрузка…
Ссылка в новой задаче