summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/unix/sysv/linux/sysconf.c61
2 files changed, 40 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index c5a8c57507..d249c8fe03 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-03-28 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Handle
+ _SC_SIGQUEUE_MAX.
+
2004-03-26 Ulrich Drepper <drepper@redhat.com>
* elf/dl-caller.c: New file.
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);
}