getdtablesize always crashes, because gnulib's implementation is playing games with _setmaxstdio.
This fixes it. 2011-09-23 Bruno Haible <br...@clisp.org> getdtablesize: Support for MSVC 9. * lib/getdtablesize.c: Include msvc-inval.h. (_setmaxstdio_nothrow): New function. (_setmaxstdio): Redefine it. * m4/getdtablesize.m4 (gl_PREREQ_GETDTABLESIZE): New macro. * modules/getdtablesize (Depends-on): Add msvc-inval. (configure.ac): Invoke gl_PREREQ_GETDTABLESIZE. --- lib/getdtablesize.c.orig Sat Sep 24 01:43:07 2011 +++ lib/getdtablesize.c Sat Sep 24 01:40:44 2011 @@ -24,6 +24,29 @@ #include <stdio.h> +#include "msvc-inval.h" + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static inline int +_setmaxstdio_nothrow (int newmax) +{ + int result; + + TRY_MSVC_INVAL + { + result = _setmaxstdio (newmax); + } + CATCH_MSVC_INVAL + { + result = -1; + } + DONE_MSVC_INVAL; + + return result; +} +# define _setmaxstdio _setmaxstdio_nothrow +#endif + /* Cache for the previous getdtablesize () result. */ static int dtablesize; --- m4/getdtablesize.m4.orig Sat Sep 24 01:43:07 2011 +++ m4/getdtablesize.m4 Sat Sep 24 01:42:43 2011 @@ -1,4 +1,4 @@ -# getdtablesize.m4 serial 2 +# getdtablesize.m4 serial 3 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -12,3 +12,8 @@ HAVE_GETDTABLESIZE=0 fi ]) + +# Prerequisites of lib/getdtablesize.c. +AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [ + AC_REQUIRE([AC_C_INLINE]) +]) --- modules/getdtablesize.orig Sat Sep 24 01:43:07 2011 +++ modules/getdtablesize Sat Sep 24 01:42:43 2011 @@ -7,11 +7,13 @@ Depends-on: unistd +msvc-inval [test $HAVE_GETDTABLESIZE = 0] configure.ac: gl_FUNC_GETDTABLESIZE if test $HAVE_GETDTABLESIZE = 0; then AC_LIBOBJ([getdtablesize]) + gl_PREREQ_GETDTABLESIZE fi gl_UNISTD_MODULE_INDICATOR([getdtablesize]) -- In memoriam Ghazala Khan <http://en.wikipedia.org/wiki/Ghazala_Khan>