summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Silva <r3pek@gentoo.org>2005-03-18 18:58:34 +0000
committerCarlos Silva <r3pek@gentoo.org>2005-03-18 18:58:34 +0000
commit98e6dbe22ea121cb7dee52597ab7e3fa7d2bf3d7 (patch)
treef4f8b090de637463fb743e84a840a58c744ca7e0
parentchangelog header fix (diff)
downloadgentoo-2-98e6dbe22ea121cb7dee52597ab7e3fa7d2bf3d7.tar.gz
gentoo-2-98e6dbe22ea121cb7dee52597ab7e3fa7d2bf3d7.tar.bz2
gentoo-2-98e6dbe22ea121cb7dee52597ab7e3fa7d2bf3d7.zip
Fixing bug #79754 thx to Arkadi Shishlov
(Portage version: 2.0.51.19)
-rw-r--r--app-admin/procinfo/ChangeLog8
-rw-r--r--app-admin/procinfo/files/cpu-usage-fix.patch31
-rw-r--r--app-admin/procinfo/files/digest-procinfo-18-r11
-rw-r--r--app-admin/procinfo/files/kernel-2.6.patch296
-rw-r--r--app-admin/procinfo/procinfo-18-r1.ebuild37
5 files changed, 372 insertions, 1 deletions
diff --git a/app-admin/procinfo/ChangeLog b/app-admin/procinfo/ChangeLog
index bd4849e6f79f..a651adb8b7cf 100644
--- a/app-admin/procinfo/ChangeLog
+++ b/app-admin/procinfo/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for app-admin/procinfo
# Copyright 2002-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-admin/procinfo/ChangeLog,v 1.10 2005/01/01 11:19:18 eradicator Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-admin/procinfo/ChangeLog,v 1.11 2005/03/18 18:58:33 r3pek Exp $
+
+*procinfo-18-r1 (18 Mar 2005)
+
+ 18 Mar 2005; Carlos Silva <r3pek@gentoo.org> +files/cpu-usage-fix.patch,
+ +files/kernel-2.6.patch, +procinfo-18-r1.ebuild:
+ Fixing bug #79754 thx to Arkadi Shishlov
06 Jun 2004; Daniel Black <dragonheart@gentoo.org> +metadata.xml,
procinfo-18.ebuild:
diff --git a/app-admin/procinfo/files/cpu-usage-fix.patch b/app-admin/procinfo/files/cpu-usage-fix.patch
new file mode 100644
index 000000000000..f2bace1bd2cc
--- /dev/null
+++ b/app-admin/procinfo/files/cpu-usage-fix.patch
@@ -0,0 +1,31 @@
+--- procinfo.c~ 2005-01-31 20:52:29.250918264 +0200
++++ procinfo-18/procinfo.c 2005-01-31 20:48:55.907351416 +0200
+@@ -402,26 +402,8 @@
+ }
+
+ elapsed = new.uptime;
+-
+-/* XXX Is this stuff still relevant/true? */
+-
+-#ifdef __i386__ /* IRQ 0 is timer tick on i386's... */
+- if (nr_irqs) {
+- if (fs && old.uptime)
+- elapsed = DIFF (intr[0]);
+- } else
+-#endif
+-#ifdef __sparc__ /* IRQ 10 is timer tick on sparc's... */
+- if (nr_irqs) {
+- if (fs && old.uptime)
+- elapsed = DIFF (intr[10]);
+- } else
+-#endif
+- {
+- /* This won't be exact... */
+- if (fs && old.uptime)
+- elapsed = DIFF (uptime);
+- }
++ if (fs && old.uptime)
++ elapsed = DIFF (uptime);
+
+ printf ("user : %s %s",
+ hms (bDIFF (cpu_user)), perc (bDIFF (cpu_user), elapsed, nr_cpus));
diff --git a/app-admin/procinfo/files/digest-procinfo-18-r1 b/app-admin/procinfo/files/digest-procinfo-18-r1
new file mode 100644
index 000000000000..355fe0072975
--- /dev/null
+++ b/app-admin/procinfo/files/digest-procinfo-18-r1
@@ -0,0 +1 @@
+MD5 27658d0a69040aca05a65b9888599d50 procinfo-18.tar.gz 24365
diff --git a/app-admin/procinfo/files/kernel-2.6.patch b/app-admin/procinfo/files/kernel-2.6.patch
new file mode 100644
index 000000000000..b1eef39e3088
--- /dev/null
+++ b/app-admin/procinfo/files/kernel-2.6.patch
@@ -0,0 +1,296 @@
+diff -ruN procinfo-18/procinfo.c procinfo-19/procinfo.c
+--- procinfo-18/procinfo.c 2001-02-25 11:29:16.000000000 +0000
++++ procinfo-19/procinfo.c 2004-06-17 10:28:33.767925439 +0100
+@@ -5,9 +5,10 @@
+ Displays general info from /proc.
+
+ Date: 1995-07-08 05:30:34
+- Last Change: 2001-02-25 00:27:21
++ Last Change: 2004-06-17 11:28:13
+
+ Copyright (c) 1994-2001 svm@kozmix.cistron.nl
++ Copyright (c) 2004 procinfo@meisel.cc (upgrades for 2.6 kernel)
+
+ This software is released under the GNU Public Licence. See the file
+ `COPYING' for details. Since you're probably running Linux I'm sure
+@@ -26,6 +27,7 @@
+ #include <string.h>
+ #include <termios.h>
+ #include <termcap.h>
++#include <ctype.h>
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/param.h> /* for HZ -- should be in <time.h> ? */
+@@ -72,9 +74,9 @@
+ int nr_irqs = 0;
+ int nr_cpus = 0;
+
+-FILE *loadavgfp, *meminfofp, *modulesfp, *statfp, *uptimefp,
++FILE *loadavgfp, *meminfofp, *modulesfp, *statfp, *uptimefp, *diskstatsfp,
+ *devicesfp, *filesystemsfp, *interruptsfp, *dmafp, *cmdlinefp,
+- *versionfp, *cpuinfofp;
++ *versionfp, *cpuinfofp, *vmstatfp;
+
+ char line[1024], cmdline[1024], booted[40], *version = NULL, *message = NULL;
+
+@@ -89,9 +91,13 @@
+ {
+ unsigned long elapsed;
+ char loadavg[32];
+- int i;
++ int i, havetwosix = 0, lastdisk;
+ static int have_m_c = -1; /* Do we have cache info? */
+ static int have_m_l = -1; /* Do we have new-style-one-datum-per-line? */
++ char devicename[10];
++ char *last;
++ unsigned int q,w,a,s,d,f,g,h,j,k,l,y,x;
++ int disk_counter = 0, ret;
+
+
+ /**** /proc/uptime ****/
+@@ -237,6 +243,50 @@
+
+ printf ("Bootup: %s Load average: %s\n\n", booted, loadavg);
+
++/**** /proc/vmstat ... 2.6.x kernel only ****/
++ if (vmstatfp) {
++ havetwosix = 1;
++ fseek (vmstatfp, 0L, SEEK_SET);
++ while (fgets (line, sizeof (line), vmstatfp)) {
++ char *type = strtok (line, " ");
++ if (ISSTR ("pgpgin")) {
++ new.pgin = VAL;
++ } else if (ISSTR ("pgpgout")) {
++ new.pgout = VAL;
++ } else if (ISSTR ("pgactivate")) {
++ new.pgac = VAL;
++ } else if (ISSTR ("pgdeactivate")) {
++ new.pgdeac = VAL;
++ } else if (ISSTR ("pgfault")) {
++ new.pgfault = VAL;
++ } else if (ISSTR ("pswpin")) {
++ new.swin = VAL;
++ } else if (ISSTR ("pswpout")) {
++ new.swout = VAL;
++ }
++ }
++ }
++
++/**** /proc/diskstats ... 2.6.x kernel only ****/
++ if (diskstatsfp) {
++ havetwosix = 1;
++ fseek (diskstatsfp, 0L, SEEK_SET);
++ while (fgets (line, sizeof (line), diskstatsfp)) {
++ char *type = strtok (line, "\n");
++ ret = sscanf (type, "%d%d%s%d%d%d%d%d%d%d%d%d%d%d", &q, &w, devicename, &a, &s, &d, &f, &g, &h, &j, &k, &l, &y, &x);
++ if (ret != 14) /* Everything with less than 14 elements is not a disk device */
++ continue;
++ last = devicename+strlen(devicename)-1;
++ if (isalpha(*last)) {/* Is the last char is a number ignore it .. like fd0 */
++ if (++disk_counter > 7) /* 7 disks is all we have room for */
++ continue;
++ else {
++ new.disk_r[disk_counter-1] = a;
++ new.disk_w[disk_counter-1] = g;
++ }
++ }
++ }
++ }
+
+ /**** /proc/stat ****/
+
+@@ -249,6 +299,9 @@
+ new.cpu_nice = VAL;
+ new.cpu_sys = VAL;
+ new.cpu_idle = VAL;
++ new.cpu_iowait = VAL;
++ new.cpu_hirq = VAL;
++ new.cpu_sirq = VAL;
+ /*
+ * according to bug #1959, sometimes the cpu_idle
+ * seems to go backwards(!) on SMP boxes. This may
+@@ -262,34 +315,54 @@
+ new.disk[1] = VAL;
+ new.disk[2] = VAL;
+ new.disk[3] = VAL;
++ new.disk[4] = VAL;
++ new.disk[5] = VAL;
++ new.disk[6] = VAL;
+ } else if (ISSTR ("disk_rio") && io_or_blk == 0) {
+ new.disk_r[0] = VAL;
+ new.disk_r[1] = VAL;
+ new.disk_r[2] = VAL;
+ new.disk_r[3] = VAL;
++ new.disk_r[4] = VAL;
++ new.disk_r[5] = VAL;
++ new.disk_r[6] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
+ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
+ new.disk_w[0] = VAL;
+ new.disk_w[1] = VAL;
+ new.disk_w[2] = VAL;
+ new.disk_w[3] = VAL;
++ new.disk_w[4] = VAL;
++ new.disk_w[5] = VAL;
++ new.disk_w[6] = VAL;
+ } else if (ISSTR ("disk_rblk") && io_or_blk == 1) {
+ new.disk_r[0] = VAL;
+ new.disk_r[1] = VAL;
+ new.disk_r[2] = VAL;
+ new.disk_r[3] = VAL;
++ new.disk_r[4] = VAL;
++ new.disk_r[5] = VAL;
++ new.disk_r[6] = VAL;
+ } else if (ISSTR ("disk_wblk") && io_or_blk == 1) {
+ new.disk_w[0] = VAL;
+ new.disk_w[1] = VAL;
+ new.disk_w[2] = VAL;
+ new.disk_w[3] = VAL;
++ new.disk_w[4] = VAL;
++ new.disk_w[5] = VAL;
++ new.disk_w[6] = VAL;
+ } else if (ISSTR ("disk_io:")) {
+- int disk_counter = 0, ret;
+ unsigned int q, w, e, r, t, y, u; /* I'm NOT in the mood today. */
+ char *barf;
+
+ while ((barf = strtok (NULL, " "))) {
+
+- if (++disk_counter > 4) /* 4 is all we have room for */
++ if (++disk_counter > 7) /* 7 is all we have room for */
+ continue;
+
+ ret = sscanf (barf, "(%d,%d):(%d,%d,%d,%d,%d)",
+@@ -374,7 +447,10 @@
+
+ printf ("system: %s %s",
+ hms (bDIFF (cpu_sys)), perc (bDIFF (cpu_sys), elapsed, nr_cpus));
+- printf (" swap in :%9lu", bDIFF (swin));
++ if (havetwosix)
++ printf (" page act:%9lu", bDIFF (pgac));
++ else
++ printf (" swap in :%9lu", bDIFF (swin));
+ if (new.disk_r[2])
+ printf (" disk 3: %8lur%8luw\n", bDIFF (disk_r[2]),
+ bDIFF (disk_w[2]));
+@@ -383,14 +459,53 @@
+ else
+ putchar ('\n');
+
++ if (havetwosix) {
++ printf ("IOwait: %s %s",
++ hms (bDIFF (cpu_iowait)), perc (bDIFF (cpu_iowait), elapsed, nr_cpus));
++ printf (" page dea:%9lu", bDIFF (pgdeac));
++ if (new.disk_r[3])
++ printf (" disk 4: %8lur%8luw\n", bDIFF (disk_r[3]),
++ bDIFF (disk_w[3]));
++ else if (new.disk[3])
++ printf (" disk 4: %8lu\n", bDIFF (disk[3]));
++ else
++ putchar ('\n');
++
++ printf ("hw irq: %s %s",
++ hms (bDIFF (cpu_hirq)), perc (bDIFF (cpu_hirq), elapsed, nr_cpus));
++ printf (" page flt:%9lu", bDIFF (pgfault));
++ if (new.disk_r[4])
++ printf (" disk 5: %8lur%8luw\n", bDIFF (disk_r[4]),
++ bDIFF (disk_w[4]));
++ else if (new.disk[4])
++ printf (" disk 5: %8lu\n", bDIFF (disk[4]));
++ else
++ putchar ('\n');
++
++ printf ("sw irq: %s %s",
++ hms (bDIFF (cpu_sirq)), perc (bDIFF (cpu_sirq), elapsed, nr_cpus));
++ printf (" swap in :%9lu", bDIFF (swin));
++ if (new.disk_r[5])
++ printf (" disk 6: %8lur%8luw\n", bDIFF (disk_r[5]),
++ bDIFF (disk_w[5]));
++ else if (new.disk[5])
++ printf (" disk 6: %8lu\n", bDIFF (disk[5]));
++ else
++ putchar ('\n');
++ }
++
+ printf ("idle : %s %s",
+ hms (bDIFF (cpu_idle)), perc (bDIFF (cpu_idle), elapsed, nr_cpus));
+ printf (" swap out:%9lu", bDIFF (swout));
+- if (new.disk_r[3])
+- printf (" disk 4: %8lur%8luw\n", bDIFF (disk_r[3]),
+- bDIFF (disk_w[3]));
+- else if (new.disk[3])
+- printf (" disk 4: %8lu\n", bDIFF (disk[3]));
++ if (havetwosix)
++ lastdisk = 3;
++ else
++ lastdisk = 6;
++ if (new.disk_r[lastdisk])
++ printf (" disk %d: %8lur%8luw\n", lastdisk+1, bDIFF (disk_r[lastdisk]),
++ bDIFF (disk_w[lastdisk]));
++ else if (new.disk[lastdisk])
++ printf (" disk %d: %8lu\n", lastdisk+1, bDIFF (disk[lastdisk]));
+ else
+ putchar ('\n');
+
+@@ -786,6 +901,8 @@
+ meminfofp = myfopen (PROC_DIR "meminfo");
+ statfp = myfopen (PROC_DIR "stat");
+ /* These may be missing, so check for NULL later. */
++ diskstatsfp = fopen (PROC_DIR "diskstats", "r");
++ vmstatfp = fopen (PROC_DIR "vmstat", "r");
+ modulesfp = fopen (PROC_DIR "modules", "r");
+ devicesfp = fopen (PROC_DIR "devices", "r");
+ filesystemsfp = fopen (PROC_DIR "filesystems", "r");
+@@ -990,6 +1107,9 @@
+ new.disk_r[1] = new.disk_w[1] =
+ new.disk_r[2] = new.disk_w[2] =
+ new.disk_r[3] = new.disk_w[3] = 0;
++ new.disk_r[4] = new.disk_w[4] = 0;
++ new.disk_r[5] = new.disk_w[5] = 0;
++ new.disk_r[6] = new.disk_w[6] = 0;
+ redrawn = 1;
+ message = io_or_blk ? "showing I/O in blocks" :
+ "showing I/O per requests";
+diff -ruN procinfo-18/procinfo.h procinfo-19/procinfo.h
+--- procinfo-18/procinfo.h 2001-02-24 23:30:45.000000000 +0000
++++ procinfo-19/procinfo.h 2004-06-17 09:24:16.511726412 +0100
+@@ -81,11 +81,11 @@
+ unsigned long uptime;
+ 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 disk[5];
+- unsigned long disk_r[5];
+- unsigned long disk_w[5];
+- unsigned long pgin, pgout, swin, swout;
++ unsigned long cpu_user, cpu_nice, cpu_sys, cpu_idle, cpu_iowait, cpu_hirq, cpu_sirq;
++ unsigned long disk[8];
++ unsigned long disk_r[8];
++ unsigned long disk_w[8];
++ unsigned long pgin, pgout, pgac, pgdeac, pgfault, swin, swout;
+ unsigned long *intr; /* Phew. That's better. */
+ unsigned long old_intr;
+ unsigned long ctxt;
+diff -ruN procinfo-18/routines.c procinfo-19/routines.c
+--- procinfo-18/routines.c 2001-02-24 23:30:45.000000000 +0000
++++ procinfo-19/routines.c 2004-06-16 16:36:51.000000000 +0100
+@@ -388,9 +388,13 @@
+ hms (unsigned long t)
+ {
+ unsigned int d, h, m, s;
++ unsigned long q;
+ static char buf[22];
+
+- t = t * 100 / HZ;
++ q = 100 / HZ; /* We need this because the libc does something funny here */
++ /* if we try to use: t = t * 100 / HZ; here! */
++ /* procinfo@meisel.cc 11. Feb. 2004 */
++ t = t * q;
+ d = (int) (t / 8640000);
+ t = t - (long) (d * 8640000);
+ h = (int) (t / 360000);
diff --git a/app-admin/procinfo/procinfo-18-r1.ebuild b/app-admin/procinfo/procinfo-18-r1.ebuild
new file mode 100644
index 000000000000..eeb102d95740
--- /dev/null
+++ b/app-admin/procinfo/procinfo-18-r1.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-admin/procinfo/procinfo-18-r1.ebuild,v 1.1 2005/03/18 18:58:33 r3pek Exp $
+
+inherit eutils
+
+DESCRIPTION="A utility to prettyprint /proc/*"
+SRC_URI="ftp://ftp.cistron.nl/pub/people/svm/${P}.tar.gz"
+HOMEPAGE="ftp://ftp.cistron.nl/pub/people/svm/"
+
+SLOT="0"
+LICENSE="GPL-2"
+KEYWORDS="x86 ppc sparc alpha hppa"
+IUSE=""
+DEPEND="sys-libs/ncurses"
+RDEPEND="dev-lang/perl"
+
+src_unpack() {
+ unpack ${A}
+ epatch ${FILESDIR}/kernel-2.6.patch.patch
+ epatch ${FILESDIR}/cpu-usage-fix.patch
+}
+
+src_compile() {
+ # -ltermcap is default and isn't available in gentoo
+ # but -lncurses works just as good
+ emake LDLIBS=-lncurses || die
+}
+
+src_install() {
+ dobin procinfo
+ newbin lsdev.pl lsdev
+ newbin socklist.pl socklist
+
+ doman *.8
+ dodoc README CHANGES
+}