about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--sysdeps/unix/sysv/linux/getsysstats.c36
1 files changed, 4 insertions, 32 deletions
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index d1ea074f0d..064eaa08ae 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -19,7 +19,6 @@
 #include <array_length.h>
 #include <assert.h>
 #include <ctype.h>
-#include <dirent.h>
 #include <errno.h>
 #include <ldsodefs.h>
 #include <limits.h>
@@ -136,7 +135,7 @@ get_nproc_stat (void)
 }
 
 static int
-get_nprocs_cpu_online (void)
+read_sysfs_file (const char *fname)
 {
   enum { buffer_size = 1024 };
   char buffer[buffer_size];
@@ -146,7 +145,7 @@ get_nprocs_cpu_online (void)
 
   const int flags = O_RDONLY | O_CLOEXEC;
   /* This file contains comma-separated ranges.  */
-  int fd = __open_nocancel ("/sys/devices/system/cpu/online", flags);
+  int fd = __open_nocancel (fname, flags);
   char *l;
   int result = 0;
   if (fd != -1)
@@ -191,31 +190,6 @@ get_nprocs_cpu_online (void)
 }
 
 static int
-get_nprocs_cpu (void)
-{
-  int count = 0;
-  DIR *dir = __opendir ("/sys/devices/system/cpu");
-  if (dir != NULL)
-    {
-      struct dirent64 *d;
-
-      while ((d = __readdir64 (dir)) != NULL)
-	/* NB: the sysfs has d_type support.  */
-	if (d->d_type == DT_DIR && strncmp (d->d_name, "cpu", 3) == 0)
-	  {
-	    char *endp;
-	    unsigned long int nr = strtoul (d->d_name + 3, &endp, 10);
-	    if (nr != ULONG_MAX && endp != d->d_name + 3 && *endp == '\0')
-	      ++count;
-	  }
-
-      __closedir (dir);
-
-    }
-  return count;
-}
-
-static int
 get_nprocs_fallback (void)
 {
   int result;
@@ -239,8 +213,7 @@ get_nprocs_fallback (void)
 int
 __get_nprocs (void)
 {
-  /* Try /sys/devices/system/cpu/online first.  */
-  int result = get_nprocs_cpu_online ();
+  int result = read_sysfs_file ("/sys/devices/system/cpu/online");
   if (result != 0)
     return result;
 
@@ -255,8 +228,7 @@ weak_alias (__get_nprocs, get_nprocs)
 int
 __get_nprocs_conf (void)
 {
-  /* Try /sys/devices/system/cpu/ first.  */
-  int result = get_nprocs_cpu ();
+  int result = read_sysfs_file ("/sys/devices/system/cpu/possible");
   if (result != 0)
     return result;