This is a low-hanging fruit. But it allows to simplify the posix_spawn_* modules a bit.
2008-10-05 Bruno Haible <[EMAIL PROTECTED]> New module 'getdtablesize'. * lib/unistd.in.h (getdtablesize): New declaration. * lib/getdtablesize.c: New file. * m4/getdtablesize.m4: New file. * modules/getdtablesize: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETDTABLESIZE, HAVE_GETDTABLESIZE. * modules/unistd (Makefile.am): Substitute GNULIB_GETDTABLESIZE, HAVE_GETDTABLESIZE. * doc/glibc-functions/getdtablesize.texi: Mention the new module. ========================== lib/getdtablesize.c =============================== /* getdtablesize() function for platforms that don't have it. Copyright (C) 2008 Free Software Foundation, Inc. Written by Bruno Haible <[EMAIL PROTECTED]>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ #include <stdio.h> int getdtablesize (void) { return _getmaxstdio (); } #endif ========================== m4/getdtablesize.m4 =============================== # getdtablesize.m4 serial 1 dnl Copyright (C) 2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETDTABLESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize != yes; then HAVE_GETDTABLESIZE=0 AC_LIBOBJ([getdtablesize]) fi ]) ========================= modules/getdtablesize ============================== Description: getdtablesize() function: return maximum number of file descriptors. Files: lib/getdtablesize.c m4/getdtablesize.m4 Depends-on: unistd configure.ac: gl_FUNC_GETDTABLESIZE gl_UNISTD_MODULE_INDICATOR([getdtablesize]) Makefile.am: Include: <unistd.h> License: LGPL Maintainer: Bruno Haible ============================================================================== *** lib/unistd.in.h.orig 2008-10-05 16:48:17.000000000 +0200 --- lib/unistd.in.h 2008-10-05 16:29:47.000000000 +0200 *************** *** 201,206 **** --- 201,220 ---- #endif + #if @GNULIB_GETDTABLESIZE@ + # if [EMAIL PROTECTED]@ + /* Return the maximum number of file descriptors in the current process. */ + extern int getdtablesize (void); + # endif + #elif defined GNULIB_POSIXCHECK + # undef getdtablesize + # define getdtablesize() \ + (GL_LINK_WARNING ("getdtablesize is unportable - " \ + "use gnulib module getdtablesize for portability"), \ + getdtablesize ()) + #endif + + #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. *** m4/unistd_h.m4.orig 2008-10-05 16:48:17.000000000 +0200 --- m4/unistd_h.m4 2008-10-05 16:27:17.000000000 +0200 *************** *** 1,4 **** ! # unistd_h.m4 serial 12 dnl Copyright (C) 2006-2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, --- 1,4 ---- ! # unistd_h.m4 serial 13 dnl Copyright (C) 2006-2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, *************** *** 39,44 **** --- 39,45 ---- GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) + GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) *************** *** 51,56 **** --- 52,58 ---- HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) + HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) *** modules/unistd.orig 2008-10-05 16:48:17.000000000 +0200 --- modules/unistd 2008-10-05 16:26:29.000000000 +0200 *************** *** 31,36 **** --- 31,37 ---- -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \ -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \ -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \ + -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \ -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \ -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \ -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \ *************** *** 42,47 **** --- 43,49 ---- -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ *** doc/glibc-functions/getdtablesize.texi.orig 2008-10-05 16:48:16.000000000 +0200 --- doc/glibc-functions/getdtablesize.texi 2008-10-05 16:25:29.000000000 +0200 *************** *** 2,16 **** @subsection @code{getdtablesize} @findex getdtablesize ! Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize - @item - This function is missing on some platforms: - mingw. @end itemize --- 2,16 ---- @subsection @code{getdtablesize} @findex getdtablesize ! Gnulib module: getdtablesize Portability problems fixed by Gnulib: @itemize + @item + This function is missing on some platforms: + mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize