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.
This commit is contained in:
jdolecek 2001-09-22 14:51:49 +00:00
parent e7e56f249d
commit e761df1f5d
2 changed files with 258 additions and 1 deletions

View file

@ -1,4 +1,4 @@
$NetBSD: distinfo,v 1.5 2001/09/07 14:34:33 drochner Exp $ $NetBSD: distinfo,v 1.6 2001/09/22 14:51:49 jdolecek Exp $
SHA1 (kdebase-2.1.1.tar.bz2) = af38d452c957715fa6ae59e99af3e7da2c3369b0 SHA1 (kdebase-2.1.1.tar.bz2) = af38d452c957715fa6ae59e99af3e7da2c3369b0
Size (kdebase-2.1.1.tar.bz2) = 9188425 bytes Size (kdebase-2.1.1.tar.bz2) = 9188425 bytes
@ -30,3 +30,4 @@ SHA1 (patch-aw) = 6510c6e55f619778c318a96cd5120bb07d9aa6d9
SHA1 (patch-ax) = bd3a8494663da789fffd1a9d5340b0f44819f26c SHA1 (patch-ax) = bd3a8494663da789fffd1a9d5340b0f44819f26c
SHA1 (patch-ay) = 287912fd2f3ff04f0239545a1d215b36cb8c1d0f SHA1 (patch-ay) = 287912fd2f3ff04f0239545a1d215b36cb8c1d0f
SHA1 (patch-az) = 5af89343863ed55268c9ef22dee394665270cb8b SHA1 (patch-az) = 5af89343863ed55268c9ef22dee394665270cb8b
SHA1 (patch-ba) = a1984f490868565dfe114b579be1279d50de1e0b

View file

@ -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);
}