From e044081627316cb1a1a76cd296d210cfa2cc2ebc Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Thu, 19 Sep 1996 12:54:15 +0000 Subject: Replace with FSF version. --- lib/getloadavg.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/lib/getloadavg.c b/lib/getloadavg.c index bd024cf20..2411e6a92 100644 --- a/lib/getloadavg.c +++ b/lib/getloadavg.c @@ -43,6 +43,7 @@ DGUX eunice UNIX emulator under VMS. hpux + MSDOS No-op for MSDOS. NeXT sgi sequent Sequent Dynix 3.x.x (BSD) @@ -51,6 +52,7 @@ UMAX UMAX4_3 VMS + WIN32 No-op for Windows95/NT. __linux__ Linux: assumes /proc filesystem mounted. Support from Michael K. Johnson. __NetBSD__ NetBSD: assumes /kern filesystem mounted. @@ -139,7 +141,7 @@ extern int errno; #define decstation #endif -#if (defined(sun) || defined(__sun)) && defined(SVR4) +#if (defined(sun) && defined(SVR4)) || defined (SOLARIS2) #define SUNOS_5 #endif @@ -168,7 +170,7 @@ extern int errno; #define LOAD_AVE_TYPE long #endif -#if defined(sun) || defined(__sun) +#ifdef sun #define LOAD_AVE_TYPE long #endif @@ -284,7 +286,7 @@ extern int errno; #define NLIST_STRUCT #endif -#if defined(sun) || defined(__sun) +#ifdef sun #define NLIST_STRUCT #endif @@ -389,6 +391,7 @@ extern int errno; #ifdef SUNOS_5 #include #include +#include #endif #ifndef KERNEL_FILE @@ -514,6 +517,50 @@ getloadavg (loadavg, nelem) elem = -1; #endif +#if !defined (LDAV_DONE) && defined (SUNOS_5) +/* Use libkstat because we don't have to be root. */ +#define LDAV_DONE + kstat_ctl_t *kc; + kstat_t *ksp; + kstat_named_t *kn; + + kc = kstat_open (); + if (kc == 0) return -1; + ksp = kstat_lookup (kc, "unix", 0, "system_misc"); + if (ksp == 0 ) return -1; + if (kstat_read (kc, ksp, 0) == -1) return -1; + + + kn = kstat_data_lookup (ksp, "avenrun_1min"); + if (kn == 0) + { + /* Return -1 if no load average information is available. */ + nelem = 0; + elem = -1; + } + + if (nelem >= 1) + loadavg[elem++] = (double) kn->value.ul/FSCALE; + + if (nelem >= 2) + { + kn = kstat_data_lookup (ksp, "avenrun_5min"); + if (kn != 0) + { + loadavg[elem++] = (double) kn->value.ul/FSCALE; + + if (nelem >= 3) + { + kn = kstat_data_lookup (ksp, "avenrun_15min"); + if (kn != 0) + loadavg[elem++] = (double) kn->value.ul/FSCALE; + } + } + } + + kstat_close (kc); +#endif /* SUNOS_5 */ + #if !defined (LDAV_DONE) && defined (__linux__) #define LDAV_DONE #undef LOAD_AVE_TYPE @@ -733,11 +780,11 @@ getloadavg (loadavg, nelem) : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale)); #endif /* OSF_MIPS */ -#if !defined (LDAV_DONE) && defined(MSDOS) +#if !defined (LDAV_DONE) && (defined (MSDOS) || defined (WIN32)) #define LDAV_DONE /* A faithful emulation is going to have to be saved for a rainy day. */ - for ( ; elem < nelem; elem++) + for ( ; elem < nelem; elem++) { loadavg[elem] = 0.0; } @@ -866,7 +913,7 @@ getloadavg (loadavg, nelem) /* We pass 0 for the kernel, corefile, and swapfile names to use the currently running kernel. */ kd = kvm_open (0, 0, 0, O_RDONLY, 0); - if (kd != 0) + if (kd != 0) { /* nlist the currently running kernel. */ kvm_nlist (kd, nl); -- cgit v1.2.3-54-g00ecf