aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/systat/vmstat.c
diff options
context:
space:
mode:
authorBruce Evans <bde@FreeBSD.org>2006-04-30 01:39:46 +0000
committerBruce Evans <bde@FreeBSD.org>2006-04-30 01:39:46 +0000
commit4545c62547a98e7143f9111afdad0d3355e8dee5 (patch)
tree764f86128eed21c45623b4340b3d7f78dd74f7a9 /usr.bin/systat/vmstat.c
parent18d3a03e137cb205268efb7309ebe0bc8692b3e7 (diff)
downloadsrc-4545c62547a98e7143f9111afdad0d3355e8dee5.tar.gz
src-4545c62547a98e7143f9111afdad0d3355e8dee5.zip
Edit the interrupt name strings to shorten them. This is believed to
only affect amd64 and i386. alpha uses "intr N" instead of "irqN" and mostly has no device names. ia64 uses only device names. - Edit interrupt names once after they are read from the kernel and not every time they are displayed. - Discard bogus trailing spaces so that the next step doesn't move things to oblivion. - If an interrupt name starts with "irqN:" (as it usually does in on amd64 and i386), then move "irqN" to the end and strip ":", since we have no space for the ":" and don't want to start descriptions with "N" after stripping "irq" in the next step (since "N" would look like a count). This step may need reworking for interrupt names containing several device names -- then moving the irq number to the end would lose it instead of losing some device names. - Remove "irq" from an interrupt name if and only if the original name is too long to display.
Notes
Notes: svn path=/head/; revision=158154
Diffstat (limited to 'usr.bin/systat/vmstat.c')
-rw-r--r--usr.bin/systat/vmstat.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/usr.bin/systat/vmstat.c b/usr.bin/systat/vmstat.c
index 20583c94eea9..4e0d59bd1fee 100644
--- a/usr.bin/systat/vmstat.c
+++ b/usr.bin/systat/vmstat.c
@@ -207,7 +207,7 @@ closekre(w)
int
initkre()
{
- char *intrnamebuf, *cp;
+ char *cp, *cp1, *cp2, *intrnamebuf, *nextcp;
int i;
size_t sz;
@@ -249,8 +249,39 @@ initkre()
return(0);
}
for (cp = intrnamebuf, i = 0; i < nintr; i++) {
+ nextcp = cp + strlen(cp) + 1;
+
+ /* Discard trailing spaces. */
+ for (cp1 = nextcp - 1; cp1 > cp && *(cp1 - 1) == ' '; )
+ *--cp1 = '\0';
+
+ /* Convert "irqN: name" to "name irqN". */
+ if (strncmp(cp, "irq", 3) == 0) {
+ cp1 = cp + 3;
+ while (isdigit((u_char)*cp1))
+ cp1++;
+ if (cp1 != cp && *cp1 == ':' &&
+ *(cp1 + 1) == ' ') {
+ *cp1 = '\0';
+ cp1 = cp1 + 2;
+ cp2 = strdup(cp);
+ bcopy(cp1, cp, strlen(cp1) + 1);
+ strcat(cp, " ");
+ strcat(cp, cp2);
+ free(cp2);
+ }
+ }
+
+ /*
+ * Convert "name irqN" to "name N" if the former is
+ * longer than the field width.
+ */
+ if ((cp1 = strstr(cp, "irq")) != NULL &&
+ strlen(cp) > 10)
+ bcopy(cp1 + 3, cp1, strlen(cp1 + 3) + 1);
+
intrname[i] = cp;
- cp += strlen(cp) + 1;
+ cp = nextcp;
}
nextintsrow = INTSROW + 2;
allocinfo(&s);