From 3bd1aa475df61ad8f14bb9af929dcac4a2de81c8 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 28 Mar 2004 10:55:26 +0000 Subject: Update. 2004-03-28 Ulrich Drepper * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Handle _SC_SIGQUEUE_MAX. --- sysdeps/unix/sysv/linux/sysconf.c | 61 ++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 26 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c index 6fae5590f5..de07e8062f 100644 --- a/sysdeps/unix/sysv/linux/sysconf.c +++ b/sysdeps/unix/sysv/linux/sysconf.c @@ -32,6 +32,8 @@ static long int posix_sysconf (int name); long int __sysconf (int name) { + const char *procfname = NULL; + switch (name) { #ifdef __NR_clock_getres @@ -47,37 +49,44 @@ __sysconf (int name) #endif case _SC_NGROUPS_MAX: - { - /* Try to read the information from the /proc/sys/kernel/ngroups_max - file. */ - int fd = open_not_cancel_2 ("/proc/sys/kernel/ngroups_max", O_RDONLY); - if (fd != -1) - { - /* This is more than enough, the file contains a single - integer. */ - char buf[32]; - ssize_t n; - n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, - sizeof (buf) - 1)); - close_not_cancel_no_status (fd); - - if (n > 0) - { - /* Terminate the string. */ - buf[n] = '\0'; - - char *endp; - long int res = strtol (buf, &endp, 10); - if (endp != buf && (*endp == '\0' || *endp == '\n')) - return res; - } - } - } + /* Try to read the information from the /proc/sys/kernel/ngroups_max + file. */ + procfname = "/proc/sys/kernel/ngroups_max"; + break; + + case _SC_SIGQUEUE_MAX: + /* The /proc/sys/kernel/rtsig-max file contains the answer. */ + procfname = "/proc/sys/kernel/rtsig-max"; break; default: break; } + + if (procfname != NULL) + { + int fd = open_not_cancel_2 (procfname, O_RDONLY); + if (fd != -1) + { + /* This is more than enough, the file contains a single integer. */ + char buf[32]; + ssize_t n; + n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, sizeof (buf) - 1)); + close_not_cancel_no_status (fd); + + if (n > 0) + { + /* Terminate the string. */ + buf[n] = '\0'; + + char *endp; + long int res = strtol (buf, &endp, 10); + if (endp != buf && (*endp == '\0' || *endp == '\n')) + return res; + } + } + } + return posix_sysconf (name); } -- cgit 1.4.1