aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/getsysstats.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-08-24 01:36:09 +0000
committerUlrich Drepper <drepper@redhat.com>2002-08-24 01:36:09 +0000
commit27692f89660541896c591236fea9714e72b5a811 (patch)
tree1f537990559c696ec5230fffbfd9a5e0a2288ae1 /sysdeps/unix/sysv/linux/getsysstats.c
parented5294d508443d0db343501d95c917193c4ea1f3 (diff)
downloadglibc-27692f89660541896c591236fea9714e72b5a811.tar
glibc-27692f89660541896c591236fea9714e72b5a811.tar.gz
glibc-27692f89660541896c591236fea9714e72b5a811.tar.bz2
glibc-27692f89660541896c591236fea9714e72b5a811.zip
Update.
* sysdeps/ieee754/dbl-64/e_pow.c (log1): Define and initialize two52 locally. (log2): Likewise. * sysdeps/ieee754/dbl-64/upow.h: Remove definition of two52. Patch by Simon Gee <simong@agile.tv>. * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs_conf): Prefer reading /proc/stat since it is more uniform across architectures.1 * manual/texinfo.tex: Update to latest official version.
Diffstat (limited to 'sysdeps/unix/sysv/linux/getsysstats.c')
-rw-r--r--sysdeps/unix/sysv/linux/getsysstats.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index bf39bd9661..f58e2e288a 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -1,5 +1,5 @@
/* Determine various system internal values, Linux version.
- Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+ Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -20,6 +20,7 @@
#include <alloca.h>
#include <assert.h>
+#include <ctype.h>
#include <errno.h>
#include <mntent.h>
#include <paths.h>
@@ -146,17 +147,37 @@ __get_nprocs ()
/* If we haven't found an appropriate entry return 1. */
if (proc_path != NULL)
{
- char *proc_cpuinfo = alloca (strlen (proc_path) + sizeof ("/cpuinfo"));
- __stpcpy (__stpcpy (proc_cpuinfo, proc_path), "/cpuinfo");
+ char *proc_fname = alloca (strlen (proc_path) + sizeof ("/cpuinfo"));
- fp = fopen (proc_cpuinfo, "r");
+ /* The /proc/stat format is more uniform, use it by default. */
+ __stpcpy (__stpcpy (proc_fname, proc_path), "/stat");
+
+ fp = fopen (proc_fname, "r");
if (fp != NULL)
{
/* No threads use this stream. */
__fsetlocking (fp, FSETLOCKING_BYCALLER);
- GET_NPROCS_PARSER (fp, buffer, result);
+
+ result = 0;
+ while (fgets_unlocked (buffer, sizeof (buffer), fp) != NULL)
+ if (strncmp (buffer, "cpu", 3) == 0 && isdigit (buffer[3]))
+ ++result;
+
fclose (fp);
}
+ else
+ {
+ __stpcpy (__stpcpy (proc_fname, proc_path), "/cpuinfo");
+
+ fp = fopen (proc_fname, "r");
+ if (fp != NULL)
+ {
+ /* No threads use this stream. */
+ __fsetlocking (fp, FSETLOCKING_BYCALLER);
+ GET_NPROCS_PARSER (fp, buffer, result);
+ fclose (fp);
+ }
+ }
}
return result;