> Below is a trivial patch that fixes the warning on MinGW. The patch succe=
ssfully builds and tests with MinGW and Windows SDK on Win7 32bit. When bui=
lding on Arch Linux, the patched build gives the same `make test && make te=
st-all` results (6 errors, 45 skips) as an unpatched build. In all other us=
es in `thread.c` (except for `rb_fd_rcopy`) the `rb_fd_max` macro generates=
 a `size_t` object. From what I can tell, use cases are all unsigned int's.
>
> diff --git a/thread.c b/thread.c
> index d9fe5506..0b48061 100644
> --- a/thread.c
> +++ b/thread.c
> @@ -2463,7 +2463,7 @@ rb_fd_init_copy(rb_fdset_t *dst, rb_fdset_t *src)
> =A0static void
> =A0rb_fd_rcopy(fd_set *dst, rb_fdset_t *src)
> =A0{
> - =A0 =A0int max =3D rb_fd_max(src);
> + =A0 =A0size_t max =3D rb_fd_max(src);
>
> =A0 =A0 /* we assume src is the result of select() with dst, so dst shoul=
d be
> =A0 =A0 =A0* larger or equal than src. */

I think rb_fd_max() should return int. Is there any possibility that
fdset->fd_count overflow signed int?

Moreover Windows fd_set::fd_count has u_int type if a documentation is
correct (I saw http://msdn.microsoft.com/en-us/library/windows/desktop/ms73=
7873(v=3Dvs.85).aspx)
and  size_t is not an alias of u_int.