From d024596d616ed20e04dcfacc06bd77d8d1e2b64b Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 25 Feb 2004 23:28:54 +0000 Subject: Update. 2004-02-25 Ulrich Drepper * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Handle _SC_NGROUPS_MAX. --- ChangeLog | 5 +++++ sysdeps/unix/sysv/linux/sysconf.c | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b2ceca72c3..bd2edacdcd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-02-25 Ulrich Drepper + + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Handle + _SC_NGROUPS_MAX. + 2004-02-23 Jakub Jelinek * wcsmbs/mbrtowc.c (__mbrtowc): Cap s + n at the end of address space. diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c index e07c502cc3..842c8794d0 100644 --- a/sysdeps/unix/sysv/linux/sysconf.c +++ b/sysdeps/unix/sysv/linux/sysconf.c @@ -1,5 +1,5 @@ /* Get file-specific information about a file. Linux version. - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2004 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 @@ -17,6 +17,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include #include #include #include @@ -46,7 +47,40 @@ __sysconf (int name) } #endif + case _SC_NGROUPS_MAX: + { + /* Try to read the information from the /proc/sys/kernel/ngroups_max + file. */ + int fd = __open ("/proc/sys/kernel/ngroups_max", O_RDONLY); + if (fd != -1) + { + /* This is more than enough, the file contains a single + integer. */ + char buf[32]; + long int res = -1l; + + ssize_t n = __read (fd, buf, sizeof (buf) - 1); + if (n > 0) + { + /* Terminate the string. */ + buf[n] = '\0'; + + char *endp; + res = strtol (buf, &endp, 10); + if (endp == buf || (*endp != '\0' && *endp != '\n')) + res = -1l; + } + + __close (fd); + + if (res != -1) + return res; + } + } + break; + default: - return posix_sysconf (name); + break; } + return posix_sysconf (name); } -- cgit v1.2.3