From 04202dc83dde72db03d72227841c6dddbd41a925 Mon Sep 17 00:00:00 2001 From: kosaki Date: Sat, 30 Apr 2011 14:11:34 +0000 Subject: * win32/win32.c (rb_w32_fdcopy): New. This can copy even though fdset size exceed FD_SETSIZE. * include/ruby/intern.h (rb_fd_copy): use rb_w32_fdcopy() git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31397 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- win32/win32.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'win32') diff --git a/win32/win32.c b/win32/win32.c index 46c57dc47e..a7abbfb4a6 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -2366,6 +2366,18 @@ rb_w32_fdisset(int fd, fd_set *set) return ret; } +void +rb_w32_fdcopy(rb_fdset_t *dst, const rb_fdset_t *src) +{ + if (dst->capa < src->fdset->fd_count) { + dst->capa = (src->fdset->fd_count / FD_SETSIZE + 1) * FD_SETSIZE; + dst->fdset = xrealloc(dst->fdset, sizeof(unsigned int) + sizeof(SOCKET) * dst->capa); + } + + memcpy(dst->fdset->fd_array, src->fdset->fd_array, + src->fdset->fd_count * sizeof(src->fdset->fd_array[0])); +} + // // Networking trampolines // These are used to avoid socket startup/shutdown overhead in case -- cgit v1.2.3