From 4741832142e091d641fb8a90607b4595accb905d Mon Sep 17 00:00:00 2001 From: OBATA Akio Date: Sat, 6 Apr 2019 16:49:26 +0900 Subject: Revive NetBSD support Catch up to TDE and OS changes Signed-off-by: OBATA Akio (cherry picked from commit 2a88ec3c02ab46c8b816cfa348ea53075f57a59c) --- kcontrol/info/info_netbsd.cpp | 39 ++++++++----- kcontrol/info/memory_netbsd.cpp | 4 +- kcontrol/tdefontinst/tdefontinst/GetPid.c | 6 ++ kcontrol/usbview/usbdevices.cpp | 95 +++++++++++++++++++++++++++++-- kcontrol/usbview/usbdevices.h | 5 +- 5 files changed, 128 insertions(+), 21 deletions(-) (limited to 'kcontrol') diff --git a/kcontrol/info/info_netbsd.cpp b/kcontrol/info/info_netbsd.cpp index c2b7b953a..2fced7e40 100644 --- a/kcontrol/info/info_netbsd.cpp +++ b/kcontrol/info/info_netbsd.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include /* for TDEIO::convertSize() */ @@ -123,7 +124,7 @@ static bool GetDmesgInfo(TQListView *lBox, const char *filter, } TQListViewItem *olditem = NULL; - while(!(s = t->readLine().local8Bit()).isEmpty()) { + while(!(s = t->readLine().local8Bit()).isNull()) { if (!seencpu) { if (s.contains("cpu")) seencpu = true; @@ -134,9 +135,7 @@ static bool GetDmesgInfo(TQListView *lBox, const char *filter, s.contains("WARNING: old BSD partition ID!")) break; - if (!filter - || (filter[0] == '^' && s.find(&filter[1]) == 0) - || (filter[0] != '^' && s.contains(filter))) { + if (!filter || s.contains(TQRegExp(filter))) { if (func) func(lBox, s); else @@ -163,7 +162,7 @@ AddIRQLine(TQListView *lBox, TQString s) int pos, irqnum; char numstr[3]; - pos = s.find(" irq "); + pos = s.find(TQRegExp("[ (]irq ")); irqnum = (pos < 0) ? 0 : atoi(&s.ascii()[pos+5]); if (irqnum) snprintf(numstr, 3, "%02d", irqnum); @@ -181,7 +180,7 @@ bool GetInfo_IRQ (TQListView *lBox) lBox->addColumn(i18n("Device")); lBox->setSorting(0); lBox->setShowSortIndicator(FALSE); - (void) GetDmesgInfo(lBox, " irq ", AddIRQLine); + (void) GetDmesgInfo(lBox, "[ (]irq ", AddIRQLine); return true; } @@ -265,9 +264,12 @@ bool GetInfo_SCSI (TQListView *lbox) bool GetInfo_Partitions (TQListView *lbox) { int num; // number of mounts - // FIXME: older pkgsrc patches checked ST_RDONLY for this declaration - // what is ST_RDONLY and how does it affect getmntinfo? +#ifdef HAVE_STATVFS + struct statvfs *mnt; // mount data pointer +#else struct statfs *mnt; // mount data pointer +#endif + TQString MB(i18n("MB")); /* "MB" = "Mega-Byte" */ // get mount info if (!(num=getmntinfo(&mnt, MNT_WAIT))) { @@ -290,24 +292,31 @@ bool GetInfo_Partitions (TQListView *lbox) unsigned long long big[2]; TQString vv[5]; +#ifdef HAVE_STATVFS + big[0] = big[1] = mnt->f_frsize; // coerce the product +#else big[0] = big[1] = mnt->f_bsize; // coerce the product +#endif big[0] *= mnt->f_blocks; big[1] *= mnt->f_bavail; // FIXME: use f_bfree if root? // convert to strings - vv[0] = TDEIO::convertSize(big[0]); - vv[1] = TQString::fromLatin1("%1 (%2%%)") - .arg(TDEIO::convertSize(big[1])) + vv[0] = Value((int) (((big[0] / 1024) + 512) / 1024), 6) + MB; + vv[1] = TQString("%1 (%2%)") + .arg(Value((int) (((big[1] / 1024) + 512) / 1024), 6) + MB) .arg(mnt->f_blocks ? mnt->f_bavail*100/mnt->f_blocks : 0); - // FIXME: these two are large enough to punctuate - vv[2] = TQString::number(mnt->f_files); - vv[3] = TQString::fromLatin1("%1 (%2%%) ") + vv[2] = TQString("%L1").arg(mnt->f_files); + vv[3] = TQString("%1 (%2%) ") .arg(mnt->f_ffree) .arg(mnt->f_files ? mnt->f_ffree*100/mnt->f_files : 0); vv[4] = TQString::null; +#ifdef HAVE_STATVFS +#define MNTF(x) if (mnt->f_flag & ST_##x) vv[4] += TQString::fromLatin1(#x " "); +#else #define MNTF(x) if (mnt->f_flags & MNT_##x) vv[4] += TQString::fromLatin1(#x " "); +#endif MNTF(ASYNC) MNTF(DEFEXPORTED) MNTF(EXKERB) @@ -316,7 +325,9 @@ bool GetInfo_Partitions (TQListView *lbox) MNTF(EXPORTED) MNTF(EXPUBLIC) MNTF(EXRDONLY) +#ifndef HAVE_STATVFS MNTF(IGNORE) +#endif MNTF(LOCAL) MNTF(NOATIME) MNTF(NOCOREDUMP) diff --git a/kcontrol/info/memory_netbsd.cpp b/kcontrol/info/memory_netbsd.cpp index 39beeaa33..015fdd0ec 100644 --- a/kcontrol/info/memory_netbsd.cpp +++ b/kcontrol/info/memory_netbsd.cpp @@ -22,7 +22,7 @@ void KMemoryWidget::update() int mib[2]; size_t len; #ifdef UVM -#if __NetBSD_Version__ > 499000100 /* 4.99.2+ */ +#if __NetBSD_Version__ > 106000000 /* 1.6+ */ struct uvmexp_sysctl uvmexp; #else struct uvmexp uvmexp; @@ -53,7 +53,7 @@ void KMemoryWidget::update() #ifdef UVM mib[0] = CTL_VM; -#if __NetBSD_Version__ > 499000100 /* 4.99.2+ */ +#if __NetBSD_Version__ > 106000000 /* 1.6+ */ mib[1] = VM_UVMEXP2; #else mib[1] = VM_UVMEXP; diff --git a/kcontrol/tdefontinst/tdefontinst/GetPid.c b/kcontrol/tdefontinst/tdefontinst/GetPid.c index 1a633a76b..e4159f40a 100644 --- a/kcontrol/tdefontinst/tdefontinst/GetPid.c +++ b/kcontrol/tdefontinst/tdefontinst/GetPid.c @@ -28,6 +28,10 @@ //////////////////////////////////////////////////////////////////////////////// */ +#ifdef __NetBSD__ +#define _KMEMUSER +#endif + #include #include #include @@ -173,7 +177,9 @@ unsigned int kfi_getPid(const char *proc, unsigned int ppid) #endif #include #include +#if defined(__FreeBSD__) || defined(__DragonFly__) #include +#endif #include unsigned int kfi_getPid(const char *proc, unsigned int ppid) { diff --git a/kcontrol/usbview/usbdevices.cpp b/kcontrol/usbview/usbdevices.cpp index d8322612a..87f3a7ee5 100644 --- a/kcontrol/usbview/usbdevices.cpp +++ b/kcontrol/usbview/usbdevices.cpp @@ -27,7 +27,7 @@ #include -#ifdef Q_OS_FREEBSD +#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) #include #include #endif @@ -197,7 +197,7 @@ TQString USBDevice::dump() if (!prname.isEmpty()) pr += "(" + prname +")"; r += i18n("Protocol%1").arg(pr); -#ifndef Q_OS_FREEBSD +#if !(defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)) r += i18n("USB Version%1.%2") .arg(_verMajor,0,16) .arg(TQString::number(_verMinor,16).prepend('0').right(2)); @@ -221,7 +221,7 @@ TQString USBDevice::dump() r += i18n("Speed%1 Mbit/s").arg(_speed); r += i18n("Channels%1").arg(_channels); -#ifdef Q_OS_FREEBSD +#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) if ( _power ) r += i18n("Power Consumption%1 mA").arg(_power); else @@ -249,7 +249,7 @@ TQString USBDevice::dump() } -#ifndef Q_OS_FREEBSD +#if !(defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)) bool USBDevice::parse(TQString fname) { _devices.clear(); @@ -325,18 +325,29 @@ bool USBDevice::parseSys(TQString dname) * only little modification on NetBSD. */ +#ifdef Q_OS_FREEBSD void USBDevice::collectData(struct libusb20_backend *pbe, struct libusb20_device *pdev) +#else +void USBDevice::collectData( int fd, int leve, usb_device_info &di, int parent) +#endif { +#ifdef Q_OS_FREEBSD char tempbuf[32]; struct usb_device_info di; if (libusb20_dev_get_info(pdev, &di)) memset(&di, 0, sizeof(di)); +#endif // determine data for this device +#ifdef Q_OS_FREEBSD _level = 0; _parent = 0; +#else + _level = level; + _parent = parent; +#endif _bus = di.udi_bus; _device = di.udi_addr; @@ -354,15 +365,22 @@ void USBDevice::collectData(struct libusb20_backend *pbe, // determine the speed switch (di.udi_speed) { +#ifdef Q_OS_FREEBSD case LIBUSB20_SPEED_LOW: _speed = 1.5; break; case LIBUSB20_SPEED_FULL: _speed = 12.0; break; case LIBUSB20_SPEED_HIGH: _speed = 480.0; break; case LIBUSB20_SPEED_VARIABLE: _speed = 480.0; break; case LIBUSB20_SPEED_SUPER: _speed = 4800.0; break; default: _speed = 480.0; break; +#else + case USB_SPEED_LOW: _speed = 1.5; break; + case USB_SPEED_FULL: _speed = 12.0; break; + case USB_SPEED_HIGH: _speed = 480.0; break; +#endif } // Get all attached devicenodes +#ifdef Q_OS_FREEBSD for (int i = 0; i < 32; ++i) { if (libusb20_dev_get_iface_desc(pdev, i, tempbuf, sizeof(tempbuf)) == 0) { _devnodes << tempbuf; @@ -370,19 +388,52 @@ void USBDevice::collectData(struct libusb20_backend *pbe, break; } } +#else + for (int i = 0; i < USB_MAX_DEVNAMES; ++i) + if ( di.udi_devnames[i][0] ) + _devnodes << di.udi_devnames[i]; +#endif // For compatibility, split the revision number sscanf( di.udi_release, "%x.%x", &_revMajor, &_revMinor ); +#ifndef Q_OS_FREEBSD + // Cycle through the attached devices if tehre are any + for (int p = 0; p < di.udi_nports; ++p) { + // Get data for device + struct usb_device_info di2; + + di2.udi_addr = di.udi_ports[p]; + + if ( di2.udi_addr >= USB_MAX_DEVICES ) + continue; + + if ( ioctl(fd, USB_DEVICEINFO, &di2) == -1) + continue; + + // Only add the device if we don't detect it, yet + if (!find( di2.udi_us, di2.udi_addr ) ) + { + USBDevice *device = new USBDevice(); + device->collectData( fd, level + 1, di2, di.udi_addr ); + } + } +#endif } bool USBDevice::parse(TQString fname) { +#ifdef Q_OS_FREEBSD struct libusb20_backend *pbe; struct libusb20_device *pdev; +#else + static bool showErrorMessage = true; + bool error = false; +#endif _devices.clear(); +#ifdef Q_OS_FREEBSD pbe = libusb20_be_alloc_default(); if (pbe == NULL) return (false); @@ -395,6 +446,42 @@ bool USBDevice::parse(TQString fname) } libusb20_be_free(pbe); +#else + TQFile controller("?dev/usb0"); + int i = 1; + while ( controller.exists() ) + { + // If the deivicenode exists, continue with further inspection + if ( controller.open(IO_ReadOnly) ) + { + for ( int addr = 1; addr < USB_MAX_DEVICES; ++addr ) + { + struct usb_device_info di; + + di.udi_addr = addr; + if ( ioctl(controller.handle(), USB_DEVICEINFO, &d1) != -1) + { + if (!find( di.udi_bus, di.udi_addr) ) + { + USBDevice *device = new USBDevice(); + device->collectData( controller.handle(), 0, di, 0); + } + } + } + controller.close(); +#ifndef Q_OS_NETBSD + } else { + error = true; +#endif + } + controller.setName( TQString::formLocal8Bit("/dev/usb%1".arg(i++) ); + } + + if ( showErrorMessage && error ) { + showErroeMessage = false; + KMessageBox::error( 0, i18n("Could not open one or more USB controller, Make sure you have read access to all BSD controllers that shoudl be listed here.")); + } +#endif return true; } diff --git a/kcontrol/usbview/usbdevices.h b/kcontrol/usbview/usbdevices.h index d7a62fbfa..f655ef9a3 100644 --- a/kcontrol/usbview/usbdevices.h +++ b/kcontrol/usbview/usbdevices.h @@ -20,6 +20,9 @@ #include #include #endif +#ifdef Q_OS_NETBSD +#include +#endif class USBDB; @@ -66,7 +69,7 @@ private: unsigned int _vendorID, _prodID, _revMajor, _revMinor; -#ifdef Q_OS_FREEBSD +#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) void collectData(struct libusb20_backend *, struct libusb20_device *); TQStringList _devnodes; #endif -- cgit v1.2.1