about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-03-28 10:55:26 +0000
committerUlrich Drepper <drepper@redhat.com>2004-03-28 10:55:26 +0000
commit3bd1aa475df61ad8f14bb9af929dcac4a2de81c8 (patch)
treedb666858fadbbd41484ee14cd5c2500ca77f4d9f
parenteec8b6cae586451deadf30c371f7b5e4c9d573d1 (diff)
downloadglibc-3bd1aa475df61ad8f14bb9af929dcac4a2de81c8.tar.gz
glibc-3bd1aa475df61ad8f14bb9af929dcac4a2de81c8.tar.xz
glibc-3bd1aa475df61ad8f14bb9af929dcac4a2de81c8.zip
Update.
2004-03-28  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Handle
	_SC_SIGQUEUE_MAX.
-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);
 }