diff options
author | jdolecek <jdolecek@pkgsrc.org> | 2001-09-22 14:51:49 +0000 |
---|---|---|
committer | jdolecek <jdolecek@pkgsrc.org> | 2001-09-22 14:51:49 +0000 |
commit | e761df1f5d09e40eb8433d8db8ec1f142dad9a1b (patch) | |
tree | 01931d912659a223d039f158c0e1a1233ad3c77a /x11/kdebase2/patches | |
parent | e7e56f249d13d1868ff059f40cae79d4ae900cfc (diff) | |
download | pkgsrc-e761df1f5d09e40eb8433d8db8ec1f142dad9a1b.tar.gz |
Changes to kcontrol/info/info_netbsd.cpp:
GetDmesgInfo():
- changed to support '^foobar' in the filter string
- the filter function is now supposed to add the appropriate stuff
to passed QListView immediatelly, opaque/final is not passed any more
Couple fixes to kcontrol Information stuff:
- fix the display of IRQs, simplify the AddIRQLine(), use the QListView sort
facilities instead separate QStrList
- remove the 'waiting x seconds for devices to settle' on SCSI display
- fix the display of audio devices
- include Total Size and Free Size on Partition display, remove parentheses
in Mount Options
The patch will be fed to KDE Team for inclusion in future KDE versions.
Diffstat (limited to 'x11/kdebase2/patches')
-rw-r--r-- | x11/kdebase2/patches/patch-ba | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/x11/kdebase2/patches/patch-ba b/x11/kdebase2/patches/patch-ba new file mode 100644 index 00000000000..96875e6a060 --- /dev/null +++ b/x11/kdebase2/patches/patch-ba @@ -0,0 +1,256 @@ +$NetBSD: patch-ba,v 1.1 2001/09/22 14:51:50 jdolecek Exp $ + +--- kcontrol/info/info_netbsd.cpp.orig Fri Sep 21 23:01:26 2001 ++++ kcontrol/info/info_netbsd.cpp Sat Sep 22 16:25:36 2001 +@@ -34,8 +34,10 @@ + #include <sys/types.h> + #include <sys/param.h> + #include <sys/sysctl.h> ++#include <sys/mount.h> + #include <stdio.h> /* for NULL */ + #include <stdlib.h> /* for malloc(3) */ ++#include <fstab.h> + + #include <qfile.h> + #include <qfontmetrics.h> +@@ -100,20 +102,18 @@ bool GetInfo_CPU(QListView *lBox) + // this is used to find out which devices are currently + // on system + static bool GetDmesgInfo(QListView *lBox, const char *filter, +- void func(QListView *, QCString s, void **, bool)) ++ void func(QListView *, QString s)) + { + QFile *dmesg = new QFile("/var/run/dmesg.boot"); + bool usepipe=false; + FILE *pipe=NULL; + QTextStream *t; + bool seencpu=false; +- void *opaque=NULL; +- QCString s; ++ QString s; + bool found=false; + +- if (dmesg->exists() && dmesg->open(IO_ReadOnly)) { ++ if (dmesg->exists() && dmesg->open(IO_ReadOnly)) + t = new QTextStream(dmesg); +- } + else { + delete dmesg; + pipe = popen("/sbin/dmesg", "r"); +@@ -134,25 +134,20 @@ static bool GetDmesgInfo(QListView *lBox + s.contains("WARNING: old BSD partition ID!")) + break; + +- if (!filter || s.contains(filter)) { +- if (func) { +- func(lBox, s, &opaque, false); +- } +- else { ++ if (!filter ++ || (filter[0] == '^' && s.find(&filter[1]) == 0) ++ || (filter[0] != '^' && s.contains(filter))) { ++ if (func) ++ func(lBox, s); ++ else + olditem = new QListViewItem(lBox, olditem, s); +- } + found = true; + } + } +- if (func) { +- func(lBox, s, &opaque, true); +- } +- //lBox->triggerUpdate(); + + delete t; +- if (pipe) { ++ if (pipe) + pclose(pipe); +- } + else { + dmesg->close(); + delete dmesg; +@@ -161,40 +156,31 @@ static bool GetDmesgInfo(QListView *lBox + return found; + } + +-void AddIRQLine(QListView *lBox, QCString s, void **opaque, bool ending) ++void ++AddIRQLine(QListView *lBox, QString s) + { +- QStrList *strlist = (QStrList *) *opaque; +- const char *str; +- int pos, irqnum=0; +- +- if (!strlist) { +- strlist = new QStrList(); +- *opaque = (void *) strlist; +- } +- if (ending) { +- str = strlist->first(); +- for(;str; str = strlist->next()) { +- new QListViewItem(lBox, str); +- } +- delete strlist; +- return; +- } ++ int pos, irqnum; ++ char numstr[3]; + + pos = s.find(" irq "); +- irqnum = (pos < 0) ? 0 : atoi(&(((const char *)s)[pos+5])); +- if (irqnum) { +- s.sprintf("%02d%s", irqnum, (const char *)s); +- } ++ irqnum = (pos < 0) ? 0 : atoi(&s.ascii()[pos+5]); ++ if (irqnum) ++ snprintf(numstr, 3, "%02d", irqnum); + else { +- s.sprintf("??%s", (const char *)s); ++ // this should never happen ++ strcpy(numstr, "??"); + } +- strlist->inSort(s); ++ ++ new QListViewItem(lBox, numstr, s); + } + ++ + bool GetInfo_IRQ (QListView *lBox) + { + lBox->addColumn(i18n("IRQ")); + lBox->addColumn(i18n("Device")); ++ lBox->setSorting(0); ++ lBox->setShowSortIndicator(FALSE); + (void) GetDmesgInfo(lBox, " irq ", AddIRQLine); + return true; + } +@@ -220,26 +206,27 @@ bool GetInfo_IO_Ports (QListView *lbox) + + bool GetInfo_Sound (QListView *lbox) + { ++ lbox->setSorting(false); ++ + if (!GetDmesgInfo(lbox, "audio", NULL)) + new QListViewItem(lbox, i18n("No audio devices found.")); + +- // append information on any audio devices found ++ // append information for each audio devices found + QListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + QString s; + int pos, len; +- const char *start, *end; ++ const char *start; + char *dev; + + s = lvitem->text(0); +- if ((pos = s.find("at ")) >= 0) { +- pos += 3; // skip "at " +- start = end = s.ascii(); +- for(; (*end!=':') && (*end!='\n'); end++); +- len = end - start; +- dev = (char *) malloc(len + 1); +- strncpy(dev, start, len); +- dev[len] = '\0'; ++ // The autoconf message is in form 'audio0 at auvia0: ...' ++ if (s.find("audio") == 0 && (pos = s.find(" at ")) > 0) { ++ pos += 4; // skip " at " ++ start = s.ascii() + pos; ++ len = (int) strcspn(start, ":\n\t "); ++ dev = (char *) malloc(1 + len + 1); ++ sprintf(dev, "^%.*s", len, start); /* safe */ + + GetDmesgInfo(lbox, dev, NULL); + +@@ -260,16 +247,32 @@ bool GetInfo_SCSI (QListView *lbox) + { + if (!GetDmesgInfo(lbox, "scsibus", NULL)) + new QListViewItem(lbox, i18n("No SCSI devices found.")); ++ ++ // remove the 'waiting %d seconds for devices to settle' message ++ QListViewItem *lvitem = lbox->firstChild(); ++ for(; lvitem; lvitem = lvitem->nextSibling()) { ++ QString s = lvitem->text(0); ++ ++ if (s.contains("seconds for devices to settle")) { ++ lbox->removeItem(lvitem); ++ break; ++ } ++ } ++ + return true; + } + + bool GetInfo_Partitions (QListView *lbox) + { +- QCString s; ++ QString s; ++ QString MB; + char *line, *orig_line; + const char *device, *mountpoint, *type, *flags; + FILE *pipe = popen("/sbin/mount", "r"); + QTextStream *t; ++ u_int64_t tsz, fsz; ++ struct statfs sfs; ++ int ok; + + if (!pipe) { + kdError(0) << i18n("Ahh couldn't run /sbin/mount!") << endl; +@@ -277,27 +280,49 @@ bool GetInfo_Partitions (QListView *lbox + } + t = new QTextStream(pipe, IO_ReadOnly); + ++ MB = QString(" ") + QString(i18n("MB")); + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); ++ lbox->addColumn(i18n("Total Size")); ++ lbox->addColumn(i18n("Free Size")); + lbox->addColumn(i18n("Mount Options")); + +- QListViewItem *olditem = 0; + while (!(s = t->readLine().latin1()).isEmpty()) { +- orig_line = line = strdup(s); ++ orig_line = line = strdup(s.ascii()); ++ ++ // the lines returned by /sbin/mount look like: ++ // /dev/wd0a on / type ffs (local, soft dependencies) + + device = strsep(&line, " "); + +- (void) strsep(&line, " "); // cosume word "on" ++ (void) strsep(&line, " "); // consume word "on" + mountpoint = strsep(&line, " "); + +- (void) strsep(&line, " "); // cosume word "type" ++ (void) strsep(&line, " "); // consume word "type" + type = strsep(&line, " "); + +- flags = line; ++ /* skip leading '(' and trailing ')' */ ++ line++; ++ flags = strsep(&line, ")"); ++ ++ if (statfs(mountpoint, &sfs) == 0) { ++ tsz = ((1LL * sfs.f_blocks * sfs.f_bsize / 1024) + 513) ++ / 1024; ++ fsz = ((1LL * sfs.f_bfree * sfs.f_bsize / 1024) + 513) ++ / 1024; ++ ok = 1; ++ } else { ++ tsz = fsz = 0; ++ ok = 0; ++ } + +- olditem = new QListViewItem(lbox, olditem, device, mountpoint, +- type, flags); ++ new QListViewItem(lbox, ++ QString(device) + " ", ++ QString(mountpoint) + " ", QString(type) + " ", ++ (ok) ? (Value(tsz, 6) + MB) : " ", ++ (ok) ? (Value(fsz, 6) + MB) : " ", ++ flags); + + free(orig_line); + } |