From 6efcc54c2e36359f1dba448b66821afae7255ef9 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 5 Oct 2008 16:51:07 +0200 Subject: [PATCH] New module 'getdtablesize'. --- ChangeLog | 13 +++++++++++++ doc/glibc-functions/getdtablesize.texi | 8 ++++---- lib/getdtablesize.c | 33 +++++++++++++++++++++++++++++++++ lib/unistd.in.h | 14 ++++++++++++++ m4/getdtablesize.m4 | 15 +++++++++++++++ m4/unistd_h.m4 | 4 +++- modules/getdtablesize | 25 +++++++++++++++++++++++++ modules/unistd | 2 ++ 8 files changed, 109 insertions(+), 5 deletions(-) create mode 100644 lib/getdtablesize.c create mode 100644 m4/getdtablesize.m4 create mode 100644 modules/getdtablesize diff --git a/ChangeLog b/ChangeLog index d6f6d9b2b..2388852b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2008-10-05 Bruno Haible + 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. + +2008-10-05 Bruno Haible + * modules/sched (Makefile.am): Fix typo. 2008-10-05 Jim Meyering diff --git a/doc/glibc-functions/getdtablesize.texi b/doc/glibc-functions/getdtablesize.texi index 10ff699c1..26776df62 100644 --- a/doc/glibc-functions/getdtablesize.texi +++ b/doc/glibc-functions/getdtablesize.texi @@ -2,15 +2,15 @@ @subsection @code{getdtablesize} @findex getdtablesize -Gnulib module: --- +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 -@item -This function is missing on some platforms: -mingw. @end itemize diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c new file mode 100644 index 000000000..a348cdd16 --- /dev/null +++ b/lib/getdtablesize.c @@ -0,0 +1,33 @@ +/* getdtablesize() function for platforms that don't have it. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 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 . */ + +#include + +/* Specification. */ +#include + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +#include + +int +getdtablesize (void) +{ + return _getmaxstdio (); +} + +#endif diff --git a/lib/unistd.in.h b/lib/unistd.in.h index 71eaa4d7f..82b1f0a81 100644 --- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -201,6 +201,20 @@ extern char * getcwd (char *buf, size_t size); #endif +#if @GNULIB_GETDTABLESIZE@ +# if !@HAVE_GETDTABLESIZE@ +/* 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. diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4 new file mode 100644 index 000000000..3237744f6 --- /dev/null +++ b/m4/getdtablesize.m4 @@ -0,0 +1,15 @@ +# 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 +]) diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4 index 9e9a56b33..e6eb045ca 100644 --- a/m4/unistd_h.m4 +++ b/m4/unistd_h.m4 @@ -1,4 +1,4 @@ -# unistd_h.m4 serial 12 +# 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,6 +39,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS], 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,6 +52,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS], 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]) diff --git a/modules/getdtablesize b/modules/getdtablesize new file mode 100644 index 000000000..dd7f855ae --- /dev/null +++ b/modules/getdtablesize @@ -0,0 +1,25 @@ +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: + + +License: +LGPL + +Maintainer: +Bruno Haible + diff --git a/modules/unistd b/modules/unistd index efd97b594..492f88f12 100644 --- a/modules/unistd +++ b/modules/unistd @@ -31,6 +31,7 @@ unistd.h: unistd.in.h -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,6 +43,7 @@ unistd.h: unistd.in.h -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' \ -- 2.11.0