Submitted By: Jim Gifford (patches at jg555 dot com)
Date: 2005-03-21
Initial Package Version: 18
Origin: Fedora
Upstream Status: Unknown
Description: Uses Sysconf to determine CPU information
 
diff -Naur procinfo-18.orig/procinfo.c procinfo-18/procinfo.c
--- procinfo-18.orig/procinfo.c	2001-02-25 11:29:16.000000000 +0000
+++ procinfo-18/procinfo.c	2005-03-22 00:21:43.000000000 +0000
@@ -249,6 +249,9 @@
 	    new.cpu_nice = VAL;
 	    new.cpu_sys = VAL;
 	    new.cpu_idle = VAL;
+	    new.cpu_iowait = VAL;
+	    new.cpu_irq = VAL;
+	    new.cpu_softirq = VAL;
 	    /*
 	     * according to bug #1959, sometimes the cpu_idle
 	     * seems to go backwards(!) on SMP boxes.  This may
@@ -373,7 +376,9 @@
 	putchar ('\n');
 
     printf ("system: %s %s",
-	    hms (bDIFF (cpu_sys)), perc (bDIFF (cpu_sys), elapsed, nr_cpus));
+	    hms (bDIFF (cpu_sys) + bDIFF (cpu_irq) + bDIFF (cpu_softirq)),
+	    perc (bDIFF (cpu_sys) + bDIFF (cpu_irq) + bDIFF (cpu_softirq),
+		elapsed, nr_cpus));
     printf ("  swap in :%9lu", bDIFF (swin));
     if (new.disk_r[2])
 	printf ("  disk 3: %8lur%8luw\n", bDIFF (disk_r[2]),
@@ -384,7 +389,8 @@
 	putchar ('\n');
 
     printf ("idle  : %s %s",
-	    hms (bDIFF (cpu_idle)), perc (bDIFF (cpu_idle), elapsed, nr_cpus));
+	    hms (bDIFF (cpu_idle) + bDIFF (cpu_iowait)),
+	    perc (bDIFF (cpu_idle) + bDIFF (cpu_iowait), elapsed, nr_cpus));
     printf ("  swap out:%9lu", bDIFF (swout));
     if (new.disk_r[3])
 	printf ("  disk 4: %8lur%8luw\n", bDIFF (disk_r[3]),
@@ -831,19 +837,7 @@
     }
 
     /* Count number of CPUs */
-    cpuinfofp = myfopen (PROC_DIR "cpuinfo");
-    if (cpuinfofp) {
-	while (fgets (line, sizeof (line), cpuinfofp))
-	    if (!strncmp ("processor", line, 9))          /* intel */
-		nr_cpus++;
-	    else if (!strncmp ("ncpus ", line, 6))  /* sparc */
-		nr_cpus = atoi(line+19);
-	    else if (!strncmp ("cpus detected", line, 13)) /* alpha */
-		nr_cpus = atoi(line+27);
-	fclose (cpuinfofp);
-    }
-    if (nr_cpus == 0)
-	nr_cpus = 1;
+    nr_cpus = sysconf (_SC_NPROCESSORS_ONLN);
 
     /* Gets called from winsz(), but in case stdout is redirected: */
     version = make_version (versionfp);
diff -Naur procinfo-18.orig/procinfo.h procinfo-18/procinfo.h
--- procinfo-18.orig/procinfo.h	2001-02-24 23:30:45.000000000 +0000
+++ procinfo-18/procinfo.h	2005-03-22 00:21:43.000000000 +0000
@@ -82,6 +82,7 @@
     long m_to, m_us, m_fr, m_sh, m_bu, m_ca;
     long s_to, s_us, s_fr;
     unsigned long cpu_user, cpu_nice, cpu_sys, cpu_idle;
+    unsigned long cpu_iowait, cpu_irq, cpu_softirq;
     unsigned long disk[5];
     unsigned long disk_r[5];
     unsigned long disk_w[5];
