diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | include/sys/sysinfo.h | 3 | ||||
-rw-r--r-- | posix/Makefile | 3 | ||||
-rw-r--r-- | posix/get_child_max.c | 29 | ||||
-rw-r--r-- | sysdeps/posix/sysconf.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/get_child_max.c | 37 |
6 files changed, 81 insertions, 4 deletions
@@ -1,5 +1,12 @@ 2006-01-08 Roland McGrath <roland@redhat.com> + [BZ #1535] + * sysdeps/unix/get_child_max.c: New file. + * posix/get_child_max.c: New file. + * posix/Makefile (routines): Add it. + * include/sys/sysinfo.h (__get_child_max): Declare it. + * sysdeps/posix/sysconf.c (__sysconf) [! CHILD_MAX]: Use it. + * sysdeps/unix/sysv/linux/futimes.c [!__NR_fcntl && __NR_fcntl64]: Use fcntl64 syscall instead. diff --git a/include/sys/sysinfo.h b/include/sys/sysinfo.h index e126bcb..d33055a 100644 --- a/include/sys/sysinfo.h +++ b/include/sys/sysinfo.h @@ -15,4 +15,7 @@ extern long int __get_phys_pages (void); /* Return number of available physical pages of memory in the system. */ extern long int __get_avphys_pages (void); +/* Return maximum number of processes this real user ID can have. */ +extern long int __get_child_max (void); + #endif /* sys/sysinfo.h */ diff --git a/posix/Makefile b/posix/Makefile index 32326c5..99ae128 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -65,7 +65,8 @@ routines := \ spawnattr_getpgroup spawnattr_setpgroup spawn spawnp spawni \ spawnattr_getsigmask spawnattr_getschedpolicy spawnattr_getschedparam \ spawnattr_setsigmask spawnattr_setschedpolicy spawnattr_setschedparam \ - posix_madvise + posix_madvise \ + get_child_max include ../Makeconfig diff --git a/posix/get_child_max.c b/posix/get_child_max.c new file mode 100644 index 0000000..dd68d91 --- /dev/null +++ b/posix/get_child_max.c @@ -0,0 +1,29 @@ +/* Get POSIX {CHILD_MAX} run-time limit value. Stub version (no limit). + Copyright (C) 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <limits.h> +#include <sys/sysinfo.h> + +#ifndef CHILD_MAX +long int +__get_child_max (void) +{ + return -1; +} +#endif diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c index de72e84..cb5137c 100644 --- a/sysdeps/posix/sysconf.c +++ b/sysdeps/posix/sysconf.c @@ -1,5 +1,5 @@ -/* Copyright (C) 1991,1993,1995-1997,1999-2003,2004 - Free Software Foundation, Inc. +/* Copyright (C) 1991,1993,1995-1997,1999-2003,2004,2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -68,7 +68,7 @@ __sysconf (name) #ifdef CHILD_MAX return CHILD_MAX; #else - return -1; + return __get_child_max (); #endif case _SC_CLK_TCK: diff --git a/sysdeps/unix/get_child_max.c b/sysdeps/unix/get_child_max.c new file mode 100644 index 0000000..c59e4d8 --- /dev/null +++ b/sysdeps/unix/get_child_max.c @@ -0,0 +1,37 @@ +/* Get POSIX {CHILD_MAX} run-time limit value. Unix version. + Copyright (C) 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <limits.h> +#include <sys/sysinfo.h> +#include <sys/resource.h> + +#ifndef CHILD_MAX +long int +__get_child_max (void) +{ +# ifdef RLIMIT_NPROC + struct rlimit limit; + if (__getrlimit (RLIMIT_NPROC, &limit) == 0 + && limit.rlim_cur != RLIM_INFINITY) + return limit.rlim_cur; +# endif + + return -1; +} +#endif |