diff --git a/SOURCES/0003-report-CPU-family-model-stepping.patch b/SOURCES/0003-report-CPU-family-model-stepping.patch new file mode 100644 index 0000000..767342e --- /dev/null +++ b/SOURCES/0003-report-CPU-family-model-stepping.patch @@ -0,0 +1,96 @@ +From f914f225975bb4a146792c2b0181b8d0e01ff3a6 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Sat, 28 Mar 2020 11:54:10 +0100 +Subject: [PATCH 03/65] report CPU family/model/stepping + +--- + src/core/cpuinfo.cc | 21 +++++++++++++++++++-- + src/core/hw.cc | 20 ++++++++++++++++++++ + src/core/hw.h | 1 + + 3 files changed, 40 insertions(+), 2 deletions(-) + +diff --git a/src/core/cpuinfo.cc b/src/core/cpuinfo.cc +index 33085fd..eceb83a 100644 +--- a/src/core/cpuinfo.cc ++++ b/src/core/cpuinfo.cc +@@ -463,6 +463,14 @@ string value) + } + if (id == "model name") + cpu->setProduct(value); ++ if (id == "microcode") ++ cpu->setConfig(id, stoll(value, NULL, 0)); ++ if (id == "cpu family") ++ cpu->addHint(id, stoll(value, NULL, 0)); ++ if (id == "model") ++ cpu->addHint(id, stoll(value, NULL, 0)); ++ if (id == "stepping") ++ cpu->addHint(id, stoll(value, NULL, 0)); + //if ((id == "cpu MHz") && (cpu->getSize() == 0)) + //{ + //cpu->setSize((long long) (1000000L * atof(value.c_str()))); +@@ -667,8 +675,17 @@ bool scan_cpuinfo(hwNode & n) + } + + hwNode *cpu = getcpu(n, 0); +- if(cpu && (n.getWidth()==0)) +- n.setWidth(cpu->getWidth()); ++ if(cpu) ++ { ++ hw::value family, model, stepping; ++ family = cpu->getHint("cpu family"); ++ model = cpu->getHint("model"); ++ stepping = cpu->getHint("stepping"); ++ if(family.defined() && model.defined() && stepping.defined()) ++ cpu->setVersion(tostring(family.asInteger())+"."+tostring(model.asInteger())+"."+tostring(stepping.asInteger())); ++ if(n.getWidth()==0) ++ n.setWidth(cpu->getWidth()); ++ } + + return true; + } +diff --git a/src/core/hw.cc b/src/core/hw.cc +index 4522c1a..a592730 100644 +--- a/src/core/hw.cc ++++ b/src/core/hw.cc +@@ -2432,6 +2432,26 @@ string value::asString() const + } + + ++long long value::asInteger() const ++{ ++ if(!This) return 0; ++ ++ switch(This->type) ++ { ++ case hw::text: ++ return stoll(This->s, NULL, 0); ++ case hw::integer: ++ return This->ll; ++ case hw::boolean: ++ return This->b?1:0; ++ case hw::nil: ++ return 0; ++ }; ++ ++ return 0; ++} ++ ++ + bool value::defined() const + { + if(!This) return false; +diff --git a/src/core/hw.h b/src/core/hw.h +index 3cb782b..451e9b3 100644 +--- a/src/core/hw.h ++++ b/src/core/hw.h +@@ -79,6 +79,7 @@ namespace hw + bool operator ==(const value &) const; + + string asString() const; ++ long long asInteger() const; + bool defined() const; + + private: +-- +2.33.1 + diff --git a/SOURCES/0004-move-PnP-devices-to-the-ISA-LPC-bridge.patch b/SOURCES/0004-move-PnP-devices-to-the-ISA-LPC-bridge.patch new file mode 100644 index 0000000..d83e411 --- /dev/null +++ b/SOURCES/0004-move-PnP-devices-to-the-ISA-LPC-bridge.patch @@ -0,0 +1,53 @@ +From 126bc4387648fabf0478d0b869fe6bc52676b447 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Sun, 29 Mar 2020 19:25:39 +0200 +Subject: [PATCH 04/65] move PnP devices to the ISA/LPC bridge + +--- + src/core/pnp.cc | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/core/pnp.cc b/src/core/pnp.cc +index 8c92adf..6a39185 100644 +--- a/src/core/pnp.cc ++++ b/src/core/pnp.cc +@@ -165,6 +165,11 @@ hw::hwClass pnp_class(const string & pnpid) + return hw::generic; + } + ++static bool ISAbridge(const hwNode & n) ++{ ++ return n.getClass()==hw::bridge && n.isCapable("isa"); ++} ++ + bool scan_pnp(hwNode & n) + { + vector < sysfs::entry > entries = sysfs::entries_by_bus("pnp"); +@@ -172,11 +177,12 @@ bool scan_pnp(hwNode & n) + if (entries.empty()) + return false; + +- hwNode *core = n.getChild("core"); +- if (!core) ++ hwNode *isapnpbridge = n.findChild(ISAbridge); ++ if (!isapnpbridge) isapnpbridge = n.getChild("core"); ++ if (!isapnpbridge) + { + n.addChild(hwNode("core", hw::bus)); +- core = n.getChild("core"); ++ isapnpbridge = n.getChild("core"); + } + + for (vector < sysfs::entry >::iterator it = entries.begin(); +@@ -208,7 +214,7 @@ bool scan_pnp(hwNode & n) + device.setProduct("PnP device " + pnpid); + device.claim(); + +- core->addChild(device); ++ isapnpbridge->addChild(device); + } + return true; + } +-- +2.33.1 + diff --git a/SOURCES/0005-correctly-format-SMBIOS-UUID.patch b/SOURCES/0005-correctly-format-SMBIOS-UUID.patch new file mode 100644 index 0000000..fa76560 --- /dev/null +++ b/SOURCES/0005-correctly-format-SMBIOS-UUID.patch @@ -0,0 +1,33 @@ +From bb82dda52da2029a527577a796daffcbc97d8e83 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Mon, 30 Mar 2020 23:36:15 +0200 +Subject: [PATCH 05/65] correctly format SMBIOS UUID +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +cf. https://en.wikipedia.org/wiki/Universally_unique_identifier (RFC 4122 Section 3 requires that the characters be generated in lower case, while being case-insensitive on input.) + +cf. https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf §7.2.1 +--- + src/core/dmi.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index c4c01e0..30b3ab3 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -195,8 +195,8 @@ static string dmi_uuid(const u8 * p) + return string(REMOVED); + + snprintf(buffer, sizeof(buffer), +- "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X", +- p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], ++ "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", ++ p[3], p[2], p[1], p[0], p[5], p[4], p[7], p[6], p[8], p[9], p[10], + p[11], p[12], p[13], p[14], p[15]); + + return hw::strip(string(buffer)); +-- +2.33.1 + diff --git a/SOURCES/0006-cosmetic-clean-up.patch b/SOURCES/0006-cosmetic-clean-up.patch new file mode 100644 index 0000000..fb83561 --- /dev/null +++ b/SOURCES/0006-cosmetic-clean-up.patch @@ -0,0 +1,27 @@ +From aea375aeb4f58a35afd1ec2998a04060bc8fccfa Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 31 Mar 2020 23:27:36 +0200 +Subject: [PATCH 06/65] cosmetic clean-up + +--- + src/core/mmc.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/mmc.cc b/src/core/mmc.cc +index 96c2c49..1385e11 100644 +--- a/src/core/mmc.cc ++++ b/src/core/mmc.cc +@@ -327,8 +327,8 @@ bool scan_mmc(hwNode & n) + device->setDescription("MMC Host"); + device->setModalias(e.modalias()); + +- vector < sysfs::entry > namespaces = e.devices(); +- for(vector < sysfs::entry >::iterator i = namespaces.begin(); i != namespaces.end(); ++i) ++ vector < sysfs::entry > devices = e.devices(); ++ for(vector < sysfs::entry >::iterator i = devices.begin(); i != devices.end(); ++i) + { + const sysfs::entry & d = *i; + +-- +2.33.1 + diff --git a/SOURCES/0007-begin-work-on-input-devices.patch b/SOURCES/0007-begin-work-on-input-devices.patch new file mode 100644 index 0000000..354c6ff --- /dev/null +++ b/SOURCES/0007-begin-work-on-input-devices.patch @@ -0,0 +1,222 @@ +From 691ed58e2838ca3e50e899f013e259ea84f6bfe9 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Wed, 1 Apr 2020 00:43:15 +0200 +Subject: [PATCH 07/65] begin work on input devices + +still missing: + * capabilities + * properties + * report at least as much information as /proc/bus/input/devices +--- + src/core/hw.cc | 2 +- + src/core/input.cc | 146 ++++++++++++++++++++++++++++++++++++++++++++++ + src/core/input.h | 8 +++ + src/core/main.cc | 4 ++ + 5 files changed, 160 insertions(+), 2 deletions(-) + create mode 100644 src/core/input.cc + create mode 100644 src/core/input.h + +diff --git a/src/core/hw.cc b/src/core/hw.cc +index a592730..f7da370 100644 +--- a/src/core/hw.cc ++++ b/src/core/hw.cc +@@ -1083,7 +1083,7 @@ void hwNode::setLogicalName(const string & name) + This->logicalnames.push_back("/dev/" + n); + } + else +- This->logicalnames.push_back(n); ++ This->logicalnames.push_back(basename(n.c_str())); + + if(This->dev == "") + This->dev = get_devid(n); +diff --git a/src/core/input.cc b/src/core/input.cc +new file mode 100644 +index 0000000..1f14fa9 +--- /dev/null ++++ b/src/core/input.cc +@@ -0,0 +1,146 @@ ++#include "version.h" ++#include "hw.h" ++#include "sysfs.h" ++#include "osutils.h" ++#include "input.h" ++#include "disk.h" ++#include "heuristics.h" ++ ++#include ++#include ++ ++__ID("@(#) $Id$"); ++ ++#define BUS_PCI 0x01 ++#define BUS_ISAPNP 0x02 ++#define BUS_USB 0x03 ++#define BUS_HIL 0x04 ++#define BUS_BLUETOOTH 0x05 ++#define BUS_VIRTUAL 0x06 ++ ++#define BUS_ISA 0x10 ++#define BUS_I8042 0x11 ++#define BUS_XTKBD 0x12 ++#define BUS_RS232 0x13 ++#define BUS_GAMEPORT 0x14 ++#define BUS_PARPORT 0x15 ++#define BUS_AMIGA 0x16 ++#define BUS_ADB 0x17 ++#define BUS_I2C 0x18 ++#define BUS_HOST 0x19 ++#define BUS_GSC 0x1A ++#define BUS_ATARI 0x1B ++#define BUS_SPI 0x1C ++#define BUS_RMI 0x1D ++#define BUS_CEC 0x1E ++#define BUS_INTEL_ISHTP 0x1F ++ ++using namespace std; ++ ++bool scan_input(hwNode & n) ++{ ++ vector < sysfs::entry > entries = sysfs::entries_by_class("input"); ++ ++ if (entries.empty()) ++ return false; ++ ++ for (vector < sysfs::entry >::iterator it = entries.begin(); ++ it != entries.end(); ++it) ++ { ++ const sysfs::entry & e = *it; ++ ++ if(!e.hassubdir("id")) continue; ++ ++ hwNode *device = n.findChildByBusInfo(e.leaf().businfo()); ++ if(!device) ++ device = n.addChild(hwNode("input", hw::input)); ++ else ++ { ++ if(device->getClass() == hw::generic) ++ device->setClass(hw::input); ++ } ++ device->claim(); ++ device->setLogicalName("input/"+e.name()); ++ device->setProduct(e.string_attr("name")); ++ device->setModalias(e.modalias()); ++ switch(e.hex_attr("id/bustype")) ++ { ++ case BUS_PCI: ++ device->addCapability("pci", "PCI"); ++ break; ++ case BUS_ISAPNP: ++ device->addCapability("isa", "ISA"); ++ device->addCapability("pnp", "PnP"); ++ break; ++ case BUS_USB: ++ device->addCapability("usb", "USB"); ++ break; ++ case BUS_HIL: ++ device->addCapability("hil", "HP-HIL"); ++ break; ++ case BUS_BLUETOOTH: ++ device->addCapability("bt", "Bluetooth"); ++ break; ++ case BUS_VIRTUAL: ++ device->addCapability("virtual"); ++ break; ++ case BUS_ISA: ++ device->addCapability("isa", "ISA bus"); ++ break; ++ case BUS_I8042: ++ device->addCapability("i8042", "i8042 PC AT keyboard controller"); ++ break; ++ case BUS_XTKBD: ++ device->addCapability("xtkbd", "XT keyboard controller"); ++ break; ++ case BUS_RS232: ++ device->addCapability("rs232", "RS-232 serial"); ++ break; ++ case BUS_GAMEPORT: ++ device->addCapability("gameport", "game port"); ++ break; ++ case BUS_PARPORT: ++ device->addCapability("parport", "parallel port"); ++ break; ++ case BUS_AMIGA: ++ device->addCapability("amiga", "Amiga bus"); ++ break; ++ case BUS_ADB: ++ device->addCapability("adb", "Apple Desktop Bus"); ++ break; ++ case BUS_I2C: ++ device->addCapability("i2c", "I²C bus"); ++ break; ++ case BUS_HOST: ++ device->addCapability("host"); ++ break; ++ case BUS_GSC: ++ device->addCapability("gsc", "GSC bus"); ++ break; ++ case BUS_ATARI: ++ device->addCapability("atari", "Atari bus"); ++ break; ++ case BUS_SPI: ++ device->addCapability("spi", "SPI"); ++ break; ++ case BUS_RMI: ++ device->addCapability("rmi", "RMI"); ++ break; ++ case BUS_CEC: ++ device->addCapability("cec", "CEC"); ++ break; ++ case BUS_INTEL_ISHTP: ++ device->addCapability("intelishtp", "Intel Integrated Sensor Hub"); ++ break; ++ } ++ ++ vector < sysfs::entry > events = e.devices(); ++ for(vector < sysfs::entry >::iterator i = events.begin(); i != events.end(); ++i) ++ { ++ const sysfs::entry & d = *i; ++ device->setLogicalName("input/"+d.name()); ++ } ++ } ++ ++ return true; ++} +diff --git a/src/core/input.h b/src/core/input.h +new file mode 100644 +index 0000000..1bf2383 +--- /dev/null ++++ b/src/core/input.h +@@ -0,0 +1,8 @@ ++#ifndef _INPUT_H_ ++#define _INPUT_H_ ++ ++#include "hw.h" ++ ++bool scan_input(hwNode &); ++ ++#endif +diff --git a/src/core/main.cc b/src/core/main.cc +index d0d7f10..ad0e586 100644 +--- a/src/core/main.cc ++++ b/src/core/main.cc +@@ -45,6 +45,7 @@ + #include "vio.h" + #include "nvme.h" + #include "mmc.h" ++#include "input.h" + #include "smp.h" + #include "abi.h" + #include "s390.h" +@@ -140,6 +141,9 @@ bool scan_system(hwNode & system) + status("MMC"); + if (enabled("mmc")) + scan_mmc(computer); ++ status("input"); ++ if (enabled("input")) ++ scan_input(computer); + status("S/390 devices"); + if (enabled("s390")) + scan_s390_devices(computer); +-- +2.33.1 + diff --git a/SOURCES/0008-cosmetic-fixes.patch b/SOURCES/0008-cosmetic-fixes.patch new file mode 100644 index 0000000..75d42f5 --- /dev/null +++ b/SOURCES/0008-cosmetic-fixes.patch @@ -0,0 +1,34 @@ +From 7edaa09faa5755e44f2c6226f3447536658300af Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Thu, 2 Apr 2020 13:21:58 +0200 +Subject: [PATCH 08/65] cosmetic fixes + +--- + src/core/input.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/input.cc b/src/core/input.cc +index 1f14fa9..a8d8eaf 100644 +--- a/src/core/input.cc ++++ b/src/core/input.cc +@@ -79,7 +79,7 @@ bool scan_input(hwNode & n) + device->addCapability("hil", "HP-HIL"); + break; + case BUS_BLUETOOTH: +- device->addCapability("bt", "Bluetooth"); ++ device->addCapability("bluetooth", "Bluetooth"); + break; + case BUS_VIRTUAL: + device->addCapability("virtual"); +@@ -112,7 +112,7 @@ bool scan_input(hwNode & n) + device->addCapability("i2c", "I²C bus"); + break; + case BUS_HOST: +- device->addCapability("host"); ++ device->addCapability("platform"); + break; + case BUS_GSC: + device->addCapability("gsc", "GSC bus"); +-- +2.33.1 + diff --git a/SOURCES/0009-detect-sound-devices.patch b/SOURCES/0009-detect-sound-devices.patch new file mode 100644 index 0000000..8a260e7 --- /dev/null +++ b/SOURCES/0009-detect-sound-devices.patch @@ -0,0 +1,141 @@ +From 1cc52cac74ea735faae92dc963d10292608d7a4d Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Thu, 2 Apr 2020 13:39:42 +0200 +Subject: [PATCH 09/65] detect sound devices + +--- + src/core/main.cc | 4 ++++ + src/core/sound.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++ + src/core/sound.h | 8 +++++++ + src/core/sysfs.cc | 5 +++++ + src/core/sysfs.h | 1 + + 6 files changed, 72 insertions(+), 1 deletion(-) + create mode 100644 src/core/sound.cc + create mode 100644 src/core/sound.h + +diff --git a/src/core/main.cc b/src/core/main.cc +index ad0e586..e35258c 100644 +--- a/src/core/main.cc ++++ b/src/core/main.cc +@@ -46,6 +46,7 @@ + #include "nvme.h" + #include "mmc.h" + #include "input.h" ++#include "sound.h" + #include "smp.h" + #include "abi.h" + #include "s390.h" +@@ -141,6 +142,9 @@ bool scan_system(hwNode & system) + status("MMC"); + if (enabled("mmc")) + scan_mmc(computer); ++ status("sound"); ++ if (enabled("sound")) ++ scan_sound(computer); + status("input"); + if (enabled("input")) + scan_input(computer); +diff --git a/src/core/sound.cc b/src/core/sound.cc +new file mode 100644 +index 0000000..05edf23 +--- /dev/null ++++ b/src/core/sound.cc +@@ -0,0 +1,53 @@ ++#include "version.h" ++#include "hw.h" ++#include "sysfs.h" ++#include "osutils.h" ++#include "sound.h" ++#include "heuristics.h" ++ ++#include ++#include ++ ++__ID("@(#) $Id$"); ++ ++using namespace std; ++ ++bool scan_sound(hwNode & n) ++{ ++ vector < sysfs::entry > entries = sysfs::entries_by_class("sound"); ++ ++ if (entries.empty()) ++ return false; ++ ++ for (vector < sysfs::entry >::iterator it = entries.begin(); ++ it != entries.end(); ++it) ++ { ++ const sysfs::entry & e = *it; ++ string id = e.string_attr("id"); ++ if(id!="") ++ { ++ hwNode *device = n.findChildByBusInfo(e.leaf().businfo()); ++ if(!device) ++ device = n.addChild(hwNode("sound", hw::multimedia)); ++ device->claim(); ++ if(device->getDescription() == "") device->setDescription(id); ++ //device->setPhysId(e.hex_attr("number")); ++ //device->setBusInfo("sound@"+e.string_attr("number")); ++ device->setLogicalName("snd/"+e.name()); ++ if(device->getProduct() == "") device->setProduct(e.string_attr("name")); ++ device->setModalias(e.modalias()); ++ ++ vector < sysfs::entry > events = e.devices(); ++ for(vector < sysfs::entry >::iterator i = events.begin(); i != events.end(); ++i) ++ { ++ const sysfs::entry & d = *i; ++ if(d.subsystem() == "sound") ++ { ++ device->setLogicalName("snd/"+d.name()); ++ } ++ } ++ } ++ } ++ ++ return true; ++} +diff --git a/src/core/sound.h b/src/core/sound.h +new file mode 100644 +index 0000000..c2caf04 +--- /dev/null ++++ b/src/core/sound.h +@@ -0,0 +1,8 @@ ++#ifndef _SOUND_H_ ++#define _SOUND_H_ ++ ++#include "hw.h" ++ ++bool scan_sound(hwNode &); ++ ++#endif +diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc +index 32d6564..ee8b1da 100644 +--- a/src/core/sysfs.cc ++++ b/src/core/sysfs.cc +@@ -343,6 +343,11 @@ string entry::classname() const + return basename(dirname(This->devpath).c_str()); + } + ++string entry::subsystem() const ++{ ++ return basename(realpath(This->devpath+"/subsystem").c_str()); ++} ++ + bool entry::isvirtual() const + { + return string(basename(dirname(dirname(This->devpath)).c_str())) == "virtual"; +diff --git a/src/core/sysfs.h b/src/core/sysfs.h +index 9cc1b2b..c25430b 100644 +--- a/src/core/sysfs.h ++++ b/src/core/sysfs.h +@@ -26,6 +26,7 @@ namespace sysfs + bool hassubdir(const string &) const; + string name() const; + string classname() const; ++ string subsystem() const; + bool isvirtual() const; + string businfo() const; + string driver() const; +-- +2.33.1 + diff --git a/SOURCES/0010-detect-framebuffers.patch b/SOURCES/0010-detect-framebuffers.patch new file mode 100644 index 0000000..da4fa6d --- /dev/null +++ b/SOURCES/0010-detect-framebuffers.patch @@ -0,0 +1,102 @@ +From 755371fc1590e752380822ffdb320484e3b6851f Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Thu, 2 Apr 2020 14:54:03 +0200 +Subject: [PATCH 10/65] detect framebuffers + +--- + src/core/graphics.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++ + src/core/graphics.h | 8 ++++++++ + src/core/main.cc | 4 ++++ + 4 files changed, 57 insertions(+), 1 deletion(-) + create mode 100644 src/core/graphics.cc + create mode 100644 src/core/graphics.h + +diff --git a/src/core/graphics.cc b/src/core/graphics.cc +new file mode 100644 +index 0000000..a8d490c +--- /dev/null ++++ b/src/core/graphics.cc +@@ -0,0 +1,44 @@ ++#include "version.h" ++#include "hw.h" ++#include "sysfs.h" ++#include "osutils.h" ++#include "graphics.h" ++#include "heuristics.h" ++ ++#include ++#include ++ ++__ID("@(#) $Id$"); ++ ++using namespace std; ++ ++bool scan_graphics(hwNode & n) ++{ ++ vector < sysfs::entry > entries = sysfs::entries_by_class("graphics"); ++ ++ if (entries.empty()) ++ return false; ++ ++ for (vector < sysfs::entry >::iterator it = entries.begin(); ++ it != entries.end(); ++it) ++ { ++ const sysfs::entry & e = *it; ++ string dev = e.string_attr("dev"); ++ if(dev!="") ++ { ++ hwNode *device = n.findChildByBusInfo(e.leaf().businfo()); ++ if(!device) ++ device = n.addChild(hwNode("graphics", hw::display)); ++ device->claim(); ++ device->setLogicalName(e.name()); ++ device->addCapability("fb", "framebuffer"); ++ if(device->getProduct() == "") device->setProduct(e.string_attr("name")); ++ string resolution = e.string_attr("virtual_size"); ++ string depth = e.string_attr("bits_per_pixel"); ++ if(resolution != "") device->setConfig("resolution", resolution); ++ if(depth != "") device->setConfig("depth", depth); ++ } ++ } ++ ++ return true; ++} +diff --git a/src/core/graphics.h b/src/core/graphics.h +new file mode 100644 +index 0000000..c30f0bf +--- /dev/null ++++ b/src/core/graphics.h +@@ -0,0 +1,8 @@ ++#ifndef _GRAPHICS_H_ ++#define _GRAPHICS_H_ ++ ++#include "hw.h" ++ ++bool scan_graphics(hwNode &); ++ ++#endif +diff --git a/src/core/main.cc b/src/core/main.cc +index e35258c..ac2fba0 100644 +--- a/src/core/main.cc ++++ b/src/core/main.cc +@@ -47,6 +47,7 @@ + #include "mmc.h" + #include "input.h" + #include "sound.h" ++#include "graphics.h" + #include "smp.h" + #include "abi.h" + #include "s390.h" +@@ -145,6 +146,9 @@ bool scan_system(hwNode & system) + status("sound"); + if (enabled("sound")) + scan_sound(computer); ++ status("graphics"); ++ if (enabled("graphics")) ++ scan_graphics(computer); + status("input"); + if (enabled("input")) + scan_input(computer); +-- +2.33.1 + diff --git a/SOURCES/0011-try-to-connect-input-devices-to-the-right-parent.patch b/SOURCES/0011-try-to-connect-input-devices-to-the-right-parent.patch new file mode 100644 index 0000000..47a1103 --- /dev/null +++ b/SOURCES/0011-try-to-connect-input-devices-to-the-right-parent.patch @@ -0,0 +1,29 @@ +From f6138333811f7f2bf01551c70f5726f7c556dd36 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Fri, 3 Apr 2020 22:42:21 +0200 +Subject: [PATCH 11/65] try to connect input devices to the right parent + +--- + src/core/input.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/core/input.cc b/src/core/input.cc +index a8d8eaf..ab37d37 100644 +--- a/src/core/input.cc ++++ b/src/core/input.cc +@@ -52,6 +52,12 @@ bool scan_input(hwNode & n) + if(!e.hassubdir("id")) continue; + + hwNode *device = n.findChildByBusInfo(e.leaf().businfo()); ++ if(!device) ++ { ++ device = n.findChildByBusInfo(e.leaf().parent().businfo()); ++ if(device) ++ device = device->addChild(hwNode("input", hw::input)); ++ } + if(!device) + device = n.addChild(hwNode("input", hw::input)); + else +-- +2.33.1 + diff --git a/SOURCES/0012-devtree-Add-chip-id-from-the-dimm-module.patch b/SOURCES/0012-devtree-Add-chip-id-from-the-dimm-module.patch new file mode 100644 index 0000000..0b0f44a --- /dev/null +++ b/SOURCES/0012-devtree-Add-chip-id-from-the-dimm-module.patch @@ -0,0 +1,39 @@ +From 4c19563dae05d3a730bb67917f1810eb33a54613 Mon Sep 17 00:00:00 2001 +From: Shivaprasad G Bhat +Date: Fri, 6 Mar 2020 04:41:33 -0600 +Subject: [PATCH 12/65] devtree: Add chip-id from the dimm module + +Add chip-id from dimm module into the configuration if available. DIMM's are +behind the CHIP on Power systems. By adding chip-id it helps to map what dimm +is sitting behind which chip. + +Sample output: + *-bank:0 + description: 16GB CDIMM + product: 41T9571 FRU# 41T9571 + physical id: 0 + ..... + configuration: chip-id=0 + + +Signed-off-by: Shivaprasad G Bhat +--- + src/core/device-tree.cc | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc +index 490e197..f43d34f 100644 +--- a/src/core/device-tree.cc ++++ b/src/core/device-tree.cc +@@ -1031,6 +1031,8 @@ static void add_memory_bank(string name, string path, hwNode & core) + if(exists("description")) + description = hw::strip(get_string("description")); + bank.setDescription(description); ++ if (exists("ibm,chip-id")) ++ bank.setConfig("chip-id", get_u32("ibm,chip-id")); + + if(exists("ibm,loc-code")) + bank.setSlot(hw::strip(get_string("ibm,loc-code"))); +-- +2.33.1 + diff --git a/SOURCES/0013-devtree-Add-chip-id-from-CPU-node.patch b/SOURCES/0013-devtree-Add-chip-id-from-CPU-node.patch new file mode 100644 index 0000000..d090aa7 --- /dev/null +++ b/SOURCES/0013-devtree-Add-chip-id-from-CPU-node.patch @@ -0,0 +1,40 @@ +From 872b0996df37aae586575ca8021c2509c05067b0 Mon Sep 17 00:00:00 2001 +From: Shivaprasad G Bhat +Date: Fri, 6 Mar 2020 04:41:33 -0600 +Subject: [PATCH 13/65] devtree: Add chip-id from CPU node + +Add chip-id from CPU node into the configuration if available. CPU's are +behind the CHIP on Power systems. By adding chip-id it helps to map what cpus +are sitting behind which chip. + +Sample output: + *-cpu:10 + description: POWER8E (raw), altivec supported + product: 00FX746 FRU# 00FX522 + physical id: 176 + bus info: cpu@10 + version: 2.1 (pvr 004b 0201) + ... + configuration: chip-id=1 threads=8 + +Signed-off-by: Shivaprasad G Bhat +--- + src/core/device-tree.cc | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc +index f43d34f..af665a4 100644 +--- a/src/core/device-tree.cc ++++ b/src/core/device-tree.cc +@@ -492,6 +492,8 @@ static void fill_core_vpd(hwNode & cpu, string & basepath, + return; + + chip_id = get_u32(basepath + "/ibm,chip-id"); ++ cpu.setConfig("chip-id", chip_id); ++ + data = chip_vpd[chip_id]; + xscom_path = xscoms[chip_id]; + +-- +2.33.1 + diff --git a/SOURCES/0014-volumes-fix-segfault-in-apfs-volume-code.patch b/SOURCES/0014-volumes-fix-segfault-in-apfs-volume-code.patch new file mode 100644 index 0000000..3bb8788 --- /dev/null +++ b/SOURCES/0014-volumes-fix-segfault-in-apfs-volume-code.patch @@ -0,0 +1,31 @@ +From 82df4fa7d3705f2f61282ed5b22074d4e0a6efc4 Mon Sep 17 00:00:00 2001 +From: Harry Mallon +Date: Thu, 23 Apr 2020 21:18:47 +0100 +Subject: [PATCH 14/65] volumes: fix segfault in apfs volume code + +--- + src/core/volumes.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/core/volumes.cc b/src/core/volumes.cc +index e703523..6fce2ee 100644 +--- a/src/core/volumes.cc ++++ b/src/core/volumes.cc +@@ -784,12 +784,13 @@ struct apfs_super_block { + + static bool detect_apfs(hwNode & n, source & s) + { +- static char buffer[sizeof(apfs_super_block)]; ++ static char buffer[APFS_STANDARD_BLOCK_SIZE]; + source apfsvolume; + apfs_super_block *sb = (apfs_super_block*)buffer; + unsigned long block_size; + + apfsvolume = s; ++ apfsvolume.blocksize = APFS_STANDARD_BLOCK_SIZE; + + if(readlogicalblocks(apfsvolume, buffer, 0, 1)!=1) + return false; +-- +2.33.1 + diff --git a/SOURCES/0015-merge-Github-PR-53.patch b/SOURCES/0015-merge-Github-PR-53.patch new file mode 100644 index 0000000..7923b67 --- /dev/null +++ b/SOURCES/0015-merge-Github-PR-53.patch @@ -0,0 +1,58 @@ +From 89759485f86a48526b4f508a10f7478c76a3f71e Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Fri, 15 May 2020 16:00:08 +0200 +Subject: [PATCH 15/65] merge Github PR #53 + +--- + src/core/cpuinfo.cc | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +diff --git a/src/core/cpuinfo.cc b/src/core/cpuinfo.cc +index eceb83a..49f3052 100644 +--- a/src/core/cpuinfo.cc ++++ b/src/core/cpuinfo.cc +@@ -446,6 +446,7 @@ string value) + + if (cpu) + { ++ hw::value family, model, stepping; + + // x86 CPUs are assumed to be 32 bits per default + if(cpu->getWidth()==0) cpu->setWidth(32); +@@ -471,6 +472,13 @@ string value) + cpu->addHint(id, stoll(value, NULL, 0)); + if (id == "stepping") + cpu->addHint(id, stoll(value, NULL, 0)); ++ ++ family = cpu->getHint("cpu family"); ++ model = cpu->getHint("model"); ++ stepping = cpu->getHint("stepping"); ++ if(family.defined() && model.defined() && stepping.defined()) ++ cpu->setVersion(tostring(family.asInteger())+"."+tostring(model.asInteger())+"."+tostring(stepping.asInteger())); ++ + //if ((id == "cpu MHz") && (cpu->getSize() == 0)) + //{ + //cpu->setSize((long long) (1000000L * atof(value.c_str()))); +@@ -675,17 +683,8 @@ bool scan_cpuinfo(hwNode & n) + } + + hwNode *cpu = getcpu(n, 0); +- if(cpu) +- { +- hw::value family, model, stepping; +- family = cpu->getHint("cpu family"); +- model = cpu->getHint("model"); +- stepping = cpu->getHint("stepping"); +- if(family.defined() && model.defined() && stepping.defined()) +- cpu->setVersion(tostring(family.asInteger())+"."+tostring(model.asInteger())+"."+tostring(stepping.asInteger())); +- if(n.getWidth()==0) +- n.setWidth(cpu->getWidth()); +- } ++ if(cpu && (n.getWidth()==0)) ++ n.setWidth(cpu->getWidth()); + + return true; + } +-- +2.33.1 + diff --git a/SOURCES/0016-devtree-Add-capabilites-to-the-OPAL-Firmware.patch b/SOURCES/0016-devtree-Add-capabilites-to-the-OPAL-Firmware.patch new file mode 100644 index 0000000..e8deae8 --- /dev/null +++ b/SOURCES/0016-devtree-Add-capabilites-to-the-OPAL-Firmware.patch @@ -0,0 +1,96 @@ +From 29f69ac618fd5ace9ed9aae7839b5cfdc1fb5130 Mon Sep 17 00:00:00 2001 +From: Shivaprasad G Bhat +Date: Wed, 1 Apr 2020 09:25:52 -0500 +Subject: [PATCH 16/65] devtree: Add capabilites to the OPAL Firmware + +On OpenPower systems, the presence of the "/ibm,opal" entry in the device tree +signifies machines are running under OPAL firmware (i.e skiboot). Under this +node OPAL exports certain available interfaces. And also this node have a +compatible property listing "ibm,opal-v which denotes the OPAL compatability. + +This change adds a function to parse information about those OPAL firmware +capabilities and add it to skiboot firmware node. With a current OpenPower +machine, we get something like this: + + *-firmware:0 + description: skiboot + product: OPAL firmware + physical id: 2 + version: 5.4.3-35bf9d9 + capabilities: opal-v2 opal-v3 prd ipmi + + +Signed-off-by: Pridhiviraj Paidipeddi +Signed-off-by: Shivaprasad G Bhat +--- + src/core/device-tree.cc | 42 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + +diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc +index af665a4..e7227e1 100644 +--- a/src/core/device-tree.cc ++++ b/src/core/device-tree.cc +@@ -219,11 +219,48 @@ static void scan_devtree_bootrom(hwNode & core) + } + } + ++static hwNode *add_base_opal_node(hwNode & core) ++{ ++ vector < string >:: iterator it; ++ vector < string > compat; ++ string basepath = DEVICETREE "/ibm,opal"; ++ hwNode opal("firmware"); ++ ++ if (!exists(basepath)) ++ return NULL; ++ ++ pushd(basepath); ++ ++ opal.setProduct("OPAL firmware"); ++ opal.setDescription("skiboot"); ++ ++ compat = get_strings(basepath + "/compatible"); ++ for (it = compat.begin(); it != compat.end(); ++it) { ++ if (matches(*it, "^ibm,opal-v")) ++ opal.addCapability((*it).erase(0,4)); ++ } ++ ++ if (exists(basepath + "/ipmi/compatible") && ++ matches(get_string(basepath + "/ipmi/compatible"), "^ibm,opal-ipmi")) ++ opal.addCapability("ipmi"); ++ ++ if (exists(basepath + "/diagnostics/compatible") && ++ matches(get_string(basepath + "/diagnostics/compatible"), "^ibm,opal-prd")) ++ opal.addCapability("prd"); ++ ++ popd(); ++ ++ opal.claim(); ++ return core.addChild(opal); ++} ++ + static void scan_devtree_firmware_powernv(hwNode & core) + { + int n; + struct dirent **namelist; + ++ hwNode *opal = add_base_opal_node(core); ++ + if (!exists(DEVICETREE "/ibm,firmware-versions")) + return; + +@@ -245,6 +282,11 @@ static void scan_devtree_firmware_powernv(hwNode & core) + fwnode.setDescription(sname); + fwnode.setVersion(hw::strip(get_string(fullpath))); + fwnode.claim(); ++ if (opal && sname == "skiboot") { ++ opal->merge(fwnode); ++ free(namelist[i]); ++ continue; ++ } + core.addChild(fwnode); + } + free(namelist[i]); +-- +2.33.1 + diff --git a/SOURCES/0017-fix-issue-with-logical-names-being-truncated-dev-sda.patch b/SOURCES/0017-fix-issue-with-logical-names-being-truncated-dev-sda.patch new file mode 100644 index 0000000..db0680c --- /dev/null +++ b/SOURCES/0017-fix-issue-with-logical-names-being-truncated-dev-sda.patch @@ -0,0 +1,29 @@ +From 4348e283f8a0bdd40b97c5d0b6e12354576b3113 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Mon, 25 May 2020 09:31:05 +0200 +Subject: [PATCH 17/65] =?UTF-8?q?fix=20issue=20with=20logical=20names=20be?= + =?UTF-8?q?ing=20truncated=20(`/dev/sda`=20=E2=86=92=20`sda`)?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +--- + src/core/hw.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/hw.cc b/src/core/hw.cc +index f7da370..aca424c 100644 +--- a/src/core/hw.cc ++++ b/src/core/hw.cc +@@ -1083,7 +1083,7 @@ void hwNode::setLogicalName(const string & name) + This->logicalnames.push_back("/dev/" + n); + } + else +- This->logicalnames.push_back(basename(n.c_str())); ++ This->logicalnames.push_back((n[0]=='/')?n:basename(n.c_str())); + + if(This->dev == "") + This->dev = get_devid(n); +-- +2.33.1 + diff --git a/SOURCES/0018-code-clean-up-for-read-3.patch b/SOURCES/0018-code-clean-up-for-read-3.patch new file mode 100644 index 0000000..c20f8cd --- /dev/null +++ b/SOURCES/0018-code-clean-up-for-read-3.patch @@ -0,0 +1,50 @@ +From 37c3f3934b9d03be2d0ec70caf3779e03c003c5a Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Mon, 25 May 2020 15:24:38 +0200 +Subject: [PATCH 18/65] code clean-up for read(3) + +use ssize_t instead of size_t +cf. Github PR #52 +--- + src/core/cpuinfo.cc | 2 +- + src/core/osutils.cc | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/cpuinfo.cc b/src/core/cpuinfo.cc +index 49f3052..9e41a42 100644 +--- a/src/core/cpuinfo.cc ++++ b/src/core/cpuinfo.cc +@@ -597,7 +597,7 @@ bool scan_cpuinfo(hwNode & n) + if (core) + { + char buffer[1024]; +- size_t count; ++ ssize_t count; + string cpuinfo_str = ""; + string description = "", version = ""; + string plat = platform(); +diff --git a/src/core/osutils.cc b/src/core/osutils.cc +index f023a46..a53ed89 100644 +--- a/src/core/osutils.cc ++++ b/src/core/osutils.cc +@@ -148,7 +148,7 @@ vector < string > &list) + { + char buffer[1024]; + string buffer_str = ""; +- size_t count = 0; ++ ssize_t count = 0; + data_file fd = file_open(file); + + if (file_open_error(fd)) +@@ -174,7 +174,7 @@ const string & def) + if (fd >= 0) + { + char buffer[1024]; +- size_t count = 0; ++ ssize_t count = 0; + + memset(buffer, 0, sizeof(buffer)); + result = ""; +-- +2.33.1 + diff --git a/SOURCES/0019-JSON-output-clean-up-list-object.patch b/SOURCES/0019-JSON-output-clean-up-list-object.patch new file mode 100644 index 0000000..3d1d3f8 --- /dev/null +++ b/SOURCES/0019-JSON-output-clean-up-list-object.patch @@ -0,0 +1,49 @@ +From 2b1c730b493d647bbab4854713571458e82a81e7 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 26 May 2020 01:00:37 +0200 +Subject: [PATCH 19/65] JSON output clean-up (list/object) + +--- + src/core/hw.cc | 5 ++--- + src/lshw.cc | 1 + + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/hw.cc b/src/core/hw.cc +index aca424c..ab345fe 100644 +--- a/src/core/hw.cc ++++ b/src/core/hw.cc +@@ -1400,7 +1400,7 @@ string hwNode::asJSON(unsigned level) + config = getConfigKeys(); + resources = getResources("\" value=\""); + +- if (level == 0) ++ if (::enabled("output:list") && level == 0) + { + out << "[" << endl; + } +@@ -1665,9 +1665,8 @@ string hwNode::asJSON(unsigned level) + out << "}"; + } + +- if (level == 0) ++ if (::enabled("output:list") && level == 0) + { +- out.seekp(-2, std::ios_base::end); + out << endl << "]" << endl; + } + +diff --git a/src/lshw.cc b/src/lshw.cc +index 219a008..571b1c3 100644 +--- a/src/lshw.cc ++++ b/src/lshw.cc +@@ -84,6 +84,7 @@ char **argv) + + disable("isapnp"); + ++ disable("output:list"); + disable("output:json"); + disable("output:db"); + disable("output:xml"); +-- +2.33.1 + diff --git a/SOURCES/0020-clean-up-JSON-output.patch b/SOURCES/0020-clean-up-JSON-output.patch new file mode 100644 index 0000000..1129f7b --- /dev/null +++ b/SOURCES/0020-clean-up-JSON-output.patch @@ -0,0 +1,62 @@ +From 15565229509455527de9ce7cbb9530e2b31d043b Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Wed, 27 May 2020 01:07:16 +0200 +Subject: [PATCH 20/65] clean-up JSON output + +--- + src/core/hw.cc | 29 +++++++++++++++++++++++++---- + 1 file changed, 25 insertions(+), 4 deletions(-) + +diff --git a/src/core/hw.cc b/src/core/hw.cc +index ab345fe..6aea7cf 100644 +--- a/src/core/hw.cc ++++ b/src/core/hw.cc +@@ -1650,13 +1650,20 @@ string hwNode::asJSON(unsigned level) + resources.clear(); + } + +- for (unsigned int i = 0; i < countChildren(); i++) ++ if(!::enabled("output:list") && countChildren()>0) + { +- out << getChild(i)->asJSON(visible(getClassName()) ? level + 2 : 1); +- if (visible(getChild(i)->getClassName())) ++ out << "," << endl; ++ out << spaces(2*level+2); ++ out << "\"children\" : ["; ++ for (unsigned int i = 0; i < countChildren(); i++) + { +- out << "," << endl; ++ out << getChild(i)->asJSON(visible(getClassName()) ? level + 2 : 1); ++ if (visible(getChild(i)->getClassName()) && i0) ++ { ++ bool needcomma = visible(getClassName()); ++ for (unsigned int i = 0; i < countChildren(); i++) ++ { ++ string json = getChild(i)->asJSON(visible(getClassName()) ? level + 2 : 1); ++ ++ if(needcomma && strip(json)!="") ++ out << "," << endl; ++ out << getChild(i)->asJSON(visible(getClassName()) ? level + 2 : 1); ++ needcomma |= strip(json)!=""; ++ } ++ } ++ + if (::enabled("output:list") && level == 0) + { + out << endl << "]" << endl; +-- +2.33.1 + diff --git a/SOURCES/0021-report-product-model-on-Power-systems.patch b/SOURCES/0021-report-product-model-on-Power-systems.patch new file mode 100644 index 0000000..ae9a377 --- /dev/null +++ b/SOURCES/0021-report-product-model-on-Power-systems.patch @@ -0,0 +1,26 @@ +From 3775782808e8b9b8aa72ed2ce23e145433e193cf Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Wed, 27 May 2020 01:16:20 +0200 +Subject: [PATCH 21/65] report product model on Power systems + +Github PR #54 +--- + src/core/device-tree.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc +index e7227e1..027ad16 100644 +--- a/src/core/device-tree.cc ++++ b/src/core/device-tree.cc +@@ -1396,7 +1396,7 @@ static void get_ibm_model(hwNode & n) + { + if (ibm_model_defs[i].model == machinetype || ibm_model_defs[i].model == model) + { +- n.setProduct(ibm_model_defs[i].modelname); ++ n.setProduct(n.getProduct() + " (" + ibm_model_defs[i].modelname + ")"); + n.addHint("icon", string(ibm_model_defs[i].icon)); + n.setConfig("chassis", ibm_model_defs[i].chassis); + return; +-- +2.33.1 + diff --git a/SOURCES/0022-Fix-few-memory-leaks.patch b/SOURCES/0022-Fix-few-memory-leaks.patch new file mode 100644 index 0000000..be914ca --- /dev/null +++ b/SOURCES/0022-Fix-few-memory-leaks.patch @@ -0,0 +1,149 @@ +From 71cf63b7bb7bb212580cc7c8e6c75a4f645d79f1 Mon Sep 17 00:00:00 2001 +From: Shivaprasad G Bhat +Date: Wed, 20 May 2020 06:27:05 -0500 +Subject: [PATCH 22/65] Fix few memory leaks + +Valgrind showed some leaks with scandir usage in sysfs.cc. +Patch audits all the scandir usage and fixes where required. + +Signed-off-by: Shivaprasad G Bhat +--- + src/core/parisc.cc | 10 ++++++---- + src/core/spd.cc | 4 ++++ + src/core/sysfs.cc | 32 ++++++++++++++++++++++++++++---- + 3 files changed, 38 insertions(+), 8 deletions(-) + +diff --git a/src/core/parisc.cc b/src/core/parisc.cc +index 80344d2..1e531e3 100644 +--- a/src/core/parisc.cc ++++ b/src/core/parisc.cc +@@ -561,11 +561,13 @@ static bool scan_device(hwNode & node, string name = "") + else + { + for (int i = 0; i < n; i++) +- if(matches(namelist[i]->d_name, "^[0-9]+(:[0-9]+)*$")) + { +- pushd(namelist[i]->d_name); +- scan_device(curnode?*curnode:node, namelist[i]->d_name); +- popd(); ++ if(matches(namelist[i]->d_name, "^[0-9]+(:[0-9]+)*$")) ++ { ++ pushd(namelist[i]->d_name); ++ scan_device(curnode?*curnode:node, namelist[i]->d_name); ++ popd(); ++ } + free(namelist[i]); + } + free(namelist); +diff --git a/src/core/spd.cc b/src/core/spd.cc +index 061d0fd..a304d06 100644 +--- a/src/core/spd.cc ++++ b/src/core/spd.cc +@@ -192,8 +192,12 @@ static bool scan_eeproms(hwNode & memory) + return false; + + for (int i = 0; i < n; i++) ++ { + if (scan_eeprom(memory, namelist[i]->d_name)) + current_bank++; ++ free(namelist[i]); ++ } ++ free(namelist); + + return true; + } +diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc +index ee8b1da..4e2df1c 100644 +--- a/src/core/sysfs.cc ++++ b/src/core/sysfs.cc +@@ -83,7 +83,7 @@ static string sysfs_getbustype(const string & path) + { + struct dirent **namelist; + int i, n; +- string devname; ++ string bustype = ""; + + /* + to determine to which kind of bus a device is connected: +@@ -96,17 +96,28 @@ static string sysfs_getbustype(const string & path) + n = scandir(".", &namelist, selectdir, alphasort); + popd(); + ++ if (n <= 0) ++ return ""; ++ + for (i = 0; i < n; i++) + { +- devname = ++ string devname = + string(fs.path + "/bus/") + string(namelist[i]->d_name) + + "/devices/" + basename(path.c_str()); + + if (samefile(devname, path)) +- return string(namelist[i]->d_name); ++ { ++ bustype = string(namelist[i]->d_name); ++ break; ++ } ++ free(namelist[i]); + } + +- return ""; ++ for (int j = i; j < n; j++) ++ free(namelist[j]); ++ free(namelist); ++ ++ return bustype; + } + + +@@ -405,7 +416,11 @@ vector < entry > entry::devices() const + entry e = sysfs::entry(This->devpath + "/" + string(namelist[i]->d_name)); + if(e.hassubdir("subsystem")) + result.push_back(e); ++ free(namelist[i]); + } ++ if (namelist) ++ free(namelist); ++ + if(pushd("block")) + { + int count = scandir(".", &namelist, selectdir, alphasort); +@@ -414,7 +429,10 @@ vector < entry > entry::devices() const + entry e = sysfs::entry(This->devpath + "/block/" + string(namelist[i]->d_name)); + if(e.hassubdir("subsystem")) + result.push_back(e); ++ free(namelist[i]); + } ++ if (namelist) ++ free(namelist); + popd(); + } + popd(); +@@ -435,8 +453,11 @@ vector < entry > sysfs::entries_by_bus(const string & busname) + { + entry e = sysfs::entry::byBus(busname, namelist[i]->d_name); + result.push_back(e); ++ free(namelist[i]); + } + popd(); ++ if (namelist) ++ free(namelist); + return result; + } + +@@ -454,8 +475,11 @@ vector < entry > sysfs::entries_by_class(const string & classname) + { + entry e = sysfs::entry::byClass(classname, namelist[i]->d_name); + result.push_back(e); ++ free(namelist[i]); + } + popd(); ++ if (namelist) ++ free(namelist); + return result; + } + +-- +2.33.1 + diff --git a/SOURCES/0023-Build-against-gtk3-instead-of-gtk2.patch b/SOURCES/0023-Build-against-gtk3-instead-of-gtk2.patch new file mode 100644 index 0000000..3fd64c8 --- /dev/null +++ b/SOURCES/0023-Build-against-gtk3-instead-of-gtk2.patch @@ -0,0 +1,49 @@ +From ad4ecfd29c29f6895aaf02092e6574299a2b5aa9 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 03:12:51 +0200 +Subject: [PATCH 23/65] Build against gtk3 instead of gtk2 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Since gtk2 is on life support, it makes sense to build the gui code with +gtk3 nowadays. + +I went for 3.24 because that’s the version I have available on my +system, but it is probable that previous versions would also work, I +don’t know. +--- + lshw.spec.in | 4 ++-- + src/gui/gtk-lshw.ui | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/lshw.spec.in b/lshw.spec.in +index e837fd4..f6884ab 100644 +--- a/lshw.spec.in ++++ b/lshw.spec.in +@@ -31,8 +31,8 @@ http://lshw.ezix.org/ + Summary: HardWare LiSter (GUI version) + Group: Applications/System + Requires: %{name} >= %{version} +-Requires: gtk2 >= 2.4 +-BuildRequires: gtk2-devel >= 2.4 ++Requires: gtk3 >= 3.24 ++BuildRequires: gtk3-devel >= 3.24 + + %description gui + lshw (Hardware Lister) is a small tool to provide detailed informaton on +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index 73fc08a..25ab1ad 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -1,6 +1,6 @@ + + +- ++ + + False + About +-- +2.33.1 + diff --git a/SOURCES/0024-Remove-deprecated-stock-messages.patch b/SOURCES/0024-Remove-deprecated-stock-messages.patch new file mode 100644 index 0000000..ed86ae8 --- /dev/null +++ b/SOURCES/0024-Remove-deprecated-stock-messages.patch @@ -0,0 +1,27 @@ +From b79101ccdbb609e3dccfe097952ab2d3d7b55951 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 03:39:46 +0200 +Subject: [PATCH 24/65] Remove deprecated stock messages + +--- + src/gui/gtk-lshw.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c +index 50dfb83..9ac525c 100644 +--- a/src/gui/gtk-lshw.c ++++ b/src/gui/gtk-lshw.c +@@ -31,8 +31,8 @@ main (int argc, char *argv[]) + GTK_BUTTONS_NONE, + "Executing this program as a normal user will give incomplete and maybe erroneous information."); + gtk_dialog_add_buttons(GTK_DIALOG(dialog), +- GTK_STOCK_QUIT, GTK_RESPONSE_CANCEL, +- GTK_STOCK_EXECUTE, GTK_RESPONSE_ACCEPT, ++ "_Quit", GTK_RESPONSE_CANCEL, ++ "_Execute", GTK_RESPONSE_ACCEPT, + NULL); + + proceed = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT); +-- +2.33.1 + diff --git a/SOURCES/0025-Remove-hack-which-is-apparently-not-useful-anymore.patch b/SOURCES/0025-Remove-hack-which-is-apparently-not-useful-anymore.patch new file mode 100644 index 0000000..9a72c1f --- /dev/null +++ b/SOURCES/0025-Remove-hack-which-is-apparently-not-useful-anymore.patch @@ -0,0 +1,44 @@ +From 8d696376c0f044507575e933b3e438e104f3ecd2 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 03:40:04 +0200 +Subject: [PATCH 25/65] Remove hack which is apparently not useful anymore + +--- + src/gui/stock.c | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/src/gui/stock.c b/src/gui/stock.c +index 08675db..46dfbe7 100644 +--- a/src/gui/stock.c ++++ b/src/gui/stock.c +@@ -89,7 +89,6 @@ lshw_gtk_stock_init(void) + static int stock_initted = 0; + GtkIconFactory *icon_factory; + int i; +- GtkWidget *win; + + if (stock_initted) + return; +@@ -101,10 +100,6 @@ lshw_gtk_stock_init(void) + + gtk_icon_factory_add_default(icon_factory); + +-/* Er, yeah, a hack, but it works. :) */ +- win = gtk_window_new(GTK_WINDOW_TOPLEVEL); +- gtk_widget_realize(win); +- + for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) + { + GdkPixbuf *pixbuf; +@@ -128,8 +123,6 @@ lshw_gtk_stock_init(void) + } + } + +- gtk_widget_destroy(win); +- + /* register logo icon size */ + gtk_icon_size_register(LSHW_ICON_SIZE_LOGO, LSHW_DEFAULT_ICON_SIZE, LSHW_DEFAULT_ICON_SIZE); + +-- +2.33.1 + diff --git a/SOURCES/0026-Use-GtkFileChooserNative-instead-of-GtkFileChooserDi.patch b/SOURCES/0026-Use-GtkFileChooserNative-instead-of-GtkFileChooserDi.patch new file mode 100644 index 0000000..c43d4ce --- /dev/null +++ b/SOURCES/0026-Use-GtkFileChooserNative-instead-of-GtkFileChooserDi.patch @@ -0,0 +1,59 @@ +From 41c04d1c5ee84b1f42a9fabf7623a98ff02b9bf1 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 04:37:55 +0200 +Subject: [PATCH 26/65] Use GtkFileChooserNative instead of + GtkFileChooserDialog + +This class allows it to work even in containers. +--- + src/gui/engine.cc | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +diff --git a/src/gui/engine.cc b/src/gui/engine.cc +index 2d2e58b..21e446e 100644 +--- a/src/gui/engine.cc ++++ b/src/gui/engine.cc +@@ -460,7 +460,7 @@ static void redirect_cout(std::ofstream &out, bool enable = true) + void save_as(GtkWidget *mainwindow) + { + struct utsname buf; +- GtkWidget *dialog = NULL; ++ GtkFileChooserNative *dialog = NULL; + GtkWidget *sanitize = NULL; + GtkFileFilter *filter = NULL; + bool proceed = true; +@@ -469,12 +469,11 @@ void save_as(GtkWidget *mainwindow) + if(!computer) // nothing to save + return; + +- dialog = gtk_file_chooser_dialog_new ("Save hardware configuration", ++ dialog = gtk_file_chooser_native_new ("Save hardware configuration", + GTK_WINDOW(mainwindow), + GTK_FILE_CHOOSER_ACTION_SAVE, +- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, +- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, +- NULL); ++ "_Save", ++ "_Cancel"); + //gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); + sanitize = gtk_check_button_new_with_label("Anonymize output"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sanitize), enabled("output:sanitize")?TRUE:FALSE); +@@ -511,7 +510,7 @@ void save_as(GtkWidget *mainwindow) + if(uname(&buf)==0) + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), buf.nodename); + +- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) ++ if (gtk_native_dialog_run (GTK_NATIVE_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + char *filename; + +@@ -603,5 +602,5 @@ void save_as(GtkWidget *mainwindow) + } + } + +- gtk_widget_destroy (dialog); ++ g_object_unref (dialog); + } +-- +2.33.1 + diff --git a/SOURCES/0027-Replace-deprecated-GtkIconFactory-with-GHashTable.patch b/SOURCES/0027-Replace-deprecated-GtkIconFactory-with-GHashTable.patch new file mode 100644 index 0000000..2f1586c --- /dev/null +++ b/SOURCES/0027-Replace-deprecated-GtkIconFactory-with-GHashTable.patch @@ -0,0 +1,202 @@ +From e342333d936293e82ff889aa6745b93a8c975543 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 05:04:19 +0200 +Subject: [PATCH 27/65] Replace deprecated GtkIconFactory with GHashTable + +This removes most warnings. A possible further improvement would be to +use GtkIconTheme instead, but it will require reorganising the SVG files +around. +--- + src/gui/engine.cc | 3 ++- + src/gui/print-gui.cc | 19 ++++++++----------- + src/gui/print-gui.h | 2 +- + src/gui/stock.c | 26 ++++++-------------------- + src/gui/stock.h | 1 - + 5 files changed, 17 insertions(+), 34 deletions(-) + +diff --git a/src/gui/engine.cc b/src/gui/engine.cc +index 21e446e..c66279e 100644 +--- a/src/gui/engine.cc ++++ b/src/gui/engine.cc +@@ -40,6 +40,7 @@ extern GtkWidget *description; + extern GtkWidget *go_up_button; + extern GtkWidget *save_button; + extern GtkWidget *statusbar; ++extern GHashTable *pixbufs; + + enum + { +@@ -224,7 +225,7 @@ static void display(GtkWidget * mainwindow) + create_tags(buffer); + + string hwpath = gethwpath(*displayed, container); +- printmarkup(*displayed, GTK_TEXT_VIEW(description), hwpath); ++ printmarkup(*displayed, GTK_TEXT_VIEW(description), hwpath, pixbufs); + } + } + +diff --git a/src/gui/print-gui.cc b/src/gui/print-gui.cc +index 861ec4c..4138424 100644 +--- a/src/gui/print-gui.cc ++++ b/src/gui/print-gui.cc +@@ -66,15 +66,12 @@ static void printsize(long long value, const hwNode & node, const string & name, + } + + +-static void inserticon(const string & icon, const string & comment, GtkTextBuffer *buffer, GtkTextIter &iter, GtkTextView * textview) ++static void inserticon(const string & icon, const string & comment, GtkTextBuffer *buffer, GtkTextIter &iter, GHashTable *pixbufs) + { + GdkPixbuf *pixbuf; + GtkTextTag *tag; + +- pixbuf = gtk_widget_render_icon(GTK_WIDGET(textview), +- icon.c_str(), +- gtk_icon_size_from_name(LSHW_ICON_SIZE_LOGO), /* size */ +- NULL); ++ pixbuf = GDK_PIXBUF(g_hash_table_lookup(pixbufs, icon.c_str())); + if(!GDK_IS_PIXBUF(pixbuf)) + return; + +@@ -87,7 +84,7 @@ static void inserticon(const string & icon, const string & comment, GtkTextBuff + } + + +-void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath) ++void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath, GHashTable *pixbufs) + { + vector < string > config; + vector < string > resources; +@@ -125,13 +122,13 @@ void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpa + gtk_text_buffer_insert (buffer, &iter, "\n", -1); + + if(node.getHint("icon").defined()) +- inserticon(string("lshw-") + node.getHint("icon").asString(), "", buffer, iter, textview); ++ inserticon(string("lshw-") + node.getHint("icon").asString(), "", buffer, iter, pixbufs); + + if(node.getHint("bus.icon").defined()) +- inserticon(string("lshw-") + node.getHint("bus.icon").asString(), "", buffer, iter, textview); ++ inserticon(string("lshw-") + node.getHint("bus.icon").asString(), "", buffer, iter, pixbufs); + + if(node.getHint("logo").defined()) +- inserticon(string("lshw-") + node.getHint("logo").asString(), "", buffer, iter, textview); ++ inserticon(string("lshw-") + node.getHint("logo").asString(), "", buffer, iter, pixbufs); + + gtk_text_buffer_insert (buffer, &iter, "\n\n", -1); + +@@ -218,10 +215,10 @@ void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpa + gtk_text_buffer_insert (buffer, &iter, "\n", -1); + + if(!node.claimed()) +- inserticon(LSHW_STOCK_DISABLED, _("this device hasn't been claimed\n"), buffer, iter, textview); ++ inserticon(LSHW_STOCK_DISABLED, _("this device hasn't been claimed\n"), buffer, iter, pixbufs); + + if(!node.enabled()) +- inserticon(LSHW_STOCK_DISABLED, _("this device has been disabled\n"), buffer, iter, textview); ++ inserticon(LSHW_STOCK_DISABLED, _("this device has been disabled\n"), buffer, iter, pixbufs); + + (void) &id; // avoid "id defined but not used" warning + } +diff --git a/src/gui/print-gui.h b/src/gui/print-gui.h +index 055f7cd..d419461 100644 +--- a/src/gui/print-gui.h ++++ b/src/gui/print-gui.h +@@ -4,7 +4,7 @@ + #include "hw.h" + #include + +-void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath); ++void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath, GHashTable *pixbufs); + + string gethwpath(hwNode & node, hwNode & base); + #endif +diff --git a/src/gui/stock.c b/src/gui/stock.c +index 46dfbe7..9e7c366 100644 +--- a/src/gui/stock.c ++++ b/src/gui/stock.c +@@ -16,6 +16,7 @@ GtkWidget *description = NULL; + GtkWidget *go_up_button = NULL; + GtkWidget *save_button = NULL; + GtkWidget *statusbar = NULL; ++GHashTable *pixbufs = NULL; + + static struct StockIcon + { +@@ -87,7 +88,6 @@ void + lshw_gtk_stock_init(void) + { + static int stock_initted = 0; +- GtkIconFactory *icon_factory; + int i; + + if (stock_initted) +@@ -95,15 +95,12 @@ lshw_gtk_stock_init(void) + + stock_initted = 1; + +-/* Setup the icon factory. */ +- icon_factory = gtk_icon_factory_new(); +- +- gtk_icon_factory_add_default(icon_factory); ++/* Setup the icons hash table. */ ++ pixbufs = g_hash_table_new(g_str_hash, g_str_equal); + + for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) + { + GdkPixbuf *pixbuf; +- GtkIconSet *iconset; + gchar *filename; + + filename = find_file(stock_icons[i].filename, "artwork"); +@@ -111,23 +108,15 @@ lshw_gtk_stock_init(void) + if (filename == NULL) + continue; + +- pixbuf = gdk_pixbuf_new_from_file(filename, NULL); ++ pixbuf = gdk_pixbuf_new_from_file_at_size(filename, LSHW_DEFAULT_ICON_SIZE, LSHW_DEFAULT_ICON_SIZE, NULL); + g_free(filename); + + if(pixbuf) /* we managed to load something */ + { +- iconset = gtk_icon_set_new_from_pixbuf(pixbuf); +- g_object_unref(G_OBJECT(pixbuf)); +- gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset); +- gtk_icon_set_unref(iconset); ++ g_hash_table_insert(pixbufs, (char*)stock_icons[i].name, pixbuf); + } + } + +-/* register logo icon size */ +- gtk_icon_size_register(LSHW_ICON_SIZE_LOGO, LSHW_DEFAULT_ICON_SIZE, LSHW_DEFAULT_ICON_SIZE); +- +- g_object_unref(G_OBJECT(icon_factory)); +- + (void) &id; /* avoid "id defined but not used" warning */ + } + +@@ -168,10 +157,7 @@ void lshw_ui_init(void) + gtk_builder_connect_signals( builder, mainwindow ); + g_object_unref( G_OBJECT( builder ) ); + +- icon = gtk_widget_render_icon(GTK_WIDGET(mainwindow), +- "lshw-logo", +- GTK_ICON_SIZE_DIALOG, +- NULL); ++ icon = g_hash_table_lookup(pixbufs, LSHW_STOCK_LOGO); + if(GDK_IS_PIXBUF(icon)) + { + gtk_window_set_icon(GTK_WINDOW(mainwindow), icon); +diff --git a/src/gui/stock.h b/src/gui/stock.h +index a0fef5b..58f788e 100644 +--- a/src/gui/stock.h ++++ b/src/gui/stock.h +@@ -43,7 +43,6 @@ + /** + * For getting the icon size for the logo + */ +-#define LSHW_ICON_SIZE_LOGO "lshw-icon-size-logo" + #define LSHW_DEFAULT_ICON_SIZE 40 + + void lshw_gtk_stock_init(void); +-- +2.33.1 + diff --git a/SOURCES/0028-Replace-the-last-GtkStock-in-overwrite-dialog.patch b/SOURCES/0028-Replace-the-last-GtkStock-in-overwrite-dialog.patch new file mode 100644 index 0000000..a2244d3 --- /dev/null +++ b/SOURCES/0028-Replace-the-last-GtkStock-in-overwrite-dialog.patch @@ -0,0 +1,28 @@ +From 8ff4b056e8fd371dca868f8967b36c6e9a4590ab Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 05:06:38 +0200 +Subject: [PATCH 28/65] Replace the last GtkStock in overwrite dialog + +Also add a mnemonic for better keyboard access to the overwrite button. +--- + src/gui/engine.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/gui/engine.cc b/src/gui/engine.cc +index c66279e..ff06074 100644 +--- a/src/gui/engine.cc ++++ b/src/gui/engine.cc +@@ -556,8 +556,8 @@ void save_as(GtkWidget *mainwindow) + "A file named %s already exists in folder %s.\n\nDo you want to overwrite it?", + basename(buffer1), dirname(buffer2)); + gtk_dialog_add_buttons(GTK_DIALOG(dialog), +- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, +- "Overwrite", GTK_RESPONSE_ACCEPT, ++ "_Cancel", GTK_RESPONSE_CANCEL, ++ "_Overwrite", GTK_RESPONSE_ACCEPT, + NULL); + proceed = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT); + gtk_widget_destroy (dialog); +-- +2.33.1 + diff --git a/SOURCES/0029-Remove-deprecated-widgets.patch b/SOURCES/0029-Remove-deprecated-widgets.patch new file mode 100644 index 0000000..78693a2 --- /dev/null +++ b/SOURCES/0029-Remove-deprecated-widgets.patch @@ -0,0 +1,48 @@ +From 0a290c29faa083767698d77b3454ca08fe2a71eb Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 05:18:25 +0200 +Subject: [PATCH 29/65] Remove deprecated widgets + +--- + src/gui/gtk-lshw.ui | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index 25ab1ad..5f21da0 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -114,9 +114,10 @@ + + + +- ++ + True + False ++ GTK_ORIENTATION_VERTICAL + + + True +@@ -292,15 +293,17 @@ + + + +- ++ + True + True ++ GTK_ORIENTATION_HORIZONTAL + +- ++ + 350 + True + False + True ++ GTK_ORIENTATION_HORIZONTAL + + + True +-- +2.33.1 + diff --git a/SOURCES/0030-Remove-deprecated-use_action_appearance-property.patch b/SOURCES/0030-Remove-deprecated-use_action_appearance-property.patch new file mode 100644 index 0000000..cede08f --- /dev/null +++ b/SOURCES/0030-Remove-deprecated-use_action_appearance-property.patch @@ -0,0 +1,128 @@ +From 6cf78e942827dd01b91607704c7bfad9a1a1541d Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 06:45:43 +0200 +Subject: [PATCH 30/65] Remove deprecated use_action_appearance property + +--- + src/gui/gtk-lshw.ui | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index 5f21da0..1656f80 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -27,7 +27,6 @@ + True + True + False +- False + True + + +@@ -73,7 +72,6 @@ + True + True + True +- False + none + http://www.ezix.org/ + +@@ -126,7 +124,6 @@ + + True + False +- False + _File + True + +@@ -138,7 +135,6 @@ + gtk-save + True + False +- False + True + True + +@@ -148,7 +144,6 @@ + + True + False +- False + + + +@@ -156,7 +151,6 @@ + gtk-quit + True + False +- False + True + True + +@@ -170,7 +164,6 @@ + + True + False +- False + _View + True + +@@ -182,7 +175,6 @@ + gtk-refresh + True + False +- False + True + True + +@@ -196,7 +188,6 @@ + + True + False +- False + _Help + True + +@@ -208,7 +199,6 @@ + gtk-about + True + False +- False + True + True + +@@ -235,7 +225,6 @@ + True + False + False +- False + gtk-go-up + + +@@ -249,7 +238,6 @@ + True + False + Rescan the hardware +- False + gtk-refresh + + +@@ -263,7 +251,6 @@ + True + False + False +- False + gtk-save + + +@@ -276,7 +263,6 @@ + + True + False +- False + gtk-quit + + +-- +2.33.1 + diff --git a/SOURCES/0031-Move-to-GtkApplication.patch b/SOURCES/0031-Move-to-GtkApplication.patch new file mode 100644 index 0000000..06e83bf --- /dev/null +++ b/SOURCES/0031-Move-to-GtkApplication.patch @@ -0,0 +1,98 @@ +From 5fd82e398ba94766f0981f97988c8f14ab4297c5 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 05:53:57 +0200 +Subject: [PATCH 31/65] Move to GtkApplication + +This will eventually let us use GActions to build our menus and buttons. +--- + src/gui/gtk-lshw.c | 36 ++++++++++++++++++++++-------------- + src/gui/gtk-lshw.ui | 3 +-- + 2 files changed, 23 insertions(+), 16 deletions(-) + +diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c +index 9ac525c..6c0f0bb 100644 +--- a/src/gui/gtk-lshw.c ++++ b/src/gui/gtk-lshw.c +@@ -11,17 +11,10 @@ static char *id = "@(#) $Id$"; + + extern GtkWidget *mainwindow; + +-int +-main (int argc, char *argv[]) ++static void ++activate (GApplication *app, ++ gpointer user_data) + { +-#ifndef NONLS +- bindtextdomain (PACKAGE, LOCALEDIR); +- bind_textdomain_codeset (PACKAGE, "UTF-8"); +- textdomain (PACKAGE); +-#endif +- +- gtk_init (&argc, &argv); +- + if(geteuid() != 0) + { + bool proceed = false; +@@ -39,19 +32,34 @@ main (int argc, char *argv[]) + gtk_widget_destroy (dialog); + + if(!proceed) +- return -1; ++ return; + } + + lshw_gtk_stock_init(); + lshw_ui_init(); + + if(!mainwindow) +- return(1); ++ return; + + gtk_widget_show(mainwindow); +- gtk_main (); ++ gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(mainwindow)); ++} ++ ++int ++main (int argc, char *argv[]) ++{ ++#ifndef NONLS ++ bindtextdomain (PACKAGE, LOCALEDIR); ++ bind_textdomain_codeset (PACKAGE, "UTF-8"); ++ textdomain (PACKAGE); ++#endif ++ ++ GtkApplication *app = gtk_application_new ("org.ezix.gtk-lshw", G_APPLICATION_FLAGS_NONE); ++ g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); ++ int status = g_application_run (G_APPLICATION (app), argc, argv); ++ g_object_unref (app); + + (void) &id; // avoid warning "id defined but not used" + +- return 0; ++ return status; + } +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index 1656f80..7504c76 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -102,14 +102,13 @@ + closebutton1 + + +- ++ + True + False + lshw + 700 + 480 + org.ezix.gtk-lshw +- + + + +-- +2.33.1 + diff --git a/SOURCES/0032-Replace-signals-with-GSimpleActions.patch b/SOURCES/0032-Replace-signals-with-GSimpleActions.patch new file mode 100644 index 0000000..c8f0baf --- /dev/null +++ b/SOURCES/0032-Replace-signals-with-GSimpleActions.patch @@ -0,0 +1,278 @@ +From d1690196a9007568bfce3847841ea2b509eb3150 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Fri, 10 Jul 2020 06:28:06 +0200 +Subject: [PATCH 32/65] Replace signals with GSimpleActions + +This unifies actions pertaining to the application. +--- + src/gui/callbacks.c | 62 ++++++++++++++++++++++----------------------- + src/gui/callbacks.h | 35 ++++++++++++++++--------- + src/gui/gtk-lshw.c | 14 ++++++++++ + src/gui/gtk-lshw.ui | 16 ++++++------ + 4 files changed, 76 insertions(+), 51 deletions(-) + +diff --git a/src/gui/callbacks.c b/src/gui/callbacks.c +index f8aa0cb..eec3e55 100644 +--- a/src/gui/callbacks.c ++++ b/src/gui/callbacks.c +@@ -17,17 +17,36 @@ static char *id = "@(#) $Id$"; + + G_MODULE_EXPORT + void +-refresh_display (GtkMenuItem *menuitem, +-gpointer user_data) ++on_go_up_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app) ++{ ++ go_back(mainwindow); ++} ++ ++G_MODULE_EXPORT ++void ++on_refresh_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app) + { + refresh(mainwindow); + } + ++G_MODULE_EXPORT ++void ++on_save_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app) ++{ ++ save_as(mainwindow); ++} + + G_MODULE_EXPORT + void +-on_about1_activate (GtkMenuItem *menuitem, +-gpointer user_data) ++on_about_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app) + { + if(GTK_IS_WIDGET(about)) + { +@@ -35,6 +54,14 @@ gpointer user_data) + } + } + ++G_MODULE_EXPORT ++void ++on_quit_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app) ++{ ++ g_application_quit(G_APPLICATION(app)); ++} + + G_MODULE_EXPORT + void +@@ -147,15 +174,6 @@ gpointer user_data) + } + + +-G_MODULE_EXPORT +-void +-go_up (GtkToolButton *toolbutton, +-gpointer user_data) +-{ +- go_back(mainwindow); +-} +- +- + G_MODULE_EXPORT + void + on_lshw_map (GtkWidget *widget, +@@ -163,21 +181,3 @@ gpointer user_data) + { + refresh(mainwindow); + } +- +-G_MODULE_EXPORT +-void +-on_save_activate (GtkMenuItem *menuitem, +- gpointer user_data) +-{ +- save_as(mainwindow); +-} +- +- +-G_MODULE_EXPORT +-void +-on_savebutton_clicked (GtkToolButton *toolbutton, +- gpointer user_data) +-{ +- on_save_activate(NULL, NULL); +-} +- +diff --git a/src/gui/callbacks.h b/src/gui/callbacks.h +index cc856e4..b9b9141 100644 +--- a/src/gui/callbacks.h ++++ b/src/gui/callbacks.h +@@ -1,8 +1,29 @@ + #include + +-void refresh_display (GtkMenuItem * menuitem, gpointer user_data); ++void ++on_go_up_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app); ++ ++void ++on_refresh_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app); + +-void on_about1_activate (GtkMenuItem * menuitem, gpointer user_data); ++void ++on_save_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app); ++ ++void ++on_about_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app); ++ ++void ++on_quit_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app); + + void on_aboutclose_activate (GtkButton * button, gpointer user_data); + +@@ -35,14 +56,4 @@ void on_treeview2_cursor_changed (GtkTreeView * treeview, gpointer user_data); + + void on_treeview3_cursor_changed (GtkTreeView * treeview, gpointer user_data); + +-void go_up (GtkToolButton * toolbutton, gpointer user_data); +- + void on_lshw_map (GtkWidget * widget, gpointer user_data); +- +-void +-on_save_activate (GtkMenuItem *menuitem, +- gpointer user_data); +- +-void +-on_savebutton_clicked (GtkToolButton *toolbutton, +- gpointer user_data); +diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c +index 6c0f0bb..0dc3aff 100644 +--- a/src/gui/gtk-lshw.c ++++ b/src/gui/gtk-lshw.c +@@ -6,11 +6,21 @@ + #include "config.h" + #include "stock.h" + #include "engine.h" ++#include "callbacks.h" + + static char *id = "@(#) $Id$"; + + extern GtkWidget *mainwindow; + ++static GActionEntry app_entries[] = ++{ ++ { "go_up", on_go_up_activated, NULL, NULL, NULL }, ++ { "refresh", on_refresh_activated, NULL, NULL, NULL }, ++ { "save", on_save_activated, NULL, NULL, NULL }, ++ { "about", on_about_activated, NULL, NULL, NULL }, ++ { "quit", on_quit_activated, NULL, NULL, NULL } ++}; ++ + static void + activate (GApplication *app, + gpointer user_data) +@@ -35,6 +45,10 @@ activate (GApplication *app, + return; + } + ++ g_action_map_add_action_entries (G_ACTION_MAP (app), ++ app_entries, G_N_ELEMENTS (app_entries), ++ app); ++ + lshw_gtk_stock_init(); + lshw_ui_init(); + +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index 7504c76..d24e05c 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -136,7 +136,7 @@ + False + True + True +- ++ app.save + + + +@@ -152,7 +152,7 @@ + False + True + True +- ++ app.quit + + + +@@ -176,7 +176,7 @@ + False + True + True +- ++ app.refresh + + + +@@ -200,7 +200,7 @@ + False + True + True +- ++ app.about + + + +@@ -225,7 +225,7 @@ + False + False + gtk-go-up +- ++ app.go_up + + + False +@@ -238,7 +238,7 @@ + False + Rescan the hardware + gtk-refresh +- ++ app.refresh + + + False +@@ -251,7 +251,7 @@ + False + False + gtk-save +- ++ app.save + + + False +@@ -263,7 +263,7 @@ + True + False + gtk-quit +- ++ app.quit + + + False +-- +2.33.1 + diff --git a/SOURCES/0033-Enable-Disable-GSimpleAction-instead-of-button-sensi.patch b/SOURCES/0033-Enable-Disable-GSimpleAction-instead-of-button-sensi.patch new file mode 100644 index 0000000..942b100 --- /dev/null +++ b/SOURCES/0033-Enable-Disable-GSimpleAction-instead-of-button-sensi.patch @@ -0,0 +1,153 @@ +From a116b319adf51d4eafcb264de027647244340708 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Wed, 15 Jul 2020 17:32:45 +0200 +Subject: [PATCH 33/65] Enable/Disable GSimpleAction instead of button + sensitivity + +This also fixes the Save menu item not having been disabled properly. +--- + src/gui/engine.cc | 24 +++++++----------------- + src/gui/gtk-lshw.c | 7 +++++++ + src/gui/gtk-lshw.ui | 2 -- + src/gui/stock.c | 4 ---- + 4 files changed, 14 insertions(+), 23 deletions(-) + +diff --git a/src/gui/engine.cc b/src/gui/engine.cc +index ff06074..2962ec8 100644 +--- a/src/gui/engine.cc ++++ b/src/gui/engine.cc +@@ -37,10 +37,10 @@ static hwNode *selected3 = NULL; + extern GtkWidget *mainwindow; + extern GtkWidget *list1, *list2, *list3; + extern GtkWidget *description; +-extern GtkWidget *go_up_button; +-extern GtkWidget *save_button; + extern GtkWidget *statusbar; + extern GHashTable *pixbufs; ++extern GSimpleAction *go_up_action; ++extern GSimpleAction *save_action; + + enum + { +@@ -251,14 +251,11 @@ void refresh(GtkWidget *mainwindow) + { + hwNode computer("computer", hw::system); + static bool lock = false; +- //GtkWidget * menu = lookup_widget(mainwindow, "menu"); +- //GtkWidget * save_menuitem = lookup_widget(menu, "save"); + + if(lock) return; + + lock = true; +- gtk_widget_set_sensitive(save_button, FALSE); +- //gtk_widget_set_sensitive(save_menuitem, FALSE); ++ g_simple_action_set_enabled(save_action, FALSE); + + populate_sublist(list1, NULL); + populate_sublist(list2, NULL); +@@ -273,9 +270,8 @@ void refresh(GtkWidget *mainwindow) + status(NULL); + displayed = container.addChild(computer); + +- gtk_widget_set_sensitive(go_up_button, FALSE); +- gtk_widget_set_sensitive(save_button, TRUE); +- //gtk_widget_set_sensitive(save_menuitem, TRUE); ++ g_simple_action_set_enabled(go_up_action, FALSE); ++ g_simple_action_set_enabled(save_action, TRUE); + + selected1 = NULL; + selected2 = NULL; +@@ -379,10 +375,7 @@ void browse(unsigned list, GtkTreeView *treeview) + break; + } + +- if(selected1 && (find_parent(selected1, &container)!= &container)) +- gtk_widget_set_sensitive(go_up_button, 1); +- else +- gtk_widget_set_sensitive(go_up_button, 0); ++ g_simple_action_set_enabled(go_up_action, selected1 && (find_parent(selected1, &container)!= &container)); + + (void) &::id; // avoid warning "id defined but not used" + } +@@ -404,10 +397,7 @@ void go_back(GtkWidget *mainwindow) + displayed = find_parent(displayed, &container); + } + +- if(selected1 && (find_parent(selected1, &container)!= &container)) +- gtk_widget_set_sensitive(go_up_button, 1); +- else +- gtk_widget_set_sensitive(go_up_button, 0); ++ g_simple_action_set_enabled(go_up_action, selected1 && (find_parent(selected1, &container)!= &container)); + + display(mainwindow); + } +diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c +index 0dc3aff..7b91ec5 100644 +--- a/src/gui/gtk-lshw.c ++++ b/src/gui/gtk-lshw.c +@@ -11,6 +11,8 @@ + static char *id = "@(#) $Id$"; + + extern GtkWidget *mainwindow; ++GSimpleAction *go_up_action; ++GSimpleAction *save_action; + + static GActionEntry app_entries[] = + { +@@ -48,6 +50,11 @@ activate (GApplication *app, + g_action_map_add_action_entries (G_ACTION_MAP (app), + app_entries, G_N_ELEMENTS (app_entries), + app); ++ go_up_action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (app), "go_up")); ++ save_action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (app), "save")); ++ ++ g_simple_action_set_enabled(go_up_action, FALSE); ++ g_simple_action_set_enabled(save_action, FALSE); + + lshw_gtk_stock_init(); + lshw_ui_init(); +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index d24e05c..76fcd19 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -222,7 +222,6 @@ + + + True +- False + False + gtk-go-up + app.go_up +@@ -248,7 +247,6 @@ + + + True +- False + False + gtk-save + app.save +diff --git a/src/gui/stock.c b/src/gui/stock.c +index 9e7c366..fa18f9e 100644 +--- a/src/gui/stock.c ++++ b/src/gui/stock.c +@@ -13,8 +13,6 @@ GtkWidget *list1 = NULL; + GtkWidget *list2 = NULL; + GtkWidget *list3 = NULL; + GtkWidget *description = NULL; +-GtkWidget *go_up_button = NULL; +-GtkWidget *save_button = NULL; + GtkWidget *statusbar = NULL; + GHashTable *pixbufs = NULL; + +@@ -151,8 +149,6 @@ void lshw_ui_init(void) + list2 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview2")); + list3 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview3")); + description = GTK_WIDGET(gtk_builder_get_object( builder, "description")); +- go_up_button = GTK_WIDGET(gtk_builder_get_object( builder, "upbutton")); +- save_button = GTK_WIDGET(gtk_builder_get_object( builder, "savebutton")); + statusbar = GTK_WIDGET(gtk_builder_get_object( builder, "statusbar")); + gtk_builder_connect_signals( builder, mainwindow ); + g_object_unref( G_OBJECT( builder ) ); +-- +2.33.1 + diff --git a/SOURCES/0034-Move-from-GtkMenuBar-to-GMenu.patch b/SOURCES/0034-Move-from-GtkMenuBar-to-GMenu.patch new file mode 100644 index 0000000..f8dbb51 --- /dev/null +++ b/SOURCES/0034-Move-from-GtkMenuBar-to-GMenu.patch @@ -0,0 +1,239 @@ +From bc5046d9917fe9cf84dd899f90aef5b90b7d4b04 Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Wed, 15 Jul 2020 16:54:27 +0200 +Subject: [PATCH 34/65] Move from GtkMenuBar to GMenu + +This moves forward with gtk4 support, while also allowing a global menu +for environments which use one, such as GNOME. + +I also added shortcuts so that users can press ^Q, ^R and ^S to quit, +refresh and save. +--- + src/gui/gtk-lshw.c | 2 +- + src/gui/gtk-lshw.ui | 138 ++++++++++++-------------------------------- + src/gui/stock.c | 6 +- + src/gui/stock.h | 4 +- + 4 files changed, 47 insertions(+), 103 deletions(-) + +diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c +index 7b91ec5..d3e531c 100644 +--- a/src/gui/gtk-lshw.c ++++ b/src/gui/gtk-lshw.c +@@ -57,7 +57,7 @@ activate (GApplication *app, + g_simple_action_set_enabled(save_action, FALSE); + + lshw_gtk_stock_init(); +- lshw_ui_init(); ++ lshw_ui_init(GTK_APPLICATION(app)); + + if(!mainwindow) + return; +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index 76fcd19..cf9d678 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -103,7 +103,6 @@ + + + +- True + False + lshw + 700 +@@ -115,105 +114,6 @@ + True + False + GTK_ORIENTATION_VERTICAL +- +- +- True +- False +- +- +- True +- False +- _File +- True +- +- +- True +- False +- +- +- gtk-save +- True +- False +- True +- True +- app.save +- +- +- +- +- True +- False +- +- +- +- +- gtk-quit +- True +- False +- True +- True +- app.quit +- +- +- +- +- +- +- +- +- True +- False +- _View +- True +- +- +- True +- False +- +- +- gtk-refresh +- True +- False +- True +- True +- app.refresh +- +- +- +- +- +- +- +- +- True +- False +- _Help +- True +- +- +- True +- False +- +- +- gtk-about +- True +- False +- True +- True +- app.about +- +- +- +- +- +- +- +- +- False +- True +- 0 +- +- + + + True +@@ -423,4 +323,42 @@ + + + ++ ++ ++ _File ++
++ ++ _Save ++ app.save ++ <Control>s ++ ++
++
++ ++ _Quit ++ app.quit ++ <Control>q ++ ++
++
++ ++ _View ++
++ ++ _Refresh ++ app.refresh ++ <Control>r ++ ++
++
++ ++ _Help ++
++ ++ _About ++ app.about ++ ++
++
++
+ +diff --git a/src/gui/stock.c b/src/gui/stock.c +index fa18f9e..ce0b42a 100644 +--- a/src/gui/stock.c ++++ b/src/gui/stock.c +@@ -14,6 +14,7 @@ GtkWidget *list2 = NULL; + GtkWidget *list3 = NULL; + GtkWidget *description = NULL; + GtkWidget *statusbar = NULL; ++GMenuModel *menubar = NULL; + GHashTable *pixbufs = NULL; + + static struct StockIcon +@@ -118,7 +119,7 @@ lshw_gtk_stock_init(void) + (void) &id; /* avoid "id defined but not used" warning */ + } + +-void lshw_ui_init(void) ++void lshw_ui_init(GtkApplication *app) + { + GError *error = NULL; + GtkBuilder *builder = NULL; +@@ -151,6 +152,9 @@ void lshw_ui_init(void) + description = GTK_WIDGET(gtk_builder_get_object( builder, "description")); + statusbar = GTK_WIDGET(gtk_builder_get_object( builder, "statusbar")); + gtk_builder_connect_signals( builder, mainwindow ); ++ menubar = G_MENU_MODEL( gtk_builder_get_object( builder, "menubar")); ++ gtk_window_set_application( GTK_WINDOW( mainwindow ), app ); ++ gtk_application_set_menubar( app, menubar ); + g_object_unref( G_OBJECT( builder ) ); + + icon = g_hash_table_lookup(pixbufs, LSHW_STOCK_LOGO); +diff --git a/src/gui/stock.h b/src/gui/stock.h +index 58f788e..1c732df 100644 +--- a/src/gui/stock.h ++++ b/src/gui/stock.h +@@ -45,6 +45,8 @@ + */ + #define LSHW_DEFAULT_ICON_SIZE 40 + ++typedef struct _GtkApplication GtkApplication; ++ + void lshw_gtk_stock_init(void); +-void lshw_ui_init(void); ++void lshw_ui_init(GtkApplication *); + #endif /* _STOCK_H_ */ +-- +2.33.1 + diff --git a/SOURCES/0035-Replace-the-about-GtkDialog-with-a-GtkAboutDialog.patch b/SOURCES/0035-Replace-the-about-GtkDialog-with-a-GtkAboutDialog.patch new file mode 100644 index 0000000..3fcaa90 --- /dev/null +++ b/SOURCES/0035-Replace-the-about-GtkDialog-with-a-GtkAboutDialog.patch @@ -0,0 +1,252 @@ +From e96f82ce459a6d503f70d6c7b0f762bf0d133edf Mon Sep 17 00:00:00 2001 +From: Emmanuel Gil Peyrot +Date: Sat, 1 Aug 2020 15:03:23 +0200 +Subject: [PATCH 35/65] Replace the about GtkDialog with a GtkAboutDialog + +This reduces the amount of code needed for this feature, and integrates +better with the rest of the system. +--- + src/gui/callbacks.c | 46 ++++++-------------- + src/gui/callbacks.h | 4 -- + src/gui/gtk-lshw.ui | 101 -------------------------------------------- + src/gui/stock.c | 2 - + 4 files changed, 12 insertions(+), 141 deletions(-) + +diff --git a/src/gui/callbacks.c b/src/gui/callbacks.c +index eec3e55..b108777 100644 +--- a/src/gui/callbacks.c ++++ b/src/gui/callbacks.c +@@ -10,7 +10,6 @@ + #include "engine.h" + #include + +-extern GtkWidget *about; + extern GtkWidget *mainwindow; + + static char *id = "@(#) $Id$"; +@@ -42,18 +41,6 @@ on_save_activated (GSimpleAction *action, + save_as(mainwindow); + } + +-G_MODULE_EXPORT +-void +-on_about_activated (GSimpleAction *action, +- GVariant *parameter, +- gpointer app) +-{ +- if(GTK_IS_WIDGET(about)) +- { +- gtk_widget_show(about); +- } +-} +- + G_MODULE_EXPORT + void + on_quit_activated (GSimpleAction *action, +@@ -65,25 +52,20 @@ on_quit_activated (GSimpleAction *action, + + G_MODULE_EXPORT + void +-on_aboutclose_activate (GtkButton *button, +-gpointer user_data) ++on_about_activated (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer app) + { +- if(GTK_IS_WIDGET(about)) +- { +- gtk_widget_hide(about); +- } +-} +- ++ gtk_show_about_dialog(GTK_WINDOW(mainwindow), ++ "program-name", "GTK+ frontend for lshw", ++ "website", "https://www.ezix.org/", ++ "copyright", "© 2004-2011 Lyonel Vincent\n© 2020 Emmanuel Gil Peyrot", ++ "version", getpackageversion(), ++ "license-type", GTK_LICENSE_GPL_2_0, ++ NULL); + +-G_MODULE_EXPORT +-void +-on_version_realize (GtkWidget *widget, +-gpointer user_data) +-{ + const char *latest = checkupdates(); + +- gtk_label_set_text(GTK_LABEL(widget), getpackageversion()); +- + if(latest) + { + if(strcmp(latest, getpackageversion()) != 0) +@@ -100,18 +82,14 @@ gpointer user_data) + latest); + + gtk_window_set_title(GTK_WINDOW(dialog), "Update available"); +- /* Destroy the dialog when the user responds to it (e.g. clicks a button) */ +- g_signal_connect_swapped (dialog, "response", +- G_CALLBACK (gtk_widget_destroy), +- dialog); + } + +- gtk_widget_show(dialog); ++ gtk_dialog_run(GTK_DIALOG(dialog)); ++ gtk_widget_destroy(dialog); + } + } + } + +- + G_MODULE_EXPORT + void + on_treeview1_row_activated (GtkTreeView *treeview, +diff --git a/src/gui/callbacks.h b/src/gui/callbacks.h +index b9b9141..e7636ef 100644 +--- a/src/gui/callbacks.h ++++ b/src/gui/callbacks.h +@@ -25,10 +25,6 @@ on_quit_activated (GSimpleAction *action, + GVariant *parameter, + gpointer app); + +-void on_aboutclose_activate (GtkButton * button, gpointer user_data); +- +-void on_version_realize (GtkWidget * widget, gpointer user_data); +- + void + on_treeview1_row_activated (GtkTreeView * treeview, + GtkTreePath * path, +diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui +index cf9d678..a3c6248 100644 +--- a/src/gui/gtk-lshw.ui ++++ b/src/gui/gtk-lshw.ui +@@ -1,107 +1,6 @@ + + + +- +- False +- About +- False +- center-on-parent +- True +- dialog +- True +- True +- +- +- True +- False +- vertical +- +- +- True +- False +- end +- +- +- gtk-close +- True +- True +- True +- False +- True +- +- +- +- +- False +- True +- 0 +- +- +- +- +- False +- True +- end +- 0 +- +- +- +- +- True +- False +- 20 +- 20 +- <big><b>GTK+ front-end for <tt>lshw</tt></b></big> +- +-© 2004-2011 Lyonel Vincent +-<tt>lyonel@ezix.org</tt> +- True +- center +- closebutton1 +- +- +- False +- False +- 1 +- +- +- +- +- http://www.ezix.org/ +- True +- True +- True +- True +- none +- http://www.ezix.org/ +- +- +- False +- True +- 2 +- +- +- +- +- True +- False +- VERSION +- center +- closebutton1 +- +- +- +- False +- False +- 3 +- +- +- +- +- +- closebutton1 +- +- + + False + lshw +diff --git a/src/gui/stock.c b/src/gui/stock.c +index ce0b42a..c3159b8 100644 +--- a/src/gui/stock.c ++++ b/src/gui/stock.c +@@ -8,7 +8,6 @@ static char *id = "@(#) $Id$"; + #define UIFILE "gtk-lshw.ui" + + GtkWidget *mainwindow = NULL; +-GtkWidget *about = NULL; + GtkWidget *list1 = NULL; + GtkWidget *list2 = NULL; + GtkWidget *list3 = NULL; +@@ -145,7 +144,6 @@ void lshw_ui_init(GtkApplication *app) + g_free(uiname); + + mainwindow = GTK_WIDGET( gtk_builder_get_object( builder, "mainwindow" ) ); +- about = GTK_WIDGET( gtk_builder_get_object( builder, "aboutlshw" ) ); + list1 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview1")); + list2 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview2")); + list3 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview3")); +-- +2.33.1 + diff --git a/SOURCES/0036-Update-docs-TODO.patch b/SOURCES/0036-Update-docs-TODO.patch new file mode 100644 index 0000000..77e31eb --- /dev/null +++ b/SOURCES/0036-Update-docs-TODO.patch @@ -0,0 +1,22 @@ +From 60c906d385b933fb6f5f0f2b14bfc9ea6de43a99 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Fri, 21 Aug 2020 11:38:20 +0200 +Subject: [PATCH 36/65] Update 'docs/TODO' + +--- + docs/TODO | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/docs/TODO b/docs/TODO +index 1e74710..ff0f288 100644 +--- a/docs/TODO ++++ b/docs/TODO +@@ -7,3 +7,5 @@ + * use businfo to find CPUs instead of hardcoding cpu:n form + * use sysfs for PCMCIA access + * use MPTABLE for reporting of CPUs ++ ++report SSD/rotational devices: /sys/block/DEV/queue/rotational +-- +2.33.1 + diff --git a/SOURCES/0037-Update-docs-TODO.patch b/SOURCES/0037-Update-docs-TODO.patch new file mode 100644 index 0000000..3a2e711 --- /dev/null +++ b/SOURCES/0037-Update-docs-TODO.patch @@ -0,0 +1,22 @@ +From 358e65f92dec01f13b632d1d13fb8c76e1d50ca4 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Wed, 26 Aug 2020 23:36:59 +0200 +Subject: [PATCH 37/65] Update 'docs/TODO' + +--- + docs/TODO | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/docs/TODO b/docs/TODO +index ff0f288..0b33782 100644 +--- a/docs/TODO ++++ b/docs/TODO +@@ -9,3 +9,4 @@ + * use MPTABLE for reporting of CPUs + + report SSD/rotational devices: /sys/block/DEV/queue/rotational ++better handle containers +\ No newline at end of file +-- +2.33.1 + diff --git a/SOURCES/0038-update-man-page.patch b/SOURCES/0038-update-man-page.patch new file mode 100644 index 0000000..cd58af0 --- /dev/null +++ b/SOURCES/0038-update-man-page.patch @@ -0,0 +1,76 @@ +From 2c235e6bf21e30b8e2da4d20f358df1e540a5b69 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Thu, 15 Oct 2020 14:11:58 +0200 +Subject: [PATCH 38/65] update man page + +add `-notime` option +--- + src/lshw.1 | 9 ++++++--- + src/lshw.sgml | 5 +++++ + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/src/lshw.1 b/src/lshw.1 +index 79c3619..ae6fa34 100644 +--- a/src/lshw.1 ++++ b/src/lshw.1 +@@ -1,5 +1,5 @@ + .\" auto-generated by docbook2man-spec from docbook-utils package +-.TH "LSHW" "1" "28 January 2018" "$Rev$" "" ++.TH "LSHW" "1" "15 October 2020" "$Rev$" "" + .SH NAME + lshw \- list hardware + .SH SYNOPSIS +@@ -10,7 +10,7 @@ lshw \- list hardware + .sp + \fBlshw\fR [ \fB-X\fR ] + .sp +-\fBlshw\fR [ \fB [ -html ] [ -short ] [ -xml ] [ -json ] [ -businfo ] \fR ] [ \fB-dump \fIfilename\fB\fR ] [ \fB-class \fIclass\fB\fR\fI...\fR ] [ \fB-disable \fItest\fB\fR\fI...\fR ] [ \fB-enable \fItest\fB\fR\fI...\fR ] [ \fB-sanitize\fR ] [ \fB-numeric\fR ] [ \fB-quiet\fR ] ++\fBlshw\fR [ \fB [ -html ] [ -short ] [ -xml ] [ -json ] [ -businfo ] \fR ] [ \fB-dump \fIfilename\fB\fR ] [ \fB-class \fIclass\fB\fR\fI...\fR ] [ \fB-disable \fItest\fB\fR\fI...\fR ] [ \fB-enable \fItest\fB\fR\fI...\fR ] [ \fB-sanitize\fR ] [ \fB-numeric\fR ] [ \fB-quiet\fR ] [ \fB-notime\fR ] + .SH "DESCRIPTION" + .PP + +@@ -53,7 +53,7 @@ Outputs the device tree showing hardware paths, very much like the output of HP- + Outputs the device list showing bus information, detailing SCSI, USB, IDE and PCI addresses. + .TP + \fB-dump \fIfilename\fB\fR +-Display output and dump collected information into a file (SQLite database). ++Dump collected information into a file (SQLite database). + .TP + \fB-class \fIclass\fB\fR + Only show the given class of hardware. \fIclass\fR can be found using \fBlshw -short\fR or \fBlshw -businfo\fR\&. +@@ -74,6 +74,9 @@ Remove potentially sensitive information from output (IP addresses, serial numbe + .TP + \fB-numeric\fR + Also display numeric IDs (for PCI and USB devices). ++.TP ++\fB-notime\fR ++Exclude volatile attributes (timestamps) from output. + .SH "BUGS" + .PP + \fBlshw\fR currently does not detect +diff --git a/src/lshw.sgml b/src/lshw.sgml +index 8c1c49e..5e92cbf 100644 +--- a/src/lshw.sgml ++++ b/src/lshw.sgml +@@ -43,6 +43,7 @@ list hardware + + + ++ + + + +@@ -126,6 +127,10 @@ Remove potentially sensitive information from output (IP addresses, serial numbe + + Also display numeric IDs (for PCI and USB devices). + ++-notime ++ ++Exclude volatile attributes (timestamps) from output. ++ + + + +-- +2.33.1 + diff --git a/SOURCES/0039-fix-man-page-after-previous-update.patch b/SOURCES/0039-fix-man-page-after-previous-update.patch new file mode 100644 index 0000000..4d334fd --- /dev/null +++ b/SOURCES/0039-fix-man-page-after-previous-update.patch @@ -0,0 +1,40 @@ +From 56f1de9d1e4d6ff92d98530c0d3d91b353a311b9 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Thu, 15 Oct 2020 14:22:05 +0200 +Subject: [PATCH 39/65] fix man page after previous update + +SGML source was not in sync with man page +--- + src/lshw.1 | 2 +- + src/lshw.sgml | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/lshw.1 b/src/lshw.1 +index ae6fa34..74b0e42 100644 +--- a/src/lshw.1 ++++ b/src/lshw.1 +@@ -53,7 +53,7 @@ Outputs the device tree showing hardware paths, very much like the output of HP- + Outputs the device list showing bus information, detailing SCSI, USB, IDE and PCI addresses. + .TP + \fB-dump \fIfilename\fB\fR +-Dump collected information into a file (SQLite database). ++Display output and dump collected information into a file (SQLite database). + .TP + \fB-class \fIclass\fB\fR + Only show the given class of hardware. \fIclass\fR can be found using \fBlshw -short\fR or \fBlshw -businfo\fR\&. +diff --git a/src/lshw.sgml b/src/lshw.sgml +index 5e92cbf..d190279 100644 +--- a/src/lshw.sgml ++++ b/src/lshw.sgml +@@ -101,7 +101,7 @@ Outputs the device list showing bus information, detailing SCSI + -dump filename + +-Dump collected information into a file (SQLite database). ++Display output and dump collected information into a file (SQLite database). + + -class class + +-- +2.33.1 + diff --git a/SOURCES/0040-Report-correct-memory-size-on-SMBIOS-2.7.patch b/SOURCES/0040-Report-correct-memory-size-on-SMBIOS-2.7.patch new file mode 100644 index 0000000..b3a9c07 --- /dev/null +++ b/SOURCES/0040-Report-correct-memory-size-on-SMBIOS-2.7.patch @@ -0,0 +1,35 @@ +From 5c4bfb1a4baae1bea11cc9f629bc48ee12e733a7 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Sun, 10 Jan 2021 00:38:10 +0100 +Subject: [PATCH 40/65] Report correct memory size on SMBIOS < 2.7 + +Github PR#60 +--- + src/core/dmi.cc | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index 30b3ab3..d33d487 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -1567,10 +1567,13 @@ int dmiversionrev) + + // size + u = data[0x0D] << 8 | data[0x0C]; +- if(u == 0x7FFF) { +- unsigned long long extendsize = (data[0x1F] << 24) | (data[0x1E] << 16) | (data[0x1D] << 8) | data[0x1C]; +- extendsize &= 0x7FFFFFFFUL; +- size = extendsize * 1024ULL * 1024ULL; ++ if ((dmiversionmaj > 2) ++ || ((dmiversionmaj == 2) && (dmiversionmin >= 7))) { ++ if(u == 0x7FFF) { ++ unsigned long long extendsize = (data[0x1F] << 24) | (data[0x1E] << 16) | (data[0x1D] << 8) | data[0x1C]; ++ extendsize &= 0x7FFFFFFFUL; ++ size = extendsize * 1024ULL * 1024ULL; ++ } + } + else + if (u != 0xFFFF) +-- +2.33.1 + diff --git a/SOURCES/0041-Add-JEDEC-manufacturer.patch b/SOURCES/0041-Add-JEDEC-manufacturer.patch new file mode 100644 index 0000000..f34353b --- /dev/null +++ b/SOURCES/0041-Add-JEDEC-manufacturer.patch @@ -0,0 +1,25 @@ +From 156a95e949beaaf41650134b34160d7e2bcecae6 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Sun, 10 Jan 2021 00:55:16 +0100 +Subject: [PATCH 41/65] Add JEDEC manufacturer + +cf. Github PR#59 +--- + src/core/jedec.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/core/jedec.cc b/src/core/jedec.cc +index dc7fe5e..502bd3d 100644 +--- a/src/core/jedec.cc ++++ b/src/core/jedec.cc +@@ -17,6 +17,7 @@ static const char * jedec_id[] = { + "0500", "Elpida", + "07", "Hitachi", + "8007", "Hitachi", ++ "081A", "Xi'an UnilC Semiconductors", + "08", "Inmos", + "8008", "Inmos", + "0B", "Intersil", +-- +2.33.1 + diff --git a/SOURCES/0042-Avoid-crash-on-device-tree-parsing.patch b/SOURCES/0042-Avoid-crash-on-device-tree-parsing.patch new file mode 100644 index 0000000..ee73683 --- /dev/null +++ b/SOURCES/0042-Avoid-crash-on-device-tree-parsing.patch @@ -0,0 +1,27 @@ +From 2017dad4e66ec7c9e6b25d551c6867107b958ddd Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Sun, 10 Jan 2021 00:57:48 +0100 +Subject: [PATCH 42/65] Avoid crash on device-tree parsing + +cf. Github PR#58 +--- + src/core/device-tree.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc +index 027ad16..d3188c6 100644 +--- a/src/core/device-tree.cc ++++ b/src/core/device-tree.cc +@@ -1506,7 +1506,8 @@ bool scan_device_tree(hwNode & n) + scan_devtree_cpu_power(*core); + } + else { +- scan_devtree_cpu(*core); ++ if (exists(DEVICETREE "/cpus")) ++ scan_devtree_cpu(*core); + } + scan_devtree_memory(*core); + scan_devtree_memory_ibm(*core); +-- +2.33.1 + diff --git a/SOURCES/0044-fix-potential-crash.patch b/SOURCES/0044-fix-potential-crash.patch new file mode 100644 index 0000000..355c032 --- /dev/null +++ b/SOURCES/0044-fix-potential-crash.patch @@ -0,0 +1,26 @@ +From ff634c9a714fe25d3394c9713929c80888c0c01d Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Sun, 10 Jan 2021 01:03:50 +0100 +Subject: [PATCH 44/65] fix potential crash + +cf. Github PR#47 +--- + src/core/dmi.cc | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index d33d487..fe6ad39 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -1924,6 +1924,8 @@ static bool scan_dmi_sysfs(hwNode & n) + + ifstream ep_stream(SYSFSDMI "/smbios_entry_point", + ifstream::in | ifstream::binary | ifstream::ate); ++ if (!ep_stream) ++ return false; + ifstream::pos_type ep_len = ep_stream.tellg(); + vector < u8 > ep_buf(ep_len); + ep_stream.seekg(0, ifstream::beg); +-- +2.33.1 + diff --git a/SOURCES/0045-improve-portability-esp.-musl.patch b/SOURCES/0045-improve-portability-esp.-musl.patch new file mode 100644 index 0000000..3f3b896 --- /dev/null +++ b/SOURCES/0045-improve-portability-esp.-musl.patch @@ -0,0 +1,120 @@ +From d3c66a6b2a0799d6982f4dc77b291934fcba80c9 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Sun, 10 Jan 2021 01:19:24 +0100 +Subject: [PATCH 45/65] improve portability (esp. musl) + +cf. Github PR#56 +--- + src/core/abi.cc | 4 +--- + src/core/sysfs.cc | 21 +++++++++++---------- + 2 files changed, 12 insertions(+), 13 deletions(-) + +diff --git a/src/core/abi.cc b/src/core/abi.cc +index adff7b5..76c664c 100644 +--- a/src/core/abi.cc ++++ b/src/core/abi.cc +@@ -20,9 +20,7 @@ __ID("@(#) $Id: mem.cc 1352 2006-05-27 23:54:13Z ezix $"); + bool scan_abi(hwNode & system) + { + // are we compiled as 32- or 64-bit process ? +- long sc = sysconf(LONG_BIT); +- if(sc==-1) sc = sysconf(_SC_LONG_BIT); +- if(sc!=-1) system.setWidth(sc); ++ system.setWidth(LONG_BIT); + + pushd(PROC_SYS); + +diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc +index 4e2df1c..d7a20c9 100644 +--- a/src/core/sysfs.cc ++++ b/src/core/sysfs.cc +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + + + __ID("@(#) $Id$"); +@@ -103,7 +104,7 @@ static string sysfs_getbustype(const string & path) + { + string devname = + string(fs.path + "/bus/") + string(namelist[i]->d_name) + +- "/devices/" + basename(path.c_str()); ++ "/devices/" + basename(const_cast(path.c_str())); + + if (samefile(devname, path)) + { +@@ -151,7 +152,7 @@ static string sysfstobusinfo(const string & path) + + if (bustype == "usb") + { +- string name = basename(path.c_str()); ++ string name = basename(const_cast(path.c_str())); + if (matches(name, "^[0-9]+-[0-9]+(\\.[0-9]+)*:[0-9]+\\.[0-9]+$")) + { + size_t colon = name.rfind(":"); +@@ -162,7 +163,7 @@ static string sysfstobusinfo(const string & path) + + if (bustype == "virtio") + { +- string name = basename(path.c_str()); ++ string name = basename(const_cast(path.c_str())); + if (name.compare(0, 6, "virtio") == 0) + return "virtio@" + name.substr(6); + else +@@ -170,10 +171,10 @@ static string sysfstobusinfo(const string & path) + } + + if (bustype == "vio") +- return string("vio@") + basename(path.c_str()); ++ return string("vio@") + basename(const_cast(path.c_str())); + + if (bustype == "ccw") +- return string("ccw@") + basename(path.c_str()); ++ return string("ccw@") + basename(const_cast(path.c_str())); + + if (bustype == "ccwgroup") + { +@@ -251,7 +252,7 @@ string entry::driver() const + string driverlink = This->devpath + "/driver"; + if (!exists(driverlink)) + return ""; +- return basename(readlink(driverlink).c_str()); ++ return basename(const_cast(readlink(driverlink).c_str())); + } + + +@@ -339,7 +340,7 @@ string entry::name_in_class(const string & classname) const + + string entry::name() const + { +- return basename(This->devpath.c_str()); ++ return basename(const_cast(This->devpath.c_str())); + } + + +@@ -351,17 +352,17 @@ entry entry::parent() const + + string entry::classname() const + { +- return basename(dirname(This->devpath).c_str()); ++ return basename(const_cast(dirname(This->devpath).c_str())); + } + + string entry::subsystem() const + { +- return basename(realpath(This->devpath+"/subsystem").c_str()); ++ return basename(const_cast(realpath(This->devpath+"/subsystem").c_str())); + } + + bool entry::isvirtual() const + { +- return string(basename(dirname(dirname(This->devpath)).c_str())) == "virtual"; ++ return string(basename(const_cast(dirname(dirname(This->devpath)).c_str()))) == "virtual"; + } + + string entry::string_attr(const string & name, const string & def) const +-- +2.33.1 + diff --git a/SOURCES/0046-code-clean-up.patch b/SOURCES/0046-code-clean-up.patch new file mode 100644 index 0000000..042cc54 --- /dev/null +++ b/SOURCES/0046-code-clean-up.patch @@ -0,0 +1,178 @@ +From 0140f7f28a09d33dc46531212d095da5e021b027 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Fri, 15 Jan 2021 00:30:13 +0100 +Subject: [PATCH 46/65] code clean-up + +get rid of the basename() mess +--- + src/core/hw.cc | 2 +- + src/core/osutils.cc | 10 ++++++++++ + src/core/osutils.h | 1 + + src/core/pci.cc | 5 ++--- + src/core/sysfs.cc | 21 ++++++++++----------- + 5 files changed, 24 insertions(+), 15 deletions(-) + +diff --git a/src/core/hw.cc b/src/core/hw.cc +index 6aea7cf..1c1dad4 100644 +--- a/src/core/hw.cc ++++ b/src/core/hw.cc +@@ -1083,7 +1083,7 @@ void hwNode::setLogicalName(const string & name) + This->logicalnames.push_back("/dev/" + n); + } + else +- This->logicalnames.push_back((n[0]=='/')?n:basename(n.c_str())); ++ This->logicalnames.push_back((n[0]=='/')?n:shortname(n)); + + if(This->dev == "") + This->dev = get_devid(n); +diff --git a/src/core/osutils.cc b/src/core/osutils.cc +index a53ed89..8cce54c 100644 +--- a/src/core/osutils.cc ++++ b/src/core/osutils.cc +@@ -455,6 +455,16 @@ string dirname(const string & path) + return result; + } + ++string shortname(const string & path) ++{ ++ size_t len = path.length(); ++ char *buffer = new char[len + 1]; ++ path.copy(buffer, len); ++ buffer[len] = '\0'; ++ string result = basename(buffer); ++ delete[] buffer; ++ return result; ++} + + string spaces(unsigned int count, const string & space) + { +diff --git a/src/core/osutils.h b/src/core/osutils.h +index 549258e..75c42e3 100644 +--- a/src/core/osutils.h ++++ b/src/core/osutils.h +@@ -15,6 +15,7 @@ bool samefile(const std::string & path1, const std::string & path2); + std::string readlink(const std::string & path); + std::string realpath(const std::string & path); + std::string dirname(const std::string & path); ++std::string shortname(const std::string & path); + bool loadfile(const std::string & file, std::vector < std::string > &lines); + + size_t splitlines(const std::string & s, +diff --git a/src/core/pci.cc b/src/core/pci.cc +index 21b9033..a1dd5c7 100644 +--- a/src/core/pci.cc ++++ b/src/core/pci.cc +@@ -9,7 +9,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -1172,9 +1171,9 @@ bool scan_pci(hwNode & n) + string drivername = readlink(string(devices[i]->d_name)+"/driver"); + string modulename = readlink(string(devices[i]->d_name)+"/driver/module"); + +- device->setConfig("driver", basename(const_cast(drivername.c_str()))); ++ device->setConfig("driver", shortname(drivername)); + if(exists(modulename)) +- device->setConfig("module", basename(const_cast(modulename.c_str()))); ++ device->setConfig("module", shortname(modulename)); + + if(exists(string(devices[i]->d_name)+"/rom")) + { +diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc +index d7a20c9..fda1e9b 100644 +--- a/src/core/sysfs.cc ++++ b/src/core/sysfs.cc +@@ -16,7 +16,6 @@ + #include + #include + #include +-#include + + + __ID("@(#) $Id$"); +@@ -104,7 +103,7 @@ static string sysfs_getbustype(const string & path) + { + string devname = + string(fs.path + "/bus/") + string(namelist[i]->d_name) + +- "/devices/" + basename(const_cast(path.c_str())); ++ "/devices/" + shortname(path); + + if (samefile(devname, path)) + { +@@ -152,7 +151,7 @@ static string sysfstobusinfo(const string & path) + + if (bustype == "usb") + { +- string name = basename(const_cast(path.c_str())); ++ string name = shortname(path); + if (matches(name, "^[0-9]+-[0-9]+(\\.[0-9]+)*:[0-9]+\\.[0-9]+$")) + { + size_t colon = name.rfind(":"); +@@ -163,7 +162,7 @@ static string sysfstobusinfo(const string & path) + + if (bustype == "virtio") + { +- string name = basename(const_cast(path.c_str())); ++ string name = shortname(path); + if (name.compare(0, 6, "virtio") == 0) + return "virtio@" + name.substr(6); + else +@@ -171,10 +170,10 @@ static string sysfstobusinfo(const string & path) + } + + if (bustype == "vio") +- return string("vio@") + basename(const_cast(path.c_str())); ++ return string("vio@") + shortname(path); + + if (bustype == "ccw") +- return string("ccw@") + basename(const_cast(path.c_str())); ++ return string("ccw@") + shortname(path); + + if (bustype == "ccwgroup") + { +@@ -252,7 +251,7 @@ string entry::driver() const + string driverlink = This->devpath + "/driver"; + if (!exists(driverlink)) + return ""; +- return basename(const_cast(readlink(driverlink).c_str())); ++ return shortname(readlink(driverlink)); + } + + +@@ -340,7 +339,7 @@ string entry::name_in_class(const string & classname) const + + string entry::name() const + { +- return basename(const_cast(This->devpath.c_str())); ++ return shortname(This->devpath); + } + + +@@ -352,17 +351,17 @@ entry entry::parent() const + + string entry::classname() const + { +- return basename(const_cast(dirname(This->devpath).c_str())); ++ return shortname(dirname(This->devpath)); + } + + string entry::subsystem() const + { +- return basename(const_cast(realpath(This->devpath+"/subsystem").c_str())); ++ return shortname(realpath(This->devpath+"/subsystem")); + } + + bool entry::isvirtual() const + { +- return string(basename(const_cast(dirname(dirname(This->devpath)).c_str()))) == "virtual"; ++ return shortname(dirname(dirname(This->devpath))) == "virtual"; + } + + string entry::string_attr(const string & name, const string & def) const +-- +2.33.1 + diff --git a/SOURCES/0047-devtree-Add-UUID-property.patch b/SOURCES/0047-devtree-Add-UUID-property.patch new file mode 100644 index 0000000..198cd5f --- /dev/null +++ b/SOURCES/0047-devtree-Add-UUID-property.patch @@ -0,0 +1,28 @@ +From 9c5c2f0706db330114ff4624e0931ac40c1d6fe2 Mon Sep 17 00:00:00 2001 +From: Vasant Hegde +Date: Wed, 20 Jan 2021 11:28:47 +0530 +Subject: [PATCH 47/65] devtree: Add UUID property + +Add UUID property to PowerVM LPAR. + +Signed-off-by: Vasant Hegde +--- + src/core/device-tree.cc | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc +index d3188c6..7df6a4e 100644 +--- a/src/core/device-tree.cc ++++ b/src/core/device-tree.cc +@@ -1503,6 +1503,8 @@ bool scan_device_tree(hwNode & n) + scan_devtree_bootrom(*core); + if (exists(DEVICETREE "/ibm,lpar-capable")) { + n.setDescription("pSeries LPAR"); ++ if (exists( DEVICETREE "/ibm,partition-uuid")) ++ n.setConfig("uuid", get_string(DEVICETREE "/ibm,partition-uuid")); + scan_devtree_cpu_power(*core); + } + else { +-- +2.33.1 + diff --git a/SOURCES/0048-Fix-getting-size-of-memory-banks-32GiB.patch b/SOURCES/0048-Fix-getting-size-of-memory-banks-32GiB.patch new file mode 100644 index 0000000..cb13b94 --- /dev/null +++ b/SOURCES/0048-Fix-getting-size-of-memory-banks-32GiB.patch @@ -0,0 +1,44 @@ +From 74e23540335254b8fca6a81cc891c52d96937d40 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Thu, 29 Apr 2021 16:40:37 +0200 +Subject: [PATCH 48/65] Fix getting size of memory banks <32GiB + +PR65 on Github (thanks to Z.Bitter) + +Due to a regression introduced by 8ff1efb, no size was recorded for memory banks <32GiB in size on systems with an SMBIOS version of 2.7 or later. On these systems the Type 17 size field from SMBIOS was only recorded if the extended size field was used. + +Modify the code to use the regular size field whenever it is valid (not 0xFFFF) and not set to 0x7FFF on versions >2.7 (indicating the extended size field is in use). +--- + src/core/dmi.cc | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index fe6ad39..96b6506 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -1567,15 +1567,14 @@ int dmiversionrev) + + // size + u = data[0x0D] << 8 | data[0x0C]; +- if ((dmiversionmaj > 2) +- || ((dmiversionmaj == 2) && (dmiversionmin >= 7))) { +- if(u == 0x7FFF) { +- unsigned long long extendsize = (data[0x1F] << 24) | (data[0x1E] << 16) | (data[0x1D] << 8) | data[0x1C]; +- extendsize &= 0x7FFFFFFFUL; +- size = extendsize * 1024ULL * 1024ULL; +- } ++ if (((dmiversionmaj > 2) ++ || ((dmiversionmaj == 2) && (dmiversionmin >= 7))) ++ && u == 0x7FFF) { ++ unsigned long long extendsize = (data[0x1F] << 24) | (data[0x1E] << 16) | (data[0x1D] << 8) | data[0x1C]; ++ extendsize &= 0x7FFFFFFFUL; ++ size = extendsize * 1024ULL * 1024ULL; + } +- else ++ else + if (u != 0xFFFF) + size = (1024ULL * (u & 0x7FFF) * ((u & 0x8000) ? 1 : 1024ULL)); + description += string(dmi_memory_device_form_factor(data[0x0E])); +-- +2.33.1 + diff --git a/SOURCES/0049-Fix-typos-in-translatable-messages.patch b/SOURCES/0049-Fix-typos-in-translatable-messages.patch new file mode 100644 index 0000000..0203d9e --- /dev/null +++ b/SOURCES/0049-Fix-typos-in-translatable-messages.patch @@ -0,0 +1,39 @@ +From 4c91193fb6ba22be13e8d342dcb1db4a7738d38c Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Fri, 18 Jun 2021 00:40:51 -0600 +Subject: [PATCH 49/65] Fix typos in translatable messages + +--- + src/core/dmi.cc | 2 +- + src/lshw.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index 96b6506..df5db6b 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -277,7 +277,7 @@ static const char *dmi_board_type(u8 data) + "", + "", + N_("Server Blade"), +- N_("Connectivitiy Switch"), ++ N_("Connectivity Switch"), + N_("System Management Module"), + N_("Processor Module"), + N_("I/O Module"), +diff --git a/src/lshw.cc b/src/lshw.cc +index 571b1c3..e5d6b4f 100644 +--- a/src/lshw.cc ++++ b/src/lshw.cc +@@ -35,7 +35,7 @@ void usage(const char *progname) + fprintf(stderr, _("\t-X use graphical interface\n")); + fprintf(stderr, _("\noptions can be\n")); + #ifdef SQLITE +- fprintf(stderr, _("\t-dump filename displays output and dump collected information into a file (SQLite database)\n")); ++ fprintf(stderr, _("\t-dump filename display output and dump collected information into a file (SQLite database)\n")); + #endif + fprintf(stderr, _("\t-class CLASS only show a certain class of hardware\n")); + fprintf(stderr, _("\t-C CLASS same as '-class CLASS'\n")); +-- +2.33.1 + diff --git a/SOURCES/0050-Fix-another-typo.patch b/SOURCES/0050-Fix-another-typo.patch new file mode 100644 index 0000000..85f17de --- /dev/null +++ b/SOURCES/0050-Fix-another-typo.patch @@ -0,0 +1,25 @@ +From a252ea923c747a548e0012ef41ec588e0179907f Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Tue, 29 Jun 2021 20:34:35 -0600 +Subject: [PATCH 50/65] Fix another typo + +--- + src/core/dmi.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index df5db6b..c356c29 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -462,7 +462,7 @@ u8 cachetype = 0) + switch ((config >> 8) & 3) + { + case 0: +- n.addCapability("write-through", _("Write-trough")); ++ n.addCapability("write-through", _("Write-through")); + break; + case 1: + n.addCapability("write-back", _("Write-back")); +-- +2.33.1 + diff --git a/SOURCES/0051-Translate-all-words-of-a-phrase-together.patch b/SOURCES/0051-Translate-all-words-of-a-phrase-together.patch new file mode 100644 index 0000000..15b81a4 --- /dev/null +++ b/SOURCES/0051-Translate-all-words-of-a-phrase-together.patch @@ -0,0 +1,134 @@ +From f5ff9f26bff19f8fd487f75410c6f62c8035d33d Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Tue, 29 Jun 2021 20:46:45 -0600 +Subject: [PATCH 51/65] Translate all words of a phrase together + +The translation of the word "Battery" or "volume" can be in the +beginning, middle, or end of the fully translated phrase, depending on +the language. +--- + src/core/dmi.cc | 20 ++++++++-------- + src/core/volumes.cc | 58 ++++++++++++++++++++++----------------------- + 2 files changed, 39 insertions(+), 39 deletions(-) + +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index df5db6b..b18de1f 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -152,19 +152,19 @@ static const char *dmi_battery_chemistry(u8 code) + { + static const char *chemistry[]= + { +- N_("Other"), /* 0x01 */ +- N_("Unknown"), +- N_("Lead Acid"), +- N_("Nickel Cadmium"), +- N_("Nickel Metal Hydride"), +- N_("Lithium Ion"), +- N_("Zinc Air"), +- N_("Lithium Polymer") /* 0x08 */ ++ N_("Other Battery"), /* 0x01 */ ++ N_("Unknown Battery"), ++ N_("Lead Acid Battery"), ++ N_("Nickel Cadmium Battery"), ++ N_("Nickel Metal Hydride Battery"), ++ N_("Lithium Ion Battery"), ++ N_("Zinc Air Battery"), ++ N_("Lithium Polymer Battery") /* 0x08 */ + }; + + if(code>=0x01 && code<=0x08) + return _(chemistry[code-0x01]); +- return ""; ++ return _("Battery"); + } + + +@@ -1735,7 +1735,7 @@ int dmiversionrev) + else + batt.setCapacity(dmi_battery_capacity(data[0x0A] + 256*data[0x0B], data[0x15])); + if(data[0x09]!=0x02 || dm->length<0x1A) +- batt.setDescription(hw::strip(string(dmi_battery_chemistry(data[0x09])) + " Battery")); ++ batt.setDescription(dmi_battery_chemistry(data[0x09])); + + node.addChild(batt); + } +diff --git a/src/core/volumes.cc b/src/core/volumes.cc +index 6fce2ee..03b90b0 100644 +--- a/src/core/volumes.cc ++++ b/src/core/volumes.cc +@@ -45,34 +45,34 @@ static bool detect_swap(hwNode & n, source & s); + + static struct fstypes fs_types[] = + { +- {"blank", "Blank", "", NULL}, +- {"fat", "Windows FAT", "", detect_fat}, +- {"ntfs", "Windows NTFS", "secure", detect_ntfs}, +- {"hpfs", "OS/2 HPFS", "secure", NULL}, +- {"ext2", "EXT2/EXT3", "secure", detect_ext2}, +- {"reiserfs", "Linux ReiserFS", "secure,journaled", detect_reiserfs}, +- {"romfs", "Linux ROMFS", "ro", NULL}, +- {"squashfs", "Linux SquashFS", "ro", NULL}, +- {"cramfs", "Linux CramFS", "ro", NULL}, +- {"minixfs", "MinixFS", "secure", NULL}, +- {"sysvfs", "System V FS", "secure", NULL}, +- {"jfs", "Linux JFS", "secure,journaled", NULL}, +- {"xfs", "Linux XFS", "secure,journaled", NULL}, +- {"iso9660", "ISO-9660", "secure,ro", NULL}, +- {"xboxdvd", "X-Box DVD", "ro", NULL}, +- {"udf", "UDF", "secure,ro", NULL}, +- {"ufs", "UFS", "secure", NULL}, +- {"hphfs", "HP-UX HFS", "secure", NULL}, +- {"vxfs", "VxFS", "secure,journaled", NULL}, +- {"ffs", "FFS", "secure", NULL}, +- {"befs", "BeOS BFS", "journaled", NULL}, +- {"qnxfs", "QNX FS", "", NULL}, +- {"mfs", "MacOS MFS", "", NULL}, +- {"hfsplus", "MacOS HFS+", "secure,journaled", detect_hfsx}, +- {"hfs", "MacOS HFS", "", detect_hfs}, +- {"apfs", "MacOS APFS", "", detect_apfs}, +- {"luks", "Linux Unified Key Setup", "encrypted", detect_luks}, +- {"swap", "Linux swap", "", detect_swap}, ++ {"blank", N_("Blank volume"), "", NULL}, ++ {"fat", N_("Windows FAT volume"), "", detect_fat}, ++ {"ntfs", N_("Windows NTFS volume"), "secure", detect_ntfs}, ++ {"hpfs", N_("OS/2 HPFS volume"), "secure", NULL}, ++ {"ext2", N_("EXT2/EXT3 volume"), "secure", detect_ext2}, ++ {"reiserfs", N_("Linux ReiserFS volume"), "secure,journaled", detect_reiserfs}, ++ {"romfs", N_("Linux ROMFS volume"), "ro", NULL}, ++ {"squashfs", N_("Linux SquashFS volume"), "ro", NULL}, ++ {"cramfs", N_("Linux CramFS volume"), "ro", NULL}, ++ {"minixfs", N_("MinixFS volume"), "secure", NULL}, ++ {"sysvfs", N_("System V FS volume"), "secure", NULL}, ++ {"jfs", N_("Linux JFS volume"), "secure,journaled", NULL}, ++ {"xfs", N_("Linux XFS volume"), "secure,journaled", NULL}, ++ {"iso9660", N_("ISO-9660 volume"), "secure,ro", NULL}, ++ {"xboxdvd", N_("X-Box DVD volume"), "ro", NULL}, ++ {"udf", N_("UDF volume"), "secure,ro", NULL}, ++ {"ufs", N_("UFS volume"), "secure", NULL}, ++ {"hphfs", N_("HP-UX HFS volume"), "secure", NULL}, ++ {"vxfs", N_("VxFS volume"), "secure,journaled", NULL}, ++ {"ffs", N_("FFS volume"), "secure", NULL}, ++ {"befs", N_("BeOS BFS volume"), "journaled", NULL}, ++ {"qnxfs", N_("QNX FS volume"), "", NULL}, ++ {"mfs", N_("MacOS MFS volume"), "", NULL}, ++ {"hfsplus", N_("MacOS HFS+ volume"), "secure,journaled", detect_hfsx}, ++ {"hfs", N_("MacOS HFS volume"), "", detect_hfs}, ++ {"apfs", N_("MacOS APFS volume"), "", detect_apfs}, ++ {"luks", N_("Linux Unified Key Setup volume"), "encrypted", detect_luks}, ++ {"swap", N_("Linux swap volume"), "", detect_swap}, + { NULL, NULL, NULL, NULL } + }; + +@@ -1154,7 +1154,7 @@ bool scan_volume(hwNode & n, source & s) + n.setConfig("filesystem", fs_types[i].id); + n.addCapability("initialized", _("initialized volume")); + if(n.getDescription()=="") +- n.setDescription(string(fs_types[i].description) + " "+string(_("volume"))); ++ n.setDescription(_(fs_types[i].description)); + return true; + } + i++; +-- +2.33.1 + diff --git a/SOURCES/0052-Remove-unnecessary-space-before-closing-parenthesis.patch b/SOURCES/0052-Remove-unnecessary-space-before-closing-parenthesis.patch new file mode 100644 index 0000000..67d3a81 --- /dev/null +++ b/SOURCES/0052-Remove-unnecessary-space-before-closing-parenthesis.patch @@ -0,0 +1,29 @@ +From dbe5708e7f3f14f13aee4b498070aab4fac45f6e Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Tue, 29 Jun 2021 20:47:37 -0600 +Subject: [PATCH 52/65] Remove unnecessary space before closing parenthesis + +Some messages had this space and others did not. +--- + src/lshw.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/lshw.cc b/src/lshw.cc +index e5d6b4f..5a2d594 100644 +--- a/src/lshw.cc ++++ b/src/lshw.cc +@@ -41,9 +41,9 @@ void usage(const char *progname) + fprintf(stderr, _("\t-C CLASS same as '-class CLASS'\n")); + fprintf(stderr, _("\t-c CLASS same as '-class CLASS'\n")); + fprintf(stderr, +- _("\t-disable TEST disable a test (like pci, isapnp, cpuid, etc. )\n")); ++ _("\t-disable TEST disable a test (like pci, isapnp, cpuid, etc.)\n")); + fprintf(stderr, +- _("\t-enable TEST enable a test (like pci, isapnp, cpuid, etc. )\n")); ++ _("\t-enable TEST enable a test (like pci, isapnp, cpuid, etc.)\n")); + fprintf(stderr, _("\t-quiet don't display status\n")); + fprintf(stderr, _("\t-sanitize sanitize output (remove sensitive information like serial numbers, etc.)\n")); + fprintf(stderr, _("\t-numeric output numeric IDs (for PCI, USB, etc.)\n")); +-- +2.33.1 + diff --git a/SOURCES/0055-code-clean-up.patch b/SOURCES/0055-code-clean-up.patch new file mode 100644 index 0000000..b011a8b --- /dev/null +++ b/SOURCES/0055-code-clean-up.patch @@ -0,0 +1,49 @@ +From 353866cf8f9d2fff89d226598c97dfd33229fe35 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 12 Oct 2021 16:28:35 +0200 +Subject: [PATCH 55/65] code clean-up + +be more prudent before freeing memory +--- + src/core/usb.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/core/usb.cc b/src/core/usb.cc +index da65e10..7074d87 100644 +--- a/src/core/usb.cc ++++ b/src/core/usb.cc +@@ -311,6 +311,7 @@ static bool load_usbids(const string & name) + buffer[linelen-1] = '\0'; // chop \n + string line = string(buffer); + free(buffer); ++ buffer = NULL; + + description = NULL; + t = 0; +@@ -338,6 +339,7 @@ static bool load_usbids(const string & name) + } + } + } ++ if(buffer != NULL) free(buffer); + } + + fclose(usbids); +@@ -393,6 +395,7 @@ bool scan_usb(hwNode & n) + { + string line = hw::strip(string(buffer)); + free(buffer); ++ buffer = NULL; + + if(line.length()<=0) + { +@@ -497,6 +500,7 @@ bool scan_usb(hwNode & n) + } + } + } ++ if(buffer != NULL) free(buffer); + } + if(defined) + addUSBChild(n, device, bus, lev, prnt); +-- +2.33.1 + diff --git a/SOURCES/0056-code-clean-up.patch b/SOURCES/0056-code-clean-up.patch new file mode 100644 index 0000000..d6564f9 --- /dev/null +++ b/SOURCES/0056-code-clean-up.patch @@ -0,0 +1,34 @@ +From 9555d6cfc33a58a7cf91d137f7209ccf1bee86a8 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 12 Oct 2021 22:02:22 +0200 +Subject: [PATCH 56/65] code clean-up + +get rid of warning complaining about `register` storage of CRC +--- + src/core/partitions.cc | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/core/partitions.cc b/src/core/partitions.cc +index 4268903..7b9fd4f 100644 +--- a/src/core/partitions.cc ++++ b/src/core/partitions.cc +@@ -520,7 +520,6 @@ hwNode & partition) + * - Now pass seed as an arg + * - changed unsigned long to uint32_t, added #include + * - changed len to be an unsigned long +- * - changed crc32val to be a register + * - License remains unchanged! It's still GPL-compatable! + */ + +@@ -626,7 +625,7 @@ uint32_t + __efi_crc32(const void *buf, unsigned long len, uint32_t seed) + { + unsigned long i; +- register uint32_t crc32val; ++ uint32_t crc32val; + const unsigned char *s = (const unsigned char *)buf; + + crc32val = seed; +-- +2.33.1 + diff --git a/SOURCES/0057-support-for-new-ethtool-capabilities.patch b/SOURCES/0057-support-for-new-ethtool-capabilities.patch new file mode 100644 index 0000000..22ce936 --- /dev/null +++ b/SOURCES/0057-support-for-new-ethtool-capabilities.patch @@ -0,0 +1,368 @@ +From 1a39de2d0af780c06b55f5a96d5f696da1a6fda3 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 12 Oct 2021 23:33:08 +0200 +Subject: [PATCH 57/65] support for new ethtool capabilities + +merge Github PR#73 +--- + src/core/network.cc | 299 +++++++++++++++++++++++++++++--------------- + 1 file changed, 195 insertions(+), 104 deletions(-) + +diff --git a/src/core/network.cc b/src/core/network.cc +index 5aab06d..613c1af 100644 +--- a/src/core/network.cc ++++ b/src/core/network.cc +@@ -53,6 +53,7 @@ typedef unsigned long long u64; + typedef uint32_t u32; + typedef uint16_t u16; + typedef uint8_t u8; ++typedef int8_t s8; + + struct ethtool_cmd + { +@@ -70,6 +71,28 @@ struct ethtool_cmd + u32 reserved[4]; + }; + ++#define MAX_LINK_MODE_MASK_SIZE 64 ++struct ethtool_link_settings ++{ ++ u32 cmd; ++ u32 speed; /* The forced speed, 10Mb, 100Mb, gigabit */ ++ u8 duplex; /* Duplex, half or full */ ++ u8 port; /* Which connector port */ ++ u8 phy_address; ++ u8 autoneg; /* Enable or disable autonegotiation */ ++ u8 mdio_support; ++ u8 eth_tp_mdix; ++ u8 eth_tp_mdix_ctrl; ++ s8 link_mode_masks_nwords; ++ u8 transceiver; /* Which tranceiver to use */ ++ u8 master_slave_cfg; ++ u8 master_slave_state; ++ u8 reserved1[1]; ++ u32 reserved[7]; ++ u32 link_mode_masks[3 * MAX_LINK_MODE_MASK_SIZE]; /* Link mode mask fields for modes: ++ supported, advertised, peer advertised. */ ++}; ++ + #ifndef IFNAMSIZ + #define IFNAMSIZ 32 + #endif +@@ -108,6 +131,7 @@ struct ethtool_value + #define ETHTOOL_GSET 0x00000001 /* Get settings. */ + #define ETHTOOL_GDRVINFO 0x00000003 /* Get driver info. */ + #define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */ ++#define ETHTOOL_GLINKSETTINGS 0x0000004c /* Get link mode settings. */ + + /* Indicates what features are supported by the interface. */ + #define SUPPORTED_10baseT_Half (1 << 0) +@@ -124,10 +148,17 @@ struct ethtool_value + #define SUPPORTED_BNC (1 << 11) + #define SUPPORTED_10000baseT_Full (1 << 12) + +-/* The forced speed, 10Mb, 100Mb, gigabit, 10GbE. */ ++/* Indicates what features are supported by the interface, ++ * in the second word of the extended bitmap. */ ++#define SUPPORTED2_2500baseT_Full (1 << 15) ++#define SUPPORTED2_5000baseT_Full (1 << 16) ++ ++/* The forced speed, 10Mb, 100Mb, gigabit, 2.5GbE, 5GbE, 10GbE. */ + #define SPEED_10 10 + #define SPEED_100 100 + #define SPEED_1000 1000 ++#define SPEED_2500 2500 ++#define SPEED_5000 5000 + #define SPEED_10000 10000 + + /* Duplex, half or full. */ +@@ -308,6 +339,168 @@ static bool isVirtual(const string & MAC) + } + + ++static void updateCapabilities(hwNode & interface, u32 supported, u32 supported2, u32 speed, u8 duplex, u8 port, u8 autoneg) ++{ ++ if(supported & SUPPORTED_TP) ++ interface.addCapability("tp", _("twisted pair")); ++ if(supported & SUPPORTED_AUI) ++ interface.addCapability("aui", _("AUI")); ++ if(supported & SUPPORTED_BNC) ++ interface.addCapability("bnc", _("BNC")); ++ if(supported & SUPPORTED_MII) ++ interface.addCapability("mii", _("Media Independant Interface")); ++ if(supported & SUPPORTED_FIBRE) ++ interface.addCapability("fibre",_( "optical fibre")); ++ if(supported & SUPPORTED_10baseT_Half) ++ { ++ interface.addCapability("10bt", _("10Mbit/s")); ++ interface.setCapacity(10000000ULL); ++ } ++ if(supported & SUPPORTED_10baseT_Full) ++ { ++ interface.addCapability("10bt-fd", _("10Mbit/s (full duplex)")); ++ interface.setCapacity(10000000ULL); ++ } ++ if(supported & SUPPORTED_100baseT_Half) ++ { ++ interface.addCapability("100bt", _("100Mbit/s")); ++ interface.setCapacity(100000000ULL); ++ } ++ if(supported & SUPPORTED_100baseT_Full) ++ { ++ interface.addCapability("100bt-fd", _("100Mbit/s (full duplex)")); ++ interface.setCapacity(100000000ULL); ++ } ++ if(supported & SUPPORTED_1000baseT_Half) ++ { ++ interface.addCapability("1000bt", "1Gbit/s"); ++ interface.setCapacity(1000000000ULL); ++ } ++ if(supported & SUPPORTED_1000baseT_Full) ++ { ++ interface.addCapability("1000bt-fd", _("1Gbit/s (full duplex)")); ++ interface.setCapacity(1000000000ULL); ++ } ++ if(supported2 & SUPPORTED2_2500baseT_Full) ++ { ++ interface.addCapability("2500bt-fd", _("2.5Gbit/s (full duplex)")); ++ interface.setCapacity(2500000000ULL); ++ } ++ if(supported2 & SUPPORTED2_5000baseT_Full) ++ { ++ interface.addCapability("5000bt-fd", _("5Gbit/s (full duplex)")); ++ interface.setCapacity(5000000000ULL); ++ } ++ if(supported & SUPPORTED_10000baseT_Full) ++ { ++ interface.addCapability("10000bt-fd", _("10Gbit/s (full duplex)")); ++ interface.setCapacity(10000000000ULL); ++ } ++ if(supported & SUPPORTED_Autoneg) ++ interface.addCapability("autonegotiation", _("Auto-negotiation")); ++ ++ switch(speed) ++ { ++ case SPEED_10: ++ interface.setConfig("speed", "10Mbit/s"); ++ interface.setSize(10000000ULL); ++ break; ++ case SPEED_100: ++ interface.setConfig("speed", "100Mbit/s"); ++ interface.setSize(100000000ULL); ++ break; ++ case SPEED_1000: ++ interface.setConfig("speed", "1Gbit/s"); ++ interface.setSize(1000000000ULL); ++ break; ++ case SPEED_2500: ++ interface.setConfig("speed", "2.5Gbit/s"); ++ interface.setSize(2500000000ULL); ++ break; ++ case SPEED_5000: ++ interface.setConfig("speed", "5Gbit/s"); ++ interface.setSize(5000000000ULL); ++ break; ++ case SPEED_10000: ++ interface.setConfig("speed", "10Gbit/s"); ++ interface.setSize(10000000000ULL); ++ break; ++ } ++ switch(duplex) ++ { ++ case DUPLEX_HALF: ++ interface.setConfig("duplex", "half"); ++ break; ++ case DUPLEX_FULL: ++ interface.setConfig("duplex", "full"); ++ break; ++ } ++ switch(port) ++ { ++ case PORT_TP: ++ interface.setConfig("port", "twisted pair"); ++ break; ++ case PORT_AUI: ++ interface.setConfig("port", "AUI"); ++ break; ++ case PORT_BNC: ++ interface.setConfig("port", "BNC"); ++ break; ++ case PORT_MII: ++ interface.setConfig("port", "MII"); ++ break; ++ case PORT_FIBRE: ++ interface.setConfig("port", "fibre"); ++ break; ++ } ++ interface.setConfig("autonegotiation", (autoneg == AUTONEG_DISABLE) ? "off" : "on"); ++} ++ ++ ++static void scan_modes(hwNode & interface, int fd) ++{ ++ struct ifreq ifr; ++ struct ethtool_cmd ecmd; ++ struct ethtool_link_settings elink; ++ s8 mask_size; ++ ++ elink.cmd = ETHTOOL_GLINKSETTINGS; ++ elink.link_mode_masks_nwords = 0; ++ memset(&ifr, 0, sizeof(ifr)); ++ strcpy(ifr.ifr_name, interface.getLogicalName().c_str()); ++ ifr.ifr_data = (caddr_t) &elink; ++ // Probe link mode mask count. ++ if (ioctl(fd, SIOCETHTOOL, &ifr) == 0) ++ { ++ mask_size = -elink.link_mode_masks_nwords; ++ if (mask_size > 1 && mask_size <= MAX_LINK_MODE_MASK_SIZE) ++ { ++ elink.cmd = ETHTOOL_GLINKSETTINGS; ++ elink.link_mode_masks_nwords = mask_size; ++ memset(&ifr, 0, sizeof(ifr)); ++ strcpy(ifr.ifr_name, interface.getLogicalName().c_str()); ++ ifr.ifr_data = (caddr_t) &elink; ++ // Read link mode settings. ++ if (ioctl(fd, SIOCETHTOOL, &ifr) == 0) ++ { ++ updateCapabilities(interface, elink.link_mode_masks[0], elink.link_mode_masks[1], ++ elink.speed, elink.duplex, elink.port, elink.autoneg); ++ return; ++ } ++ } ++ } ++ ++ ecmd.cmd = ETHTOOL_GSET; ++ memset(&ifr, 0, sizeof(ifr)); ++ strcpy(ifr.ifr_name, interface.getLogicalName().c_str()); ++ ifr.ifr_data = (caddr_t) &ecmd; ++ if (ioctl(fd, SIOCETHTOOL, &ifr) == 0) ++ { ++ updateCapabilities(interface, ecmd.supported, 0, ecmd.speed, ecmd.duplex, ecmd.port, ecmd.autoneg); ++ } ++} ++ ++ + bool scan_network(hwNode & n) + { + vector < string > interfaces; +@@ -322,7 +515,6 @@ bool scan_network(hwNode & n) + { + struct ifreq ifr; + struct ethtool_drvinfo drvinfo; +- struct ethtool_cmd ecmd; + struct ethtool_value edata; + + for (unsigned int i = 0; i < interfaces.size(); i++) +@@ -417,108 +609,7 @@ bool scan_network(hwNode & n) + interface.setConfig("link", edata.data ? "yes":"no"); + } + +- ecmd.cmd = ETHTOOL_GSET; +- memset(&ifr, 0, sizeof(ifr)); +- strcpy(ifr.ifr_name, interfaces[i].c_str()); +- ifr.ifr_data = (caddr_t) &ecmd; +- if (ioctl(fd, SIOCETHTOOL, &ifr) == 0) +- { +- if(ecmd.supported & SUPPORTED_TP) +- interface.addCapability("tp", _("twisted pair")); +- if(ecmd.supported & SUPPORTED_AUI) +- interface.addCapability("aui", _("AUI")); +- if(ecmd.supported & SUPPORTED_BNC) +- interface.addCapability("bnc", _("BNC")); +- if(ecmd.supported & SUPPORTED_MII) +- interface.addCapability("mii", _("Media Independant Interface")); +- if(ecmd.supported & SUPPORTED_FIBRE) +- interface.addCapability("fibre",_( "optical fibre")); +- if(ecmd.supported & SUPPORTED_10baseT_Half) +- { +- interface.addCapability("10bt", _("10Mbit/s")); +- interface.setCapacity(10000000ULL); +- } +- if(ecmd.supported & SUPPORTED_10baseT_Full) +- { +- interface.addCapability("10bt-fd", _("10Mbit/s (full duplex)")); +- interface.setCapacity(10000000ULL); +- } +- if(ecmd.supported & SUPPORTED_100baseT_Half) +- { +- interface.addCapability("100bt", _("100Mbit/s")); +- interface.setCapacity(100000000ULL); +- } +- if(ecmd.supported & SUPPORTED_100baseT_Full) +- { +- interface.addCapability("100bt-fd", _("100Mbit/s (full duplex)")); +- interface.setCapacity(100000000ULL); +- } +- if(ecmd.supported & SUPPORTED_1000baseT_Half) +- { +- interface.addCapability("1000bt", "1Gbit/s"); +- interface.setCapacity(1000000000ULL); +- } +- if(ecmd.supported & SUPPORTED_1000baseT_Full) +- { +- interface.addCapability("1000bt-fd", _("1Gbit/s (full duplex)")); +- interface.setCapacity(1000000000ULL); +- } +- if(ecmd.supported & SUPPORTED_10000baseT_Full) +- { +- interface.addCapability("10000bt-fd", _("10Gbit/s (full duplex)")); +- interface.setCapacity(10000000000ULL); +- } +- if(ecmd.supported & SUPPORTED_Autoneg) +- interface.addCapability("autonegotiation", _("Auto-negotiation")); +- +- switch(ecmd.speed) +- { +- case SPEED_10: +- interface.setConfig("speed", "10Mbit/s"); +- interface.setSize(10000000ULL); +- break; +- case SPEED_100: +- interface.setConfig("speed", "100Mbit/s"); +- interface.setSize(100000000ULL); +- break; +- case SPEED_1000: +- interface.setConfig("speed", "1Gbit/s"); +- interface.setSize(1000000000ULL); +- break; +- case SPEED_10000: +- interface.setConfig("speed", "10Gbit/s"); +- interface.setSize(10000000000ULL); +- break; +- } +- switch(ecmd.duplex) +- { +- case DUPLEX_HALF: +- interface.setConfig("duplex", "half"); +- break; +- case DUPLEX_FULL: +- interface.setConfig("duplex", "full"); +- break; +- } +- switch(ecmd.port) +- { +- case PORT_TP: +- interface.setConfig("port", "twisted pair"); +- break; +- case PORT_AUI: +- interface.setConfig("port", "AUI"); +- break; +- case PORT_BNC: +- interface.setConfig("port", "BNC"); +- break; +- case PORT_MII: +- interface.setConfig("port", "MII"); +- break; +- case PORT_FIBRE: +- interface.setConfig("port", "fibre"); +- break; +- } +- interface.setConfig("autonegotiation", (ecmd.autoneg == AUTONEG_DISABLE) ? "off" : "on"); +- } ++ scan_modes(interface, fd); + + drvinfo.cmd = ETHTOOL_GDRVINFO; + memset(&ifr, 0, sizeof(ifr)); +-- +2.33.1 + diff --git a/SOURCES/0058-cosmetic-fixes.patch b/SOURCES/0058-cosmetic-fixes.patch new file mode 100644 index 0000000..0cc165e --- /dev/null +++ b/SOURCES/0058-cosmetic-fixes.patch @@ -0,0 +1,135 @@ +From 62d96b016b04219e76e2de2f5dd585c7bbdae9c1 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 12 Oct 2021 23:35:54 +0200 +Subject: [PATCH 58/65] cosmetic fixes + +Github PR#71 +--- + README.md | 4 ++-- + docs/Changelog | 12 ++++++------ + docs/TODO | 2 +- + lshw.spec.in | 2 +- + src/Makefile | 2 +- + src/core/Makefile | 2 +- + src/core/dmi.cc | 6 +++--- + src/gui/Makefile | 2 +- + src/po/Makefile | 2 +- + 9 files changed, 17 insertions(+), 17 deletions(-) + +diff --git a/README.md b/README.md +index 6659f9c..0c610f5 100644 +--- a/README.md ++++ b/README.md +@@ -42,7 +42,7 @@ Getting help + + 1. the lshw home page is http://lshw.ezix.org/ + 2. bug reports and feature requests: http://ezix.org/project/newticket?component=lshw +- ++ + Please make sure you include enough information in your bug report: XML output from lshw is preferred over text or HTML, indicate the affected version of lshw, your platform (i386, x86-64, PA-RISC, PowerPC, etc.) and your distribution. + + NOTE TO DISTRIBUTIONS +diff --git a/docs/Changelog b/docs/Changelog +index 6ea288c..0f648f5 100644 +--- a/docs/Changelog ++++ b/docs/Changelog +@@ -3,17 +3,17 @@ + detection of SD/MMC and SDIO devices + bug fixes + code cleanup +- updated data files ++ updated data files + * lshw B.02.18 + migrated to git + bug fixes + code cleanup +- updated data files ++ updated data files + * lshw B.02.17 + bug fixes + code cleanup + improved support for FAT-formatted disks +- updated data files ++ updated data files + * lshw B.02.16 + bug fixes + code cleanup +@@ -27,7 +27,7 @@ + updated data files + * lshw B.02.14 + bug fixes +- support for EXT4 partitions ++ support for EXT4 partitions + * lshw B.02.13 + fix bug #402: properly detect 64 bit systems (even when compiled for i386) + fix bug #401: SMP-related crash on IA-64 +@@ -70,7 +70,7 @@ + * lshw B.02.09 + minor bugfixes (#26, #27) + added support for PCI domains (#28) +- use of /sys (sysfs) when possible for PCI devices ++ use of /sys (sysfs) when possible for PCI devices + * B.02.08.01 + bugfix release for non-x86 platforms (#24) + * B.02.08 +@@ -99,7 +99,7 @@ + the GUI now uses a GtkTextView instead of a GtkLabel + SVG icons are now displayed for USB, Firewire, SCSI, etc. + added support for reporting VMX (Vanderpool) capabilities (untested) +- fixed a compilation problem with GCC 4 ++ fixed a compilation problem with GCC 4 + * B.02.03 + added support for PA-RISC devices (IODC-controlled) on 2.6 kernels + the GUI can now be launched by invoking lshw with the '-X' option +diff --git a/docs/TODO b/docs/TODO +index 0b33782..2d4d3af 100644 +--- a/docs/TODO ++++ b/docs/TODO +@@ -9,4 +9,4 @@ + * use MPTABLE for reporting of CPUs + + report SSD/rotational devices: /sys/block/DEV/queue/rotational +-better handle containers +\ No newline at end of file ++better handle containers +diff --git a/lshw.spec.in b/lshw.spec.in +index f6884ab..b3b636f 100644 +--- a/lshw.spec.in ++++ b/lshw.spec.in +@@ -35,7 +35,7 @@ Requires: gtk3 >= 3.24 + BuildRequires: gtk3-devel >= 3.24 + + %description gui +-lshw (Hardware Lister) is a small tool to provide detailed informaton on ++lshw (Hardware Lister) is a small tool to provide detailed information on + the hardware configuration of the machine. It can report exact memory + configuration, firmware version, mainboard configuration, CPU version + and speed, cache configuration, bus speed, etc. on DMI-capable x86s +diff --git a/src/core/dmi.cc b/src/core/dmi.cc +index df5db6b..6d76c53 100644 +--- a/src/core/dmi.cc ++++ b/src/core/dmi.cc +@@ -1648,9 +1648,9 @@ int dmiversionrev) + uint64_t(data[0x1C]) << 40 | uint64_t(data[0x1B]) << 32 | + uint64_t(data[0x1A]) << 24 | uint64_t(data[0x19]) << 16 | + uint64_t(data[0x18]) << 8 | uint64_t(data[0x17]); +- if (end - start < 512) // memory range is smaller thant 512KB ++ if (end - start < 512) // memory range is smaller than 512KB + { +-// consider that values were expressed in megagytes ++// consider that values were expressed in megabytes + start *= 1024; + end *= 1024; + } +@@ -1688,7 +1688,7 @@ int dmiversionrev) + uint64_t(data[0x18]) << 8 | uint64_t(data[0x17]); + if (end - start < 512) // memory range is smaller than 512KB + { +-// consider that values were expressed in megagytes ++// consider that values were expressed in megabytes + start *= 1024; + end *= 1024; + } +-- +2.33.1 + diff --git a/SOURCES/0059-fix-typo.patch b/SOURCES/0059-fix-typo.patch new file mode 100644 index 0000000..153c214 --- /dev/null +++ b/SOURCES/0059-fix-typo.patch @@ -0,0 +1,25 @@ +From 5a0bad9020f731cf5b5a0744a9323f97b3a1efe9 Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 12 Oct 2021 23:37:40 +0200 +Subject: [PATCH 59/65] fix typo + +--- + src/core/network.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/network.cc b/src/core/network.cc +index 613c1af..d66c978 100644 +--- a/src/core/network.cc ++++ b/src/core/network.cc +@@ -348,7 +348,7 @@ static void updateCapabilities(hwNode & interface, u32 supported, u32 supported2 + if(supported & SUPPORTED_BNC) + interface.addCapability("bnc", _("BNC")); + if(supported & SUPPORTED_MII) +- interface.addCapability("mii", _("Media Independant Interface")); ++ interface.addCapability("mii", _("Media Independent Interface")); + if(supported & SUPPORTED_FIBRE) + interface.addCapability("fibre",_( "optical fibre")); + if(supported & SUPPORTED_10baseT_Half) +-- +2.33.1 + diff --git a/SOURCES/0060-add-some-includes.patch b/SOURCES/0060-add-some-includes.patch new file mode 100644 index 0000000..4b5ec57 --- /dev/null +++ b/SOURCES/0060-add-some-includes.patch @@ -0,0 +1,232 @@ +From 9d9b7103257abc6fe26b383253e1f15f726f31cd Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 12 Oct 2021 23:42:02 +0200 +Subject: [PATCH 60/65] add some includes + +maybe needed for newer GCCs +--- + src/core/cdrom.cc | 1 + + src/core/cpuid.cc | 1 + + src/core/fb.cc | 1 + + src/core/ideraid.cc | 1 + + src/core/mounts.cc | 2 +- + src/core/osutils.cc | 1 + + src/core/partitions.cc | 2 ++ + src/core/pci.cc | 1 + + src/core/pcmcia-legacy.cc | 1 + + src/core/pcmcia.cc | 2 ++ + src/core/smp.cc | 1 + + src/core/spd.cc | 1 + + src/core/usb.cc | 2 ++ + src/core/volumes.cc | 1 + + src/gui/engine.cc | 2 ++ + src/gui/print-gui.cc | 1 + + 16 files changed, 20 insertions(+), 1 deletion(-) + +diff --git a/src/core/cdrom.cc b/src/core/cdrom.cc +index 11b9a84..58fa7b0 100644 +--- a/src/core/cdrom.cc ++++ b/src/core/cdrom.cc +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/core/cpuid.cc b/src/core/cpuid.cc +index c40dc98..3cb60ac 100644 +--- a/src/core/cpuid.cc ++++ b/src/core/cpuid.cc +@@ -7,6 +7,7 @@ + #include + #include + #include ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/core/fb.cc b/src/core/fb.cc +index 5456204..d198982 100644 +--- a/src/core/fb.cc ++++ b/src/core/fb.cc +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/core/ideraid.cc b/src/core/ideraid.cc +index 5cff28f..5e84ab0 100644 +--- a/src/core/ideraid.cc ++++ b/src/core/ideraid.cc +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/src/core/mounts.cc b/src/core/mounts.cc +index 495a3c2..79b682e 100644 +--- a/src/core/mounts.cc ++++ b/src/core/mounts.cc +@@ -14,7 +14,7 @@ + #include + #include + #include +- ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/core/osutils.cc b/src/core/osutils.cc +index 8cce54c..cfa09ca 100644 +--- a/src/core/osutils.cc ++++ b/src/core/osutils.cc +@@ -3,6 +3,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/src/core/partitions.cc b/src/core/partitions.cc +index 7b9fd4f..69fdc2c 100644 +--- a/src/core/partitions.cc ++++ b/src/core/partitions.cc +@@ -21,6 +21,8 @@ + #include "volumes.h" + #include "osutils.h" + #include ++#include ++#include + #include + #include + #include +diff --git a/src/core/pci.cc b/src/core/pci.cc +index a1dd5c7..5040d75 100644 +--- a/src/core/pci.cc ++++ b/src/core/pci.cc +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/core/pcmcia-legacy.cc b/src/core/pcmcia-legacy.cc +index bf68911..8983ccb 100644 +--- a/src/core/pcmcia-legacy.cc ++++ b/src/core/pcmcia-legacy.cc +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/core/pcmcia.cc b/src/core/pcmcia.cc +index 1db47b2..4d93947 100644 +--- a/src/core/pcmcia.cc ++++ b/src/core/pcmcia.cc +@@ -6,6 +6,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +diff --git a/src/core/smp.cc b/src/core/smp.cc +index 9bd3631..df1c88b 100644 +--- a/src/core/smp.cc ++++ b/src/core/smp.cc +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + + #include "osutils.h" + +diff --git a/src/core/spd.cc b/src/core/spd.cc +index a304d06..babdf1b 100644 +--- a/src/core/spd.cc ++++ b/src/core/spd.cc +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/core/usb.cc b/src/core/usb.cc +index da65e10..353036d 100644 +--- a/src/core/usb.cc ++++ b/src/core/usb.cc +@@ -14,6 +14,7 @@ + #include "heuristics.h" + #include "options.h" + #include ++#include + #include + #include + #include +@@ -24,6 +25,7 @@ + #include + #include + #include ++#include + + #define PROCBUSUSBDEVICES "/proc/bus/usb/devices" + #define SYSKERNELDEBUGUSBDEVICES "/sys/kernel/debug/usb/devices" +diff --git a/src/core/volumes.cc b/src/core/volumes.cc +index 6fce2ee..53096ba 100644 +--- a/src/core/volumes.cc ++++ b/src/core/volumes.cc +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + __ID("@(#) $Id$"); + +diff --git a/src/gui/engine.cc b/src/gui/engine.cc +index 2962ec8..ea442cc 100644 +--- a/src/gui/engine.cc ++++ b/src/gui/engine.cc +@@ -6,6 +6,8 @@ + #include "osutils.h" + #include "options.h" + ++#include ++#include + #include + #include + #include +diff --git a/src/gui/print-gui.cc b/src/gui/print-gui.cc +index 4138424..916f25d 100644 +--- a/src/gui/print-gui.cc ++++ b/src/gui/print-gui.cc +@@ -10,6 +10,7 @@ + #include "version.h" + #include "osutils.h" + #include "stock.h" ++#include + #include + #include + #include +-- +2.33.1 + diff --git a/SOURCES/0061-Add-more-network-speeds.patch b/SOURCES/0061-Add-more-network-speeds.patch new file mode 100644 index 0000000..eb2e413 --- /dev/null +++ b/SOURCES/0061-Add-more-network-speeds.patch @@ -0,0 +1,115 @@ +From 663869cc6276811fec884dd76394c7d8656d326a Mon Sep 17 00:00:00 2001 +From: Lyonel Vincent +Date: Tue, 19 Oct 2021 01:09:20 +0200 +Subject: [PATCH 61/65] Add more network speeds + +cf. Github PR#75 +--- + src/core/network.cc | 58 ++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 57 insertions(+), 1 deletion(-) + +diff --git a/src/core/network.cc b/src/core/network.cc +index d66c978..01a1f51 100644 +--- a/src/core/network.cc ++++ b/src/core/network.cc +@@ -147,19 +147,38 @@ struct ethtool_value + #define SUPPORTED_FIBRE (1 << 10) + #define SUPPORTED_BNC (1 << 11) + #define SUPPORTED_10000baseT_Full (1 << 12) ++#define SUPPORTED_2500baseX_Full (1 << 15) ++#define SUPPORTED_1000baseKX_Full (1 << 17) ++#define SUPPORTED_10000baseKX4_Full (1 << 18) ++#define SUPPORTED_10000baseKR_Full (1 << 19) ++#define SUPPORTED_40000baseKR4_Full (1 << 23) ++#define SUPPORTED_40000baseCR4_Full (1 << 24) ++#define SUPPORTED_40000baseSR4_Full (1 << 25) ++#define SUPPORTED_40000baseLR4_Full (1 << 26) ++#define SUPPORTED_25000baseCR_Full (1 << 31) + + /* Indicates what features are supported by the interface, + * in the second word of the extended bitmap. */ ++#define SUPPORTED2_25000baseKR_Full (1 << 0) ++#define SUPPORTED2_25000baseSR_Full (1 << 1) ++#define SUPPORTED2_1000baseX_Full (1 << 9) ++#define SUPPORTED2_10000baseCR_Full (1 << 10) ++#define SUPPORTED2_10000baseSR_Full (1 << 11) ++#define SUPPORTED2_10000baseLR_Full (1 << 12) ++#define SUPPORTED2_10000baseLRM_Full (1 << 13) ++#define SUPPORTED2_10000baseER_Full (1 << 14) + #define SUPPORTED2_2500baseT_Full (1 << 15) + #define SUPPORTED2_5000baseT_Full (1 << 16) + +-/* The forced speed, 10Mb, 100Mb, gigabit, 2.5GbE, 5GbE, 10GbE. */ ++/* The forced speed, 10Mb, 100Mb, gigabit, 2.5GbE, 5GbE, 10GbE and up. */ + #define SPEED_10 10 + #define SPEED_100 100 + #define SPEED_1000 1000 + #define SPEED_2500 2500 + #define SPEED_5000 5000 + #define SPEED_10000 10000 ++#define SPEED_25000 25000 ++#define SPEED_40000 40000 + + /* Duplex, half or full. */ + #define DUPLEX_HALF 0x00 +@@ -381,6 +400,16 @@ static void updateCapabilities(hwNode & interface, u32 supported, u32 supported2 + interface.addCapability("1000bt-fd", _("1Gbit/s (full duplex)")); + interface.setCapacity(1000000000ULL); + } ++ if((supported & SUPPORTED_1000baseKX_Full) || (supported2 & SUPPORTED2_1000baseX_Full)) ++ { ++ interface.addCapability("1000bx-fd", _("1Gbit/s (full duplex)")); ++ interface.setCapacity(1000000000ULL); ++ } ++ if(supported & SUPPORTED_2500baseX_Full) ++ { ++ interface.addCapability("2500bx-fd", _("2.5Gbit/s (full duplex)")); ++ interface.setCapacity(2500000000ULL); ++ } + if(supported2 & SUPPORTED2_2500baseT_Full) + { + interface.addCapability("2500bt-fd", _("2.5Gbit/s (full duplex)")); +@@ -396,6 +425,25 @@ static void updateCapabilities(hwNode & interface, u32 supported, u32 supported2 + interface.addCapability("10000bt-fd", _("10Gbit/s (full duplex)")); + interface.setCapacity(10000000000ULL); + } ++ if((supported & (SUPPORTED_10000baseKX4_Full | SUPPORTED_10000baseKR_Full)) || ++ (supported2 & (SUPPORTED2_10000baseCR_Full | SUPPORTED2_10000baseSR_Full | SUPPORTED2_10000baseLR_Full | ++ SUPPORTED2_10000baseLRM_Full | SUPPORTED2_10000baseER_Full))) ++ { ++ interface.addCapability("10000bx-fd", _("10Gbit/s (full duplex)")); ++ interface.setCapacity(10000000000ULL); ++ } ++ if((supported & SUPPORTED_25000baseCR_Full) || ++ (supported2 & (SUPPORTED2_25000baseKR_Full | SUPPORTED2_25000baseSR_Full))) ++ { ++ interface.addCapability("25000bx-fd", _("25Gbit/s (full duplex)")); ++ interface.setCapacity(25000000000ULL); ++ } ++ if(supported & (SUPPORTED_40000baseKR4_Full | SUPPORTED_40000baseCR4_Full | ++ SUPPORTED_40000baseSR4_Full | SUPPORTED_40000baseLR4_Full)) ++ { ++ interface.addCapability("40000bx-fd", _("40Gbit/s (full duplex)")); ++ interface.setCapacity(40000000000ULL); ++ } + if(supported & SUPPORTED_Autoneg) + interface.addCapability("autonegotiation", _("Auto-negotiation")); + +@@ -425,6 +473,14 @@ static void updateCapabilities(hwNode & interface, u32 supported, u32 supported2 + interface.setConfig("speed", "10Gbit/s"); + interface.setSize(10000000000ULL); + break; ++ case SPEED_25000: ++ interface.setConfig("speed", "25Gbit/s"); ++ interface.setSize(25000000000ULL); ++ break; ++ case SPEED_40000: ++ interface.setConfig("speed", "40Gbit/s"); ++ interface.setSize(40000000000ULL); ++ break; + } + switch(duplex) + { +-- +2.33.1 + diff --git a/SOURCES/0062-Update-POT-file.patch b/SOURCES/0062-Update-POT-file.patch new file mode 100644 index 0000000..03aaa6a --- /dev/null +++ b/SOURCES/0062-Update-POT-file.patch @@ -0,0 +1,1804 @@ +From 04d7d0162b8099bd624e5d0237a45e7eabff9bb5 Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Fri, 22 Oct 2021 00:37:04 -0600 +Subject: [PATCH 62/65] Update POT file + +--- + src/po/lshw.pot | 892 ++++++++++++++++++++++++++++++------------------ + 1 file changed, 566 insertions(+), 326 deletions(-) + +diff --git a/src/po/lshw.pot b/src/po/lshw.pot +index 186b5bf..6330c69 100644 +--- a/src/po/lshw.pot ++++ b/src/po/lshw.pot +@@ -7,1144 +7,1369 @@ + msgid "" + msgstr "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +- "POT-Creation-Date: 2009-10-08 14:02+0200\n" ++ "POT-Creation-Date: 2021-10-22 00:36-0600\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" ++ "Language: \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=CHARSET\n" + "Content-Transfer-Encoding: 8bit\n" + +-#: ../core/abi.cc:49 ++#: ../core/abi.cc:50 + msgid "32-bit processes" + msgstr "" + +-#: ../core/abi.cc:50 ++#: ../core/abi.cc:51 + msgid "64-bit processes" + msgstr "" + +-#: ../core/cpuid.cc:284 ++#: ../core/cpuid.cc:285 + msgid "CPU virtualization (Vanderpool)" + msgstr "" + +-#: ../core/cpuid.cc:297 ../core/cpuid.cc:298 ++#: ../core/cpuid.cc:298 ../core/cpuid.cc:299 + msgid "Logical CPU" + msgstr "" + +-#: ../core/cpuid.cc:301 ++#: ../core/cpuid.cc:302 + msgid "HyperThreading" + msgstr "" + +-#: ../core/cpuid.cc:365 ../core/cpuid.cc:372 ../core/cpuid.cc:466 ++#: ../core/cpuid.cc:366 ../core/cpuid.cc:373 ../core/cpuid.cc:467 + msgid "L1 cache" + msgstr "" + +-#: ../core/cpuid.cc:383 ../core/cpuid.cc:390 ../core/cpuid.cc:478 ++#: ../core/cpuid.cc:384 ../core/cpuid.cc:391 ../core/cpuid.cc:479 + msgid "L2 cache" + msgstr "" + +-#: ../core/dmi.cc:141 +-msgid "Other" ++#: ../core/dmi.cc:155 ++msgid "Other Battery" + msgstr "" + +-#: ../core/dmi.cc:142 +-msgid "Unknown" ++#: ../core/dmi.cc:156 ++msgid "Unknown Battery" + msgstr "" + +-#: ../core/dmi.cc:143 +-msgid "Lead Acid" ++#: ../core/dmi.cc:157 ++msgid "Lead Acid Battery" + msgstr "" + +-#: ../core/dmi.cc:144 +-msgid "Nickel Cadmium" ++#: ../core/dmi.cc:158 ++msgid "Nickel Cadmium Battery" + msgstr "" + +-#: ../core/dmi.cc:145 +-msgid "Nickel Metal Hydride" ++#: ../core/dmi.cc:159 ++msgid "Nickel Metal Hydride Battery" + msgstr "" + +-#: ../core/dmi.cc:146 +-msgid "Lithium Ion" ++#: ../core/dmi.cc:160 ++msgid "Lithium Ion Battery" + msgstr "" + +-#: ../core/dmi.cc:147 +-msgid "Zinc Air" ++#: ../core/dmi.cc:161 ++msgid "Zinc Air Battery" + msgstr "" + +-#: ../core/dmi.cc:148 +-msgid "Lithium Polymer" ++#: ../core/dmi.cc:162 ++msgid "Lithium Polymer Battery" + msgstr "" + +-#: ../core/dmi.cc:262 ++#: ../core/dmi.cc:167 ++msgid "Battery" ++msgstr "" ++ ++#: ../core/dmi.cc:279 + msgid "Server Blade" + msgstr "" + +-#: ../core/dmi.cc:263 +-msgid "Connectivitiy Switch" ++#: ../core/dmi.cc:280 ++msgid "Connectivity Switch" + msgstr "" + +-#: ../core/dmi.cc:264 ++#: ../core/dmi.cc:281 + msgid "System Management Module" + msgstr "" + +-#: ../core/dmi.cc:265 ++#: ../core/dmi.cc:282 + msgid "Processor Module" + msgstr "" + +-#: ../core/dmi.cc:266 ++#: ../core/dmi.cc:283 + msgid "I/O Module" + msgstr "" + +-#: ../core/dmi.cc:267 ++#: ../core/dmi.cc:284 + msgid "Memory Module" + msgstr "" + +-#: ../core/dmi.cc:268 ++#: ../core/dmi.cc:285 + msgid "Daughter Board" + msgstr "" + +-#: ../core/dmi.cc:269 ../core/dmi.cc:1031 ++#: ../core/dmi.cc:286 ../core/dmi.cc:1094 + msgid "Motherboard" + msgstr "" + +-#: ../core/dmi.cc:270 ++#: ../core/dmi.cc:287 + msgid "Processor/Memory Module" + msgstr "" + +-#: ../core/dmi.cc:271 ++#: ../core/dmi.cc:288 + msgid "Processor/IO Module " + msgstr "" + +-#: ../core/dmi.cc:272 ++#: ../core/dmi.cc:289 + msgid "Interconnect Board" + msgstr "" + +-#: ../core/dmi.cc:289 ++#: ../core/dmi.cc:306 + msgid "ISA bus" + msgstr "" + +-#: ../core/dmi.cc:291 ++#: ../core/dmi.cc:308 + msgid "MCA bus" + msgstr "" + +-#: ../core/dmi.cc:293 ++#: ../core/dmi.cc:310 + msgid "EISA bus" + msgstr "" + +-#: ../core/dmi.cc:295 ++#: ../core/dmi.cc:312 + msgid "PCI bus" + msgstr "" + +-#: ../core/dmi.cc:297 ++#: ../core/dmi.cc:314 + msgid "PCMCIA/PCCard" + msgstr "" + +-#: ../core/dmi.cc:299 ++#: ../core/dmi.cc:316 + msgid "Plug-and-Play" + msgstr "" + +-#: ../core/dmi.cc:301 ++#: ../core/dmi.cc:318 + msgid "Advanced Power Management" + msgstr "" + +-#: ../core/dmi.cc:303 ++#: ../core/dmi.cc:320 + msgid "BIOS EEPROM can be upgraded" + msgstr "" + +-#: ../core/dmi.cc:305 ++#: ../core/dmi.cc:322 + msgid "BIOS shadowing" + msgstr "" + +-#: ../core/dmi.cc:307 ++#: ../core/dmi.cc:324 + msgid "VESA video extensions" + msgstr "" + +-#: ../core/dmi.cc:309 ++#: ../core/dmi.cc:326 + msgid "ESCD" + msgstr "" + +-#: ../core/dmi.cc:311 ++#: ../core/dmi.cc:328 + msgid "Booting from CD-ROM/DVD" + msgstr "" + +-#: ../core/dmi.cc:313 ++#: ../core/dmi.cc:330 + msgid "Selectable boot path" + msgstr "" + +-#: ../core/dmi.cc:315 ++#: ../core/dmi.cc:332 + msgid "BIOS ROM is socketed" + msgstr "" + +-#: ../core/dmi.cc:317 ++#: ../core/dmi.cc:334 + msgid "Booting from PCMCIA" + msgstr "" + +-#: ../core/dmi.cc:319 ++#: ../core/dmi.cc:336 + msgid "Enhanced Disk Drive extensions" + msgstr "" + +-#: ../core/dmi.cc:321 ++#: ../core/dmi.cc:338 + msgid "NEC 9800 floppy" + msgstr "" + +-#: ../core/dmi.cc:323 ++#: ../core/dmi.cc:340 + msgid "Toshiba floppy" + msgstr "" + +-#: ../core/dmi.cc:325 ++#: ../core/dmi.cc:342 + msgid "5.25\" 360KB floppy" + msgstr "" + +-#: ../core/dmi.cc:327 ++#: ../core/dmi.cc:344 + msgid "5.25\" 1.2MB floppy" + msgstr "" + +-#: ../core/dmi.cc:329 ++#: ../core/dmi.cc:346 + msgid "3.5\" 720KB floppy" + msgstr "" + +-#: ../core/dmi.cc:331 ++#: ../core/dmi.cc:348 + msgid "3.5\" 2.88MB floppy" + msgstr "" + +-#: ../core/dmi.cc:333 ++#: ../core/dmi.cc:350 + msgid "Print Screen key" + msgstr "" + +-#: ../core/dmi.cc:335 ++#: ../core/dmi.cc:352 + msgid "i8042 keyboard controller" + msgstr "" + +-#: ../core/dmi.cc:337 ++#: ../core/dmi.cc:354 + msgid "INT14 serial line control" + msgstr "" + +-#: ../core/dmi.cc:339 ++#: ../core/dmi.cc:356 + msgid "INT17 printer control" + msgstr "" + +-#: ../core/dmi.cc:341 ++#: ../core/dmi.cc:358 + msgid "INT10 CGA/Mono video" + msgstr "" + +-#: ../core/dmi.cc:343 ++#: ../core/dmi.cc:360 + msgid "NEC PC-98" + msgstr "" + +-#: ../core/dmi.cc:355 ++#: ../core/dmi.cc:372 + msgid "ACPI" + msgstr "" + +-#: ../core/dmi.cc:357 ++#: ../core/dmi.cc:374 + msgid "USB legacy emulation" + msgstr "" + +-#: ../core/dmi.cc:359 ++#: ../core/dmi.cc:376 + msgid "AGP" + msgstr "" + +-#: ../core/dmi.cc:361 ++#: ../core/dmi.cc:378 + msgid "I2O booting" + msgstr "" + +-#: ../core/dmi.cc:363 ++#: ../core/dmi.cc:380 + msgid "Booting from LS-120" + msgstr "" + +-#: ../core/dmi.cc:365 ++#: ../core/dmi.cc:382 + msgid "Booting from ATAPI ZIP" + msgstr "" + +-#: ../core/dmi.cc:367 ++#: ../core/dmi.cc:384 + msgid "Booting from IEEE1394 (Firewire)" + msgstr "" + +-#: ../core/dmi.cc:369 ++#: ../core/dmi.cc:386 + msgid "Smart battery" + msgstr "" + +-#: ../core/dmi.cc:375 ++#: ../core/dmi.cc:392 + msgid "BIOS boot specification" + msgstr "" + +-#: ../core/dmi.cc:378 ++#: ../core/dmi.cc:395 + msgid "Function-key initiated network service boot" + msgstr "" + +-#: ../core/dmi.cc:401 ++#: ../core/dmi.cc:397 ++msgid "UEFI specification is supported" ++msgstr "" ++ ++#: ../core/dmi.cc:399 ++msgid "This machine is a virtual machine" ++msgstr "" ++ ++#: ../core/dmi.cc:429 + msgid "Non-burst" + msgstr "" + +-#: ../core/dmi.cc:403 ++#: ../core/dmi.cc:431 + msgid "Burst" + msgstr "" + +-#: ../core/dmi.cc:405 ++#: ../core/dmi.cc:433 + msgid "Pipeline burst" + msgstr "" + +-#: ../core/dmi.cc:407 ../core/dmi.cc:570 ++#: ../core/dmi.cc:435 ../core/dmi.cc:608 + msgid "Synchronous" + msgstr "" + +-#: ../core/dmi.cc:409 ++#: ../core/dmi.cc:437 + msgid "Asynchronous" + msgstr "" + +-#: ../core/dmi.cc:425 ++#: ../core/dmi.cc:453 + msgid "Internal" + msgstr "" + +-#: ../core/dmi.cc:428 ++#: ../core/dmi.cc:456 + msgid "External" + msgstr "" + +-#: ../core/dmi.cc:437 +-msgid "Write-trough" ++#: ../core/dmi.cc:465 ++msgid "Write-through" + msgstr "" + +-#: ../core/dmi.cc:440 ++#: ../core/dmi.cc:468 + msgid "Write-back" + msgstr "" + +-#: ../core/dmi.cc:443 ++#: ../core/dmi.cc:471 + msgid "Varies With Memory Address" + msgstr "" + +-#: ../core/dmi.cc:447 ++#: ../core/dmi.cc:475 + msgid "cache" + msgstr "" + +-#: ../core/dmi.cc:452 ++#: ../core/dmi.cc:480 + msgid "Instruction cache" + msgstr "" + +-#: ../core/dmi.cc:455 ++#: ../core/dmi.cc:483 + msgid "Data cache" + msgstr "" + +-#: ../core/dmi.cc:458 ++#: ../core/dmi.cc:486 + msgid "Unified cache" + msgstr "" + +-#: ../core/dmi.cc:473 ++#: ../core/dmi.cc:501 + msgid "System board or motherboard" + msgstr "" + +-#: ../core/dmi.cc:474 ++#: ../core/dmi.cc:502 + msgid "ISA add-on card" + msgstr "" + +-#: ../core/dmi.cc:475 ++#: ../core/dmi.cc:503 + msgid "EISA add-on card" + msgstr "" + +-#: ../core/dmi.cc:476 ++#: ../core/dmi.cc:504 + msgid "PCI add-on card" + msgstr "" + +-#: ../core/dmi.cc:477 ++#: ../core/dmi.cc:505 + msgid "MCA add-on card" + msgstr "" + +-#: ../core/dmi.cc:478 ++#: ../core/dmi.cc:506 + msgid "PCMCIA add-on card" + msgstr "" + +-#: ../core/dmi.cc:479 ++#: ../core/dmi.cc:507 + msgid "Proprietary add-on card" + msgstr "" + +-#: ../core/dmi.cc:480 ++#: ../core/dmi.cc:508 + msgid "NuBus" + msgstr "" + +-#: ../core/dmi.cc:484 ++#: ../core/dmi.cc:512 + msgid "PC-98/C20 add-on card" + msgstr "" + +-#: ../core/dmi.cc:485 ++#: ../core/dmi.cc:513 + msgid "PC-98/C24 add-on card" + msgstr "" + +-#: ../core/dmi.cc:486 ++#: ../core/dmi.cc:514 + msgid "PC-98/E add-on card" + msgstr "" + +-#: ../core/dmi.cc:487 ++#: ../core/dmi.cc:515 + msgid "PC-98/Local bus add-on card" + msgstr "" + +-#: ../core/dmi.cc:488 ++#: ../core/dmi.cc:516 + msgid "PC-98/Card slot add-on card" + msgstr "" + +-#: ../core/dmi.cc:505 ++#: ../core/dmi.cc:533 + msgid " SIMM" + msgstr "" + +-#: ../core/dmi.cc:506 ++#: ../core/dmi.cc:534 + msgid " SIP" + msgstr "" + +-#: ../core/dmi.cc:507 ++#: ../core/dmi.cc:535 + msgid " Chip" + msgstr "" + +-#: ../core/dmi.cc:508 ++#: ../core/dmi.cc:536 + msgid " DIP" + msgstr "" + +-#: ../core/dmi.cc:509 ++#: ../core/dmi.cc:537 + msgid " ZIP" + msgstr "" + +-#: ../core/dmi.cc:510 ++#: ../core/dmi.cc:538 + msgid " Proprietary Card" + msgstr "" + +-#: ../core/dmi.cc:511 ++#: ../core/dmi.cc:539 + msgid " DIMM" + msgstr "" + +-#: ../core/dmi.cc:512 ++#: ../core/dmi.cc:540 + msgid " TSOP" + msgstr "" + +-#: ../core/dmi.cc:513 ++#: ../core/dmi.cc:541 + msgid " Row of chips" + msgstr "" + +-#: ../core/dmi.cc:514 ++#: ../core/dmi.cc:542 + msgid " RIMM" + msgstr "" + +-#: ../core/dmi.cc:515 ++#: ../core/dmi.cc:543 + msgid " SODIMM" + msgstr "" + +-#: ../core/dmi.cc:516 ++#: ../core/dmi.cc:544 + msgid " SRIMM" + msgstr "" + +-#: ../core/dmi.cc:517 ++#: ../core/dmi.cc:545 + msgid " FB-DIMM" + msgstr "" + +-#: ../core/dmi.cc:532 ++#: ../core/dmi.cc:560 + msgid " DRAM" + msgstr "" + +-#: ../core/dmi.cc:533 ++#: ../core/dmi.cc:561 + msgid " EDRAM" + msgstr "" + +-#: ../core/dmi.cc:534 ++#: ../core/dmi.cc:562 + msgid " VRAM" + msgstr "" + +-#: ../core/dmi.cc:535 ++#: ../core/dmi.cc:563 + msgid " SRAM" + msgstr "" + +-#: ../core/dmi.cc:536 ++#: ../core/dmi.cc:564 + msgid " RAM" + msgstr "" + +-#: ../core/dmi.cc:537 ++#: ../core/dmi.cc:565 + msgid " ROM" + msgstr "" + +-#: ../core/dmi.cc:538 ++#: ../core/dmi.cc:566 + msgid " FLASH" + msgstr "" + +-#: ../core/dmi.cc:539 ++#: ../core/dmi.cc:567 + msgid " EEPROM" + msgstr "" + +-#: ../core/dmi.cc:540 ++#: ../core/dmi.cc:568 + msgid " FEPROM" + msgstr "" + +-#: ../core/dmi.cc:541 ++#: ../core/dmi.cc:569 + msgid " EPROM" + msgstr "" + +-#: ../core/dmi.cc:542 ++#: ../core/dmi.cc:570 + msgid " CDRAM" + msgstr "" + +-#: ../core/dmi.cc:543 ++#: ../core/dmi.cc:571 + msgid " 3DRAM" + msgstr "" + +-#: ../core/dmi.cc:544 ++#: ../core/dmi.cc:572 + msgid " SDRAM" + msgstr "" + +-#: ../core/dmi.cc:545 ++#: ../core/dmi.cc:573 + msgid " SGRAM" + msgstr "" + +-#: ../core/dmi.cc:546 ++#: ../core/dmi.cc:574 + msgid " RDRAM" + msgstr "" + +-#: ../core/dmi.cc:547 ++#: ../core/dmi.cc:575 + msgid " DDR" + msgstr "" + +-#: ../core/dmi.cc:548 ++#: ../core/dmi.cc:576 + msgid " DDR2" + msgstr "" + +-#: ../core/dmi.cc:549 ++#: ../core/dmi.cc:577 + msgid " DDR2 FB-DIMM" + msgstr "" + +-#: ../core/dmi.cc:562 ++#: ../core/dmi.cc:600 + msgid "Fast-paged" + msgstr "" + +-#: ../core/dmi.cc:564 ++#: ../core/dmi.cc:602 + msgid "Static column" + msgstr "" + +-#: ../core/dmi.cc:566 ++#: ../core/dmi.cc:604 + msgid "Pseudo-static" + msgstr "" + +-#: ../core/dmi.cc:568 ++#: ../core/dmi.cc:606 + msgid "RAMBUS" + msgstr "" + +-#: ../core/dmi.cc:572 ++#: ../core/dmi.cc:610 + msgid "CMOS" + msgstr "" + +-#: ../core/dmi.cc:574 ++#: ../core/dmi.cc:612 + msgid "EDO" + msgstr "" + +-#: ../core/dmi.cc:576 ++#: ../core/dmi.cc:614 + msgid "Window DRAM" + msgstr "" + +-#: ../core/dmi.cc:578 ++#: ../core/dmi.cc:616 + msgid "Cache DRAM" + msgstr "" + +-#: ../core/dmi.cc:580 ++#: ../core/dmi.cc:618 + msgid "Non-volatile" + msgstr "" + +-#: ../core/dmi.cc:593 ++#: ../core/dmi.cc:620 ++msgid "Registered (Buffered)" ++msgstr "" ++ ++#: ../core/dmi.cc:622 ++msgid "Unbuffered (Unregistered)" ++msgstr "" ++ ++#: ../core/dmi.cc:624 ++msgid "LRDIMM" ++msgstr "" ++ ++#: ../core/dmi.cc:637 + msgid "Desktop Computer" + msgstr "" + +-#: ../core/dmi.cc:594 ++#: ../core/dmi.cc:638 + msgid "Low Profile Desktop Computer" + msgstr "" + +-#: ../core/dmi.cc:595 ++#: ../core/dmi.cc:639 + msgid "Pizza Box Computer" + msgstr "" + +-#: ../core/dmi.cc:596 ++#: ../core/dmi.cc:640 + msgid "Mini Tower Computer" + msgstr "" + +-#: ../core/dmi.cc:597 ++#: ../core/dmi.cc:641 + msgid "Tower Computer" + msgstr "" + +-#: ../core/dmi.cc:598 ++#: ../core/dmi.cc:642 + msgid "Portable Computer" + msgstr "" + +-#: ../core/dmi.cc:599 ++#: ../core/dmi.cc:643 + msgid "Laptop" + msgstr "" + +-#: ../core/dmi.cc:600 ++#: ../core/dmi.cc:644 + msgid "Notebook" + msgstr "" + +-#: ../core/dmi.cc:601 ++#: ../core/dmi.cc:645 + msgid "Hand Held Computer" + msgstr "" + +-#: ../core/dmi.cc:602 ++#: ../core/dmi.cc:646 + msgid "Docking Station" + msgstr "" + +-#: ../core/dmi.cc:603 ++#: ../core/dmi.cc:647 + msgid "All In One" + msgstr "" + +-#: ../core/dmi.cc:604 ++#: ../core/dmi.cc:648 + msgid "Sub Notebook" + msgstr "" + +-#: ../core/dmi.cc:605 ++#: ../core/dmi.cc:649 + msgid "Space-saving Computer" + msgstr "" + +-#: ../core/dmi.cc:606 ++#: ../core/dmi.cc:650 + msgid "Lunch Box Computer" + msgstr "" + +-#: ../core/dmi.cc:607 ++#: ../core/dmi.cc:651 + msgid "System" + msgstr "" + +-#: ../core/dmi.cc:608 ++#: ../core/dmi.cc:652 + msgid "Expansion Chassis" + msgstr "" + +-#: ../core/dmi.cc:609 ++#: ../core/dmi.cc:653 + msgid "Sub Chassis" + msgstr "" + +-#: ../core/dmi.cc:610 ++#: ../core/dmi.cc:654 + msgid "Bus Expansion Chassis" + msgstr "" + +-#: ../core/dmi.cc:611 ++#: ../core/dmi.cc:655 + msgid "Peripheral Chassis" + msgstr "" + +-#: ../core/dmi.cc:612 ++#: ../core/dmi.cc:656 + msgid "RAID Chassis" + msgstr "" + +-#: ../core/dmi.cc:613 ++#: ../core/dmi.cc:657 + msgid "Rack Mount Chassis" + msgstr "" + +-#: ../core/dmi.cc:614 ++#: ../core/dmi.cc:658 + msgid "Sealed-case PC" + msgstr "" + +-#: ../core/dmi.cc:615 ++#: ../core/dmi.cc:659 + msgid "Multi-system" + msgstr "" + +-#: ../core/dmi.cc:988 ++#: ../core/dmi.cc:660 ++msgid "Compact PCI" ++msgstr "" ++ ++#: ../core/dmi.cc:661 ++msgid "Advanced TCA" ++msgstr "" ++ ++#: ../core/dmi.cc:662 ++msgid "Blade" ++msgstr "" ++ ++#: ../core/dmi.cc:663 ++msgid "Blade enclosure" ++msgstr "" ++ ++#: ../core/dmi.cc:664 ++msgid "Tablet" ++msgstr "" ++ ++#: ../core/dmi.cc:665 ++msgid "Convertible" ++msgstr "" ++ ++#: ../core/dmi.cc:666 ++msgid "Detachable" ++msgstr "" ++ ++#: ../core/dmi.cc:667 ++msgid "IoT Gateway" ++msgstr "" ++ ++#: ../core/dmi.cc:668 ++msgid "Embedded PC" ++msgstr "" ++ ++#: ../core/dmi.cc:669 ++msgid "Mini PC" ++msgstr "" ++ ++#: ../core/dmi.cc:670 ++msgid "Stick PC" ++msgstr "" ++ ++#: ../core/dmi.cc:1045 + msgid "BIOS" + msgstr "" + +-#: ../core/dmi.cc:1084 ++#: ../core/dmi.cc:1147 + msgid "CPU" + msgstr "" + +-#: ../core/dmi.cc:1131 ../core/dmi.cc:1218 ../core/dmi.cc:1460 ++#: ../core/dmi.cc:1198 ../core/dmi.cc:1312 ../core/dmi.cc:1613 + msgid "[empty]" + msgstr "" + +-#: ../core/dmi.cc:1165 ++#: ../core/dmi.cc:1226 ++msgid "64-bit capable" ++msgstr "" ++ ++#: ../core/dmi.cc:1259 + msgid " Memory Controller" + msgstr "" + +-#: ../core/dmi.cc:1183 ../core/dmi.cc:1391 ++#: ../core/dmi.cc:1277 ../core/dmi.cc:1536 + msgid "empty memory bank" + msgstr "" + +-#: ../core/dmi.cc:1345 ++#: ../core/dmi.cc:1447 + msgid "System Memory" + msgstr "" + +-#: ../core/dmi.cc:1350 ++#: ../core/dmi.cc:1453 + msgid "Video Memory" + msgstr "" + +-#: ../core/dmi.cc:1353 ++#: ../core/dmi.cc:1457 + msgid "Flash Memory" + msgstr "" + +-#: ../core/dmi.cc:1356 ++#: ../core/dmi.cc:1461 + msgid "NVRAM" + msgstr "" + +-#: ../core/dmi.cc:1359 ++#: ../core/dmi.cc:1465 + msgid "Cache Memory" + msgstr "" + +-#: ../core/dmi.cc:1363 ++#: ../core/dmi.cc:1469 + msgid "Generic Memory" + msgstr "" + +-#: ../core/dmi.cc:1609 ++#: ../core/dmi.cc:1490 ++msgid "Parity error correction" ++msgstr "" ++ ++#: ../core/dmi.cc:1494 ++msgid "Single-bit error-correcting code (ECC)" ++msgstr "" ++ ++#: ../core/dmi.cc:1498 ++msgid "Multi-bit error-correcting code (ECC)" ++msgstr "" ++ ++#: ../core/dmi.cc:1502 ++msgid "CRC error correction" ++msgstr "" ++ ++#: ../core/dmi.cc:1783 + msgid "make outbound connections" + msgstr "" + +-#: ../core/dmi.cc:1610 ++#: ../core/dmi.cc:1784 + msgid "receive inbound connections" + msgstr "" + +-#: ../core/hw.cc:1615 ++#: ../core/hw.cc:1713 + msgid "" + msgstr "" + +-#: ../core/hw.cc:2102 ++#: ../core/hw.cc:2249 + msgid "(none)" + msgstr "" + +-#: ../core/hw.cc:2105 ++#: ../core/hw.cc:2252 + msgid "dma" + msgstr "" + +-#: ../core/hw.cc:2109 ++#: ../core/hw.cc:2256 + msgid "irq" + msgstr "" + +-#: ../core/hw.cc:2113 ++#: ../core/hw.cc:2260 + msgid "iomemory" + msgstr "" + +-#: ../core/hw.cc:2117 ++#: ../core/hw.cc:2264 + msgid "memory" + msgstr "" + +-#: ../core/hw.cc:2119 ++#: ../core/hw.cc:2266 + msgid "(prefetchable)" + msgstr "" + +-#: ../core/hw.cc:2122 ++#: ../core/hw.cc:2269 + msgid "ioport" + msgstr "" + +-#: ../core/hw.cc:2126 ++#: ../core/hw.cc:2273 + #, c-format + msgid "%lx(size=%ld)" + msgstr "" + +-#: ../core/hw.cc:2129 ++#: ../core/hw.cc:2276 + msgid "(unknown)" + msgstr "" + +-#: ../core/hw.cc:2299 ++#: ../core/hw.cc:2446 + msgid "false" + msgstr "" + +-#: ../core/hw.cc:2299 ++#: ../core/hw.cc:2446 + msgid "true" + msgstr "" + +-#: ../core/hw.cc:2301 ++#: ../core/hw.cc:2448 + msgid "(nil)" + msgstr "" + +-#: ../core/mem.cc:125 ++#: ../core/lvm.cc:132 ++msgid "Linux LVM Physical Volume" ++msgstr "" ++ ++#: ../core/mem.cc:154 + msgid "System memory" + msgstr "" + +-#: ../core/network.cc:211 ++#: ../core/network.cc:274 + msgid "Ethernet" + msgstr "" + +-#: ../core/network.cc:213 ++#: ../core/network.cc:276 + msgid "SLIP" + msgstr "" + +-#: ../core/network.cc:215 ++#: ../core/network.cc:278 + msgid "loopback" + msgstr "" + +-#: ../core/network.cc:217 ++#: ../core/network.cc:280 + msgid "FDDI" + msgstr "" + +-#: ../core/network.cc:219 ++#: ../core/network.cc:282 + msgid "IEEE1394" + msgstr "" + +-#: ../core/network.cc:221 ++#: ../core/network.cc:284 + msgid "IRDA" + msgstr "" + +-#: ../core/network.cc:223 ++#: ../core/network.cc:286 + msgid "PPP" + msgstr "" + +-#: ../core/network.cc:225 ++#: ../core/network.cc:288 + msgid "X25" + msgstr "" + +-#: ../core/network.cc:227 ++#: ../core/network.cc:290 + msgid "IPtunnel" + msgstr "" + +-#: ../core/network.cc:229 ++#: ../core/network.cc:292 + msgid "Framerelay.DLCI" + msgstr "" + +-#: ../core/network.cc:231 ++#: ../core/network.cc:294 + msgid "Framerelay.AD" + msgstr "" + +-#: ../core/network.cc:233 ++#: ../core/network.cc:296 + msgid "IP6tunnel" + msgstr "" + +-#: ../core/network.cc:235 ++#: ../core/network.cc:298 + msgid "IP6inIP4" + msgstr "" + +-#: ../core/network.cc:372 ../core/network.cc:380 ../core/network.cc:512 +-msgid "Logical interface" +-msgstr "" +- +-#: ../core/network.cc:374 +-msgid "Physical interface" +-msgstr "" +- +-#: ../core/network.cc:388 +-msgid "Wireless-LAN" +-msgstr "" +- +-#: ../core/network.cc:390 ../core/usb.cc:261 +-msgid "Wireless interface" +-msgstr "" +- +-#: ../core/network.cc:411 ++#: ../core/network.cc:364 + msgid "twisted pair" + msgstr "" + +-#: ../core/network.cc:413 ++#: ../core/network.cc:366 + msgid "AUI" + msgstr "" + +-#: ../core/network.cc:415 ++#: ../core/network.cc:368 + msgid "BNC" + msgstr "" + +-#: ../core/network.cc:417 +-msgid "Media Independant Interface" ++#: ../core/network.cc:370 ++msgid "Media Independent Interface" + msgstr "" + +-#: ../core/network.cc:419 ++#: ../core/network.cc:372 + msgid "optical fibre" + msgstr "" + +-#: ../core/network.cc:422 ++#: ../core/network.cc:375 + msgid "10Mbit/s" + msgstr "" + +-#: ../core/network.cc:427 ++#: ../core/network.cc:380 + msgid "10Mbit/s (full duplex)" + msgstr "" + +-#: ../core/network.cc:432 ++#: ../core/network.cc:385 + msgid "100Mbit/s" + msgstr "" + +-#: ../core/network.cc:437 ++#: ../core/network.cc:390 + msgid "100Mbit/s (full duplex)" + msgstr "" + +-#: ../core/network.cc:447 ++#: ../core/network.cc:400 ../core/network.cc:405 + msgid "1Gbit/s (full duplex)" + msgstr "" + +-#: ../core/network.cc:451 ++#: ../core/network.cc:410 ../core/network.cc:415 ++msgid "2.5Gbit/s (full duplex)" ++msgstr "" ++ ++#: ../core/network.cc:420 ++msgid "5Gbit/s (full duplex)" ++msgstr "" ++ ++#: ../core/network.cc:425 ../core/network.cc:432 ++msgid "10Gbit/s (full duplex)" ++msgstr "" ++ ++#: ../core/network.cc:438 ++msgid "25Gbit/s (full duplex)" ++msgstr "" ++ ++#: ../core/network.cc:444 ++msgid "40Gbit/s (full duplex)" ++msgstr "" ++ ++#: ../core/network.cc:448 + msgid "Auto-negotiation" + msgstr "" + +-#: ../core/pci.cc:725 ++#: ../core/network.cc:636 ../core/network.cc:644 ../core/network.cc:684 ++msgid "Logical interface" ++msgstr "" ++ ++#: ../core/network.cc:638 ++msgid "Physical interface" ++msgstr "" ++ ++#: ../core/network.cc:652 ++msgid "Wireless-LAN" ++msgstr "" ++ ++#: ../core/network.cc:654 ../core/usb.cc:263 ++msgid "Wireless interface" ++msgstr "" ++ ++#: ../core/pci.cc:736 + msgid "PCI Express" + msgstr "" + +-#: ../core/print.cc:143 ../gui/print-gui.cc:116 ++#: ../core/print.cc:143 ../gui/print-gui.cc:114 + msgid " DISABLED" + msgstr "" + +-#: ../core/print.cc:145 ../gui/print-gui.cc:118 ++#: ../core/print.cc:145 ../gui/print-gui.cc:116 + msgid " UNCLAIMED" + msgstr "" + +-#: ../core/print.cc:175 ++#: ../core/print.cc:178 + msgid "description" + msgstr "" + +-#: ../core/print.cc:189 ../gui/print-gui.cc:139 ++#: ../core/print.cc:195 ../gui/print-gui.cc:137 + msgid "product" + msgstr "" + +-#: ../core/print.cc:203 ../gui/print-gui.cc:140 ++#: ../core/print.cc:212 ../gui/print-gui.cc:138 + msgid "vendor" + msgstr "" + +-#: ../core/print.cc:217 ++#: ../core/print.cc:229 + msgid "physical id" + msgstr "" + +-#: ../core/print.cc:231 ../gui/print-gui.cc:141 ++#: ../core/print.cc:246 ../gui/print-gui.cc:139 + msgid "bus info" + msgstr "" + +-#: ../core/print.cc:249 ../gui/print-gui.cc:147 ++#: ../core/print.cc:267 ../gui/print-gui.cc:145 + msgid "logical name" + msgstr "" + +-#: ../core/print.cc:264 ../gui/print-gui.cc:150 ++#: ../core/print.cc:285 ../gui/print-gui.cc:148 + msgid "version" + msgstr "" + +-#: ../core/print.cc:278 ../gui/print-gui.cc:151 ++#: ../core/print.cc:302 ++msgid "date" ++msgstr "" ++ ++#: ../core/print.cc:319 ../gui/print-gui.cc:149 + msgid "serial" + msgstr "" + +-#: ../core/print.cc:292 ../gui/print-gui.cc:152 ++#: ../core/print.cc:336 ../gui/print-gui.cc:150 + msgid "slot" + msgstr "" + +-#: ../core/print.cc:306 ../gui/print-gui.cc:155 ++#: ../core/print.cc:353 ../gui/print-gui.cc:153 + msgid "size" + msgstr "" + +-#: ../core/print.cc:360 ../gui/print-gui.cc:157 ++#: ../core/print.cc:407 ../gui/print-gui.cc:155 + msgid "capacity" + msgstr "" + +-#: ../core/print.cc:416 ++#: ../core/print.cc:463 + msgid "address" + msgstr "" + +-#: ../core/print.cc:419 ++#: ../core/print.cc:466 + msgid "range" + msgstr "" + +-#: ../core/print.cc:430 ../gui/print-gui.cc:160 ++#: ../core/print.cc:477 ../gui/print-gui.cc:158 + msgid "width" + msgstr "" + +-#: ../core/print.cc:444 ../gui/print-gui.cc:163 ++#: ../core/print.cc:491 ../gui/print-gui.cc:161 + msgid "clock" + msgstr "" + +-#: ../core/print.cc:461 ../gui/print-gui.cc:170 ++#: ../core/print.cc:508 ../gui/print-gui.cc:168 + msgid "capabilities" + msgstr "" + +-#: ../core/print.cc:482 ++#: ../core/print.cc:529 + msgid "configuration:" + msgstr "" + +-#: ../core/print.cc:484 ++#: ../core/print.cc:531 + msgid "configuration of " + msgstr "" + +-#: ../core/print.cc:504 ++#: ../core/print.cc:551 + msgid "resources:" + msgstr "" + +-#: ../core/print.cc:506 ++#: ../core/print.cc:553 + msgid "resources of " + msgstr "" + +-#: ../core/print.cc:659 ++#: ../core/print.cc:706 + msgid "H/W path" + msgstr "" + +-#: ../core/print.cc:660 ../core/print.cc:677 ++#: ../core/print.cc:707 ../core/print.cc:724 + msgid "Device" + msgstr "" + +-#: ../core/print.cc:661 ../core/print.cc:678 ++#: ../core/print.cc:708 ../core/print.cc:725 + msgid "Class" + msgstr "" + +-#: ../core/print.cc:662 ../core/print.cc:679 ++#: ../core/print.cc:709 ../core/print.cc:726 + msgid "Description" + msgstr "" + +-#: ../core/print.cc:676 ++#: ../core/print.cc:723 + msgid "Bus info" + msgstr "" + +-#: ../core/usb.cc:165 ++#: ../core/usb.cc:167 + msgid "Audio device" + msgstr "" + +-#: ../core/usb.cc:169 ++#: ../core/usb.cc:171 + msgid "Control device" + msgstr "" + +-#: ../core/usb.cc:172 ++#: ../core/usb.cc:174 + msgid "MIDI" + msgstr "" + +-#: ../core/usb.cc:174 ++#: ../core/usb.cc:176 + msgid "Audio streaming" + msgstr "" + +-#: ../core/usb.cc:180 ++#: ../core/usb.cc:182 + msgid "Communication device" + msgstr "" + +-#: ../core/usb.cc:183 ++#: ../core/usb.cc:185 + msgid "Modem" + msgstr "" + +-#: ../core/usb.cc:184 ++#: ../core/usb.cc:186 + msgid "AT (Hayes) compatible" + msgstr "" + +-#: ../core/usb.cc:186 ++#: ../core/usb.cc:188 + msgid "Ethernet networking" + msgstr "" + +-#: ../core/usb.cc:187 ++#: ../core/usb.cc:189 + msgid "OBEX networking" + msgstr "" + +-#: ../core/usb.cc:191 ++#: ../core/usb.cc:193 + msgid "Human interface device" + msgstr "" + +-#: ../core/usb.cc:197 ++#: ../core/usb.cc:199 + msgid "Keyboard" + msgstr "" + +-#: ../core/usb.cc:200 ++#: ../core/usb.cc:202 + msgid "Mouse" + msgstr "" + +-#: ../core/usb.cc:207 ++#: ../core/usb.cc:209 + msgid "Printer" + msgstr "" + +-#: ../core/usb.cc:214 ++#: ../core/usb.cc:216 + msgid "Unidirectional" + msgstr "" + +-#: ../core/usb.cc:217 ++#: ../core/usb.cc:219 + msgid "Bidirectional" + msgstr "" + +-#: ../core/usb.cc:220 ++#: ../core/usb.cc:222 + msgid "IEEE 1284.4 compatible bidirectional" + msgstr "" + +-#: ../core/usb.cc:227 ++#: ../core/usb.cc:229 + msgid "Mass storage device" + msgstr "" + +-#: ../core/usb.cc:231 ++#: ../core/usb.cc:233 + msgid "RBC (typically Flash) mass storage" + msgstr "" + +-#: ../core/usb.cc:234 ++#: ../core/usb.cc:236 + msgid "SFF-8020i, MMC-2 (ATAPI)" + msgstr "" + +-#: ../core/usb.cc:237 ++#: ../core/usb.cc:239 + msgid "Floppy (UFI)" + msgstr "" + +-#: ../core/usb.cc:240 ++#: ../core/usb.cc:242 + msgid "SCSI" + msgstr "" + +-#: ../core/usb.cc:246 ++#: ../core/usb.cc:248 + msgid "USB hub" + msgstr "" + +-#: ../core/usb.cc:253 ++#: ../core/usb.cc:255 + msgid "Smart card reader" + msgstr "" + +-#: ../core/usb.cc:257 ++#: ../core/usb.cc:259 + msgid "Video" + msgstr "" + +-#: ../core/usb.cc:264 ++#: ../core/usb.cc:266 + msgid "Bluetooth wireless interface" + msgstr "" + +-#: ../core/usb.cc:265 ++#: ../core/usb.cc:267 + msgid "Bluetooth wireless radio" + msgstr "" + +-#: ../core/usb.cc:270 ++#: ../core/usb.cc:272 + msgid "Generic USB device" + msgstr "" + +-#: ../core/volumes.cc:308 ++#: ../core/volumes.cc:49 ++msgid "Blank volume" ++msgstr "" ++ ++#: ../core/volumes.cc:50 ++msgid "Windows FAT volume" ++msgstr "" ++ ++#: ../core/volumes.cc:51 ++msgid "Windows NTFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:52 ++msgid "OS/2 HPFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:53 ++msgid "EXT2/EXT3 volume" ++msgstr "" ++ ++#: ../core/volumes.cc:54 ++msgid "Linux ReiserFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:55 ++msgid "Linux ROMFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:56 ++msgid "Linux SquashFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:57 ++msgid "Linux CramFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:58 ++msgid "MinixFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:59 ++msgid "System V FS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:60 ++msgid "Linux JFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:61 ++msgid "Linux XFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:62 ++msgid "ISO-9660 volume" ++msgstr "" ++ ++#: ../core/volumes.cc:63 ++msgid "X-Box DVD volume" ++msgstr "" ++ ++#: ../core/volumes.cc:64 ++msgid "UDF volume" ++msgstr "" ++ ++#: ../core/volumes.cc:65 ++msgid "UFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:66 ++msgid "HP-UX HFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:67 ++msgid "VxFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:68 ++msgid "FFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:69 ++msgid "BeOS BFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:70 ++msgid "QNX FS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:71 ++msgid "MacOS MFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:72 ++msgid "MacOS HFS+ volume" ++msgstr "" ++ ++#: ../core/volumes.cc:73 ++msgid "MacOS HFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:74 ++msgid "MacOS APFS volume" ++msgstr "" ++ ++#: ../core/volumes.cc:75 ++msgid "Linux Unified Key Setup volume" ++msgstr "" ++ ++#: ../core/volumes.cc:76 ++msgid "Linux swap volume" ++msgstr "" ++ ++#: ../core/volumes.cc:316 + msgid "Extended Attributes" + msgstr "" + +-#: ../core/volumes.cc:310 ++#: ../core/volumes.cc:318 + msgid "4GB+ files" + msgstr "" + +-#: ../core/volumes.cc:312 ++#: ../core/volumes.cc:320 + msgid "16TB+ files" + msgstr "" + +-#: ../core/volumes.cc:314 ++#: ../core/volumes.cc:322 + msgid "directories with 65000+ subdirs" + msgstr "" + +-#: ../core/volumes.cc:316 ++#: ../core/volumes.cc:324 + msgid "needs recovery" + msgstr "" + +-#: ../core/volumes.cc:318 ++#: ../core/volumes.cc:326 + msgid "64bit filesystem" + msgstr "" + +-#: ../core/volumes.cc:320 ++#: ../core/volumes.cc:328 + msgid "extent-based allocation" + msgstr "" + +-#: ../core/volumes.cc:328 ++#: ../core/volumes.cc:336 + msgid "EXT4 volume" + msgstr "" + +-#: ../core/volumes.cc:334 ++#: ../core/volumes.cc:342 + msgid "EXT3 volume" + msgstr "" + +-#: ../core/volumes.cc:363 ++#: ../core/volumes.cc:371 + msgid "Encrypted volume" + msgstr "" + +-#: ../core/volumes.cc:635 ++#: ../core/volumes.cc:644 + msgid "Contains a bootable Mac OS installation" + msgstr "" + +-#: ../core/volumes.cc:637 ++#: ../core/volumes.cc:646 + msgid "Contains a bootable Mac OS X installation" + msgstr "" + +-#: ../core/volumes.cc:1074 ++#: ../core/volumes.cc:1156 + msgid "initialized volume" + msgstr "" + +-#: ../core/volumes.cc:1076 +-msgid "volume" +-msgstr "" +- +-#: ../gui/print-gui.cc:193 ++#: ../gui/print-gui.cc:191 + msgid "configuration" + msgstr "" + +-#: ../gui/print-gui.cc:209 ++#: ../gui/print-gui.cc:207 + msgid "resources" + msgstr "" + +-#: ../gui/print-gui.cc:221 ++#: ../gui/print-gui.cc:219 + msgid "this device hasn't been claimed\n" + msgstr "" + +-#: ../gui/print-gui.cc:224 ++#: ../gui/print-gui.cc:222 + msgid "this device has been disabled\n" + msgstr "" + +@@ -1181,76 +1406,91 @@ msgstr "" + + #: ../lshw.cc:31 + #, c-format +-msgid "\t-short output hardware paths\n" ++msgid "\t-json output hardware tree as a JSON object\n" + msgstr "" + + #: ../lshw.cc:32 + #, c-format ++msgid "\t-short output hardware paths\n" ++msgstr "" ++ ++#: ../lshw.cc:33 ++#, c-format + msgid "\t-businfo output bus information\n" + msgstr "" + +-#: ../lshw.cc:34 ++#: ../lshw.cc:35 + #, c-format + msgid "\t-X use graphical interface\n" + msgstr "" + +-#: ../lshw.cc:35 ++#: ../lshw.cc:36 + #, c-format + msgid "\n" + "options can be\n" + msgstr "" + +-#: ../lshw.cc:37 ++#: ../lshw.cc:38 ++#, c-format ++msgid "\t-dump filename display output and dump collected information into a file (SQLite database)\n" ++msgstr "" ++ ++#: ../lshw.cc:40 + #, c-format + msgid "\t-class CLASS only show a certain class of hardware\n" + msgstr "" + +-#: ../lshw.cc:38 ++#: ../lshw.cc:41 + #, c-format + msgid "\t-C CLASS same as '-class CLASS'\n" + msgstr "" + +-#: ../lshw.cc:39 ++#: ../lshw.cc:42 + #, c-format + msgid "\t-c CLASS same as '-class CLASS'\n" + msgstr "" + +-#: ../lshw.cc:41 ++#: ../lshw.cc:44 + #, c-format +-msgid "\t-disable TEST disable a test (like pci, isapnp, cpuid, etc. )\n" ++msgid "\t-disable TEST disable a test (like pci, isapnp, cpuid, etc.)\n" + msgstr "" + +-#: ../lshw.cc:43 ++#: ../lshw.cc:46 + #, c-format +-msgid "\t-enable TEST enable a test (like pci, isapnp, cpuid, etc. )\n" ++msgid "\t-enable TEST enable a test (like pci, isapnp, cpuid, etc.)\n" + msgstr "" + +-#: ../lshw.cc:44 ++#: ../lshw.cc:47 + #, c-format + msgid "\t-quiet don't display status\n" + msgstr "" + +-#: ../lshw.cc:45 ++#: ../lshw.cc:48 + #, c-format + msgid "\t-sanitize sanitize output (remove sensitive information like serial numbers, etc.)\n" + msgstr "" + +-#: ../lshw.cc:46 ++#: ../lshw.cc:49 + #, c-format + msgid "\t-numeric output numeric IDs (for PCI, USB, etc.)\n" + msgstr "" + +-#: ../lshw.cc:119 ++#: ../lshw.cc:50 ++#, c-format ++msgid "\t-notime exclude volatile attributes (timestamps) from output\n" ++msgstr "" ++ ++#: ../lshw.cc:126 + #, c-format + msgid "the latest version is %s\n" + msgstr "" + +-#: ../lshw.cc:215 ++#: ../lshw.cc:228 + #, c-format + msgid "WARNING: you should run this program as super-user.\n" + msgstr "" + +-#: ../lshw.cc:243 ++#: ../lshw.cc:259 + #, c-format + msgid "WARNING: output may be incomplete or inaccurate, you should run this program as super-user.\n" + msgstr "" +-- +2.33.1 + diff --git a/SOURCES/0063-Add-Catalan-translation.patch b/SOURCES/0063-Add-Catalan-translation.patch new file mode 100644 index 0000000..00d3d35 --- /dev/null +++ b/SOURCES/0063-Add-Catalan-translation.patch @@ -0,0 +1,1541 @@ +From d835aca26ab45e27a2779a7f2875b8f63ab4a3ae Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Fri, 22 Oct 2021 01:06:16 -0600 +Subject: [PATCH 63/65] Add Catalan translation + +--- + src/po/Makefile | 2 +- + src/po/ca.po | 1521 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1522 insertions(+), 1 deletion(-) + create mode 100644 src/po/ca.po + +diff --git a/src/po/ca.po b/src/po/ca.po +new file mode 100644 +index 0000000..09710a9 +--- /dev/null ++++ b/src/po/ca.po +@@ -0,0 +1,1521 @@ ++# Catalan translations for lshw ++# Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the lshw package. ++# Alex Henrie , 2021 ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: @(#) $Id$\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2021-10-22 00:36-0600\n" ++"PO-Revision-Date: 2021-10-22 01:05-0600\n" ++"Last-Translator: Alex Henrie \n" ++"Language-Team: Catalan \n" ++"Language: ca\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 3.0\n" ++ ++#: ../core/abi.cc:50 ++msgid "32-bit processes" ++msgstr "Processos de 32 bits" ++ ++#: ../core/abi.cc:51 ++msgid "64-bit processes" ++msgstr "Processos de 64 bits" ++ ++#: ../core/cpuid.cc:285 ++msgid "CPU virtualization (Vanderpool)" ++msgstr "Virtualització de CPU (Vanderpool)" ++ ++#: ../core/cpuid.cc:298 ../core/cpuid.cc:299 ++msgid "Logical CPU" ++msgstr "CPU lògica" ++ ++#: ../core/cpuid.cc:302 ++msgid "HyperThreading" ++msgstr "HyperThreading" ++ ++#: ../core/cpuid.cc:366 ../core/cpuid.cc:373 ../core/cpuid.cc:467 ++msgid "L1 cache" ++msgstr "Cau L1" ++ ++#: ../core/cpuid.cc:384 ../core/cpuid.cc:391 ../core/cpuid.cc:479 ++msgid "L2 cache" ++msgstr "Cau L2" ++ ++#: ../core/dmi.cc:155 ++msgid "Other Battery" ++msgstr "Altra pila" ++ ++#: ../core/dmi.cc:156 ++msgid "Unknown Battery" ++msgstr "Pila desconeguda" ++ ++#: ../core/dmi.cc:157 ++msgid "Lead Acid Battery" ++msgstr "Pila de plom i àcid" ++ ++#: ../core/dmi.cc:158 ++msgid "Nickel Cadmium Battery" ++msgstr "Pila de níquel cadmi" ++ ++#: ../core/dmi.cc:159 ++msgid "Nickel Metal Hydride Battery" ++msgstr "Pila d'hidrur de metall de níquel" ++ ++#: ../core/dmi.cc:160 ++msgid "Lithium Ion Battery" ++msgstr "Pila d'ió liti" ++ ++#: ../core/dmi.cc:161 ++msgid "Zinc Air Battery" ++msgstr "Pila de zinc i aire" ++ ++#: ../core/dmi.cc:162 ++msgid "Lithium Polymer Battery" ++msgstr "Pila de polímer de liti" ++ ++#: ../core/dmi.cc:167 ++msgid "Battery" ++msgstr "Pila" ++ ++#: ../core/dmi.cc:279 ++msgid "Server Blade" ++msgstr "Servidor blade" ++ ++#: ../core/dmi.cc:280 ++msgid "Connectivity Switch" ++msgstr "Commutador de connectivitat" ++ ++#: ../core/dmi.cc:281 ++msgid "System Management Module" ++msgstr "Mòdul de gestió de sistema" ++ ++#: ../core/dmi.cc:282 ++msgid "Processor Module" ++msgstr "Mòdul de processador" ++ ++#: ../core/dmi.cc:283 ++msgid "I/O Module" ++msgstr "Mòdul E/S" ++ ++#: ../core/dmi.cc:284 ++msgid "Memory Module" ++msgstr "Mòdul de memoria" ++ ++#: ../core/dmi.cc:285 ++msgid "Daughter Board" ++msgstr "Placa filla" ++ ++#: ../core/dmi.cc:286 ../core/dmi.cc:1094 ++msgid "Motherboard" ++msgstr "Placa mare" ++ ++#: ../core/dmi.cc:287 ++msgid "Processor/Memory Module" ++msgstr "Mòdul de processador/memòria" ++ ++#: ../core/dmi.cc:288 ++msgid "Processor/IO Module " ++msgstr "Mòdul de processador/ES " ++ ++#: ../core/dmi.cc:289 ++msgid "Interconnect Board" ++msgstr "Placa d'interconnexió" ++ ++#: ../core/dmi.cc:306 ++msgid "ISA bus" ++msgstr "Bus ISA" ++ ++#: ../core/dmi.cc:308 ++msgid "MCA bus" ++msgstr "Bus MCA" ++ ++#: ../core/dmi.cc:310 ++msgid "EISA bus" ++msgstr "Bus EISA" ++ ++#: ../core/dmi.cc:312 ++msgid "PCI bus" ++msgstr "Bus PCI" ++ ++#: ../core/dmi.cc:314 ++msgid "PCMCIA/PCCard" ++msgstr "PCMCIA/PCCard" ++ ++#: ../core/dmi.cc:316 ++msgid "Plug-and-Play" ++msgstr "Plug-and-Play" ++ ++#: ../core/dmi.cc:318 ++msgid "Advanced Power Management" ++msgstr "Gestió de poder automàtica" ++ ++#: ../core/dmi.cc:320 ++msgid "BIOS EEPROM can be upgraded" ++msgstr "Es pot actualitzar la EEPROM del BIOS" ++ ++#: ../core/dmi.cc:322 ++msgid "BIOS shadowing" ++msgstr "Ombreig de BIOS" ++ ++#: ../core/dmi.cc:324 ++msgid "VESA video extensions" ++msgstr "Extensions de vídeo VESA" ++ ++#: ../core/dmi.cc:326 ++msgid "ESCD" ++msgstr "ESCD" ++ ++#: ../core/dmi.cc:328 ++msgid "Booting from CD-ROM/DVD" ++msgstr "S'arranca des de CD-ROM/DVD" ++ ++#: ../core/dmi.cc:330 ++msgid "Selectable boot path" ++msgstr "Camí d'arrancada seleccionable" ++ ++#: ../core/dmi.cc:332 ++msgid "BIOS ROM is socketed" ++msgstr "La ROM de BIOS té sòcol" ++ ++#: ../core/dmi.cc:334 ++msgid "Booting from PCMCIA" ++msgstr "S'arranca des de PCMCIA" ++ ++#: ../core/dmi.cc:336 ++msgid "Enhanced Disk Drive extensions" ++msgstr "Extensions de controlador de disc millorades" ++ ++#: ../core/dmi.cc:338 ++msgid "NEC 9800 floppy" ++msgstr "Disquet de NEC 9800" ++ ++#: ../core/dmi.cc:340 ++msgid "Toshiba floppy" ++msgstr "Disquet de Toshiba" ++ ++#: ../core/dmi.cc:342 ++msgid "5.25\" 360KB floppy" ++msgstr "Disquet de 5,25\" 360KB" ++ ++#: ../core/dmi.cc:344 ++msgid "5.25\" 1.2MB floppy" ++msgstr "Disquet de 5,25\" 1,2MB" ++ ++#: ../core/dmi.cc:346 ++msgid "3.5\" 720KB floppy" ++msgstr "Disquet de 3,5\" 720KB" ++ ++#: ../core/dmi.cc:348 ++msgid "3.5\" 2.88MB floppy" ++msgstr "Disquet de 3,5\" 2,88MB" ++ ++#: ../core/dmi.cc:350 ++msgid "Print Screen key" ++msgstr "Tecla de Imprimir Pantalla" ++ ++#: ../core/dmi.cc:352 ++msgid "i8042 keyboard controller" ++msgstr "Controlador de teclat i8042" ++ ++#: ../core/dmi.cc:354 ++msgid "INT14 serial line control" ++msgstr "Control de línia serial INT14" ++ ++#: ../core/dmi.cc:356 ++msgid "INT17 printer control" ++msgstr "Control d'impressora INT17" ++ ++#: ../core/dmi.cc:358 ++msgid "INT10 CGA/Mono video" ++msgstr "Vídeo CGA/Mono INT10" ++ ++#: ../core/dmi.cc:360 ++msgid "NEC PC-98" ++msgstr "NEC PC-98" ++ ++#: ../core/dmi.cc:372 ++msgid "ACPI" ++msgstr "ACPI" ++ ++#: ../core/dmi.cc:374 ++msgid "USB legacy emulation" ++msgstr "Emulació de l'USB antic" ++ ++#: ../core/dmi.cc:376 ++msgid "AGP" ++msgstr "AGP" ++ ++#: ../core/dmi.cc:378 ++msgid "I2O booting" ++msgstr "Arrencada I2O" ++ ++#: ../core/dmi.cc:380 ++msgid "Booting from LS-120" ++msgstr "S'arrenca des de LS-120" ++ ++#: ../core/dmi.cc:382 ++msgid "Booting from ATAPI ZIP" ++msgstr "S'arrenca des d'ATAPI ZIP" ++ ++#: ../core/dmi.cc:384 ++msgid "Booting from IEEE1394 (Firewire)" ++msgstr "S'arrenca des d'IEEE1394 (Firewire)" ++ ++#: ../core/dmi.cc:386 ++msgid "Smart battery" ++msgstr "Pila intel·ligenta" ++ ++#: ../core/dmi.cc:392 ++msgid "BIOS boot specification" ++msgstr "Especificació d'arrencada BIOS" ++ ++#: ../core/dmi.cc:395 ++msgid "Function-key initiated network service boot" ++msgstr "Una tecla de funció ha iniciat una arrencada de servei de xarxa" ++ ++#: ../core/dmi.cc:397 ++msgid "UEFI specification is supported" ++msgstr "És compatible amb l'especificació UEFI" ++ ++#: ../core/dmi.cc:399 ++msgid "This machine is a virtual machine" ++msgstr "Aquesta màquina és una màquina virtual" ++ ++#: ../core/dmi.cc:429 ++msgid "Non-burst" ++msgstr "Sense ràfega" ++ ++#: ../core/dmi.cc:431 ++msgid "Burst" ++msgstr "Ràfega" ++ ++#: ../core/dmi.cc:433 ++msgid "Pipeline burst" ++msgstr "Ràfega de canonada" ++ ++#: ../core/dmi.cc:435 ../core/dmi.cc:608 ++msgid "Synchronous" ++msgstr "Síncron" ++ ++#: ../core/dmi.cc:437 ++msgid "Asynchronous" ++msgstr "Asíncron" ++ ++#: ../core/dmi.cc:453 ++msgid "Internal" ++msgstr "Intern" ++ ++#: ../core/dmi.cc:456 ++msgid "External" ++msgstr "Extern" ++ ++#: ../core/dmi.cc:465 ++msgid "Write-through" ++msgstr "Escriptura immediata" ++ ++#: ../core/dmi.cc:468 ++msgid "Write-back" ++msgstr "Escriptura postergada" ++ ++#: ../core/dmi.cc:471 ++msgid "Varies With Memory Address" ++msgstr "Varia amb l'adreça de memòria" ++ ++#: ../core/dmi.cc:475 ++msgid "cache" ++msgstr "cau" ++ ++#: ../core/dmi.cc:480 ++msgid "Instruction cache" ++msgstr "Cau d'instruccions" ++ ++#: ../core/dmi.cc:483 ++msgid "Data cache" ++msgstr "Cau de dades" ++ ++#: ../core/dmi.cc:486 ++msgid "Unified cache" ++msgstr "Cau unificada" ++ ++#: ../core/dmi.cc:501 ++msgid "System board or motherboard" ++msgstr "Placa de sistema o placa mare" ++ ++#: ../core/dmi.cc:502 ++msgid "ISA add-on card" ++msgstr "Targeta d'expansió ISA" ++ ++#: ../core/dmi.cc:503 ++msgid "EISA add-on card" ++msgstr "Targeta d'expansió EISA" ++ ++#: ../core/dmi.cc:504 ++msgid "PCI add-on card" ++msgstr "Targeta d'expansió PCI" ++ ++#: ../core/dmi.cc:505 ++msgid "MCA add-on card" ++msgstr "Targeta d'expansió MCA" ++ ++#: ../core/dmi.cc:506 ++msgid "PCMCIA add-on card" ++msgstr "Targeta d'expansió PCMCIA" ++ ++#: ../core/dmi.cc:507 ++msgid "Proprietary add-on card" ++msgstr "Targeta d'expansió propietària" ++ ++#: ../core/dmi.cc:508 ++msgid "NuBus" ++msgstr "NuBus" ++ ++#: ../core/dmi.cc:512 ++msgid "PC-98/C20 add-on card" ++msgstr "Targeta d'expansió PC-98/C20" ++ ++#: ../core/dmi.cc:513 ++msgid "PC-98/C24 add-on card" ++msgstr "Targeta d'expansió PC-98/C24" ++ ++#: ../core/dmi.cc:514 ++msgid "PC-98/E add-on card" ++msgstr "Targeta d'expansió PC-98/E" ++ ++#: ../core/dmi.cc:515 ++msgid "PC-98/Local bus add-on card" ++msgstr "Targeta d'expansió PC-98/Bus local" ++ ++#: ../core/dmi.cc:516 ++msgid "PC-98/Card slot add-on card" ++msgstr "Targeta d'expansió PC-98/Ranura de targeta" ++ ++#: ../core/dmi.cc:533 ++msgid " SIMM" ++msgstr " SIMM" ++ ++#: ../core/dmi.cc:534 ++msgid " SIP" ++msgstr " SIP" ++ ++#: ../core/dmi.cc:535 ++msgid " Chip" ++msgstr " Xip" ++ ++#: ../core/dmi.cc:536 ++msgid " DIP" ++msgstr " DIP" ++ ++#: ../core/dmi.cc:537 ++msgid " ZIP" ++msgstr " ZIP" ++ ++#: ../core/dmi.cc:538 ++msgid " Proprietary Card" ++msgstr " Targeta propietària" ++ ++#: ../core/dmi.cc:539 ++msgid " DIMM" ++msgstr " DIMM" ++ ++#: ../core/dmi.cc:540 ++msgid " TSOP" ++msgstr " TSOP" ++ ++#: ../core/dmi.cc:541 ++msgid " Row of chips" ++msgstr " Fila de xips" ++ ++#: ../core/dmi.cc:542 ++msgid " RIMM" ++msgstr " RIMM" ++ ++#: ../core/dmi.cc:543 ++msgid " SODIMM" ++msgstr " SODIMM" ++ ++#: ../core/dmi.cc:544 ++msgid " SRIMM" ++msgstr " SRIMM" ++ ++#: ../core/dmi.cc:545 ++msgid " FB-DIMM" ++msgstr " FB-DIMM" ++ ++#: ../core/dmi.cc:560 ++msgid " DRAM" ++msgstr " DRAM" ++ ++#: ../core/dmi.cc:561 ++msgid " EDRAM" ++msgstr " EDRAM" ++ ++#: ../core/dmi.cc:562 ++msgid " VRAM" ++msgstr " VRAM" ++ ++#: ../core/dmi.cc:563 ++msgid " SRAM" ++msgstr " SRAM" ++ ++#: ../core/dmi.cc:564 ++msgid " RAM" ++msgstr " RAM" ++ ++#: ../core/dmi.cc:565 ++msgid " ROM" ++msgstr " ROM" ++ ++#: ../core/dmi.cc:566 ++msgid " FLASH" ++msgstr " FLASH" ++ ++#: ../core/dmi.cc:567 ++msgid " EEPROM" ++msgstr " EEPROM" ++ ++#: ../core/dmi.cc:568 ++msgid " FEPROM" ++msgstr " FEPROM" ++ ++#: ../core/dmi.cc:569 ++msgid " EPROM" ++msgstr " EPROM" ++ ++#: ../core/dmi.cc:570 ++msgid " CDRAM" ++msgstr " CDRAM" ++ ++#: ../core/dmi.cc:571 ++msgid " 3DRAM" ++msgstr " 3DRAM" ++ ++#: ../core/dmi.cc:572 ++msgid " SDRAM" ++msgstr " SDRAM" ++ ++#: ../core/dmi.cc:573 ++msgid " SGRAM" ++msgstr " SGRAM" ++ ++#: ../core/dmi.cc:574 ++msgid " RDRAM" ++msgstr " RDRAM" ++ ++#: ../core/dmi.cc:575 ++msgid " DDR" ++msgstr " DDR" ++ ++#: ../core/dmi.cc:576 ++msgid " DDR2" ++msgstr " DDR2" ++ ++#: ../core/dmi.cc:577 ++msgid " DDR2 FB-DIMM" ++msgstr " DDR2 FB-DIMM" ++ ++#: ../core/dmi.cc:600 ++msgid "Fast-paged" ++msgstr "Paginació ràpida" ++ ++#: ../core/dmi.cc:602 ++msgid "Static column" ++msgstr "Columna estàtica" ++ ++#: ../core/dmi.cc:604 ++msgid "Pseudo-static" ++msgstr "Pseudo-estàtica" ++ ++#: ../core/dmi.cc:606 ++msgid "RAMBUS" ++msgstr "RAMBUS" ++ ++#: ../core/dmi.cc:610 ++msgid "CMOS" ++msgstr "CMOS" ++ ++#: ../core/dmi.cc:612 ++msgid "EDO" ++msgstr "EDO" ++ ++#: ../core/dmi.cc:614 ++msgid "Window DRAM" ++msgstr "DRAM de finestra" ++ ++#: ../core/dmi.cc:616 ++msgid "Cache DRAM" ++msgstr "DRAM cau" ++ ++#: ../core/dmi.cc:618 ++msgid "Non-volatile" ++msgstr "No volàtil" ++ ++#: ../core/dmi.cc:620 ++msgid "Registered (Buffered)" ++msgstr "Registrada (amb memòria intermèdia)" ++ ++#: ../core/dmi.cc:622 ++msgid "Unbuffered (Unregistered)" ++msgstr "Sense memòria intermèdia (no registrada)" ++ ++#: ../core/dmi.cc:624 ++msgid "LRDIMM" ++msgstr "LRDIMM" ++ ++#: ../core/dmi.cc:637 ++msgid "Desktop Computer" ++msgstr "Ordinador de taula" ++ ++#: ../core/dmi.cc:638 ++msgid "Low Profile Desktop Computer" ++msgstr "Ordinador de taula de perfil baix" ++ ++#: ../core/dmi.cc:639 ++msgid "Pizza Box Computer" ++msgstr "Ordinador de caixa de pizza" ++ ++#: ../core/dmi.cc:640 ++msgid "Mini Tower Computer" ++msgstr "Ordinador de torre petita" ++ ++#: ../core/dmi.cc:641 ++msgid "Tower Computer" ++msgstr "Ordinador de torre" ++ ++#: ../core/dmi.cc:642 ++msgid "Portable Computer" ++msgstr "Ordinador portable" ++ ++#: ../core/dmi.cc:643 ++msgid "Laptop" ++msgstr "Portàtil" ++ ++#: ../core/dmi.cc:644 ++msgid "Notebook" ++msgstr "Portàtil petit" ++ ++#: ../core/dmi.cc:645 ++msgid "Hand Held Computer" ++msgstr "Ordinador de mà" ++ ++#: ../core/dmi.cc:646 ++msgid "Docking Station" ++msgstr "Estació d'acoblament" ++ ++#: ../core/dmi.cc:647 ++msgid "All In One" ++msgstr "Tot en un" ++ ++#: ../core/dmi.cc:648 ++msgid "Sub Notebook" ++msgstr "Subportàtil" ++ ++#: ../core/dmi.cc:649 ++msgid "Space-saving Computer" ++msgstr "Ordinador compacte" ++ ++#: ../core/dmi.cc:650 ++msgid "Lunch Box Computer" ++msgstr "Ordinador de carmanyola" ++ ++#: ../core/dmi.cc:651 ++msgid "System" ++msgstr "Sistema" ++ ++#: ../core/dmi.cc:652 ++msgid "Expansion Chassis" ++msgstr "Xassís d'expansió" ++ ++#: ../core/dmi.cc:653 ++msgid "Sub Chassis" ++msgstr "Subxassís" ++ ++#: ../core/dmi.cc:654 ++msgid "Bus Expansion Chassis" ++msgstr "Xassís d'expansió de bus" ++ ++#: ../core/dmi.cc:655 ++msgid "Peripheral Chassis" ++msgstr "Xassís perifèric" ++ ++#: ../core/dmi.cc:656 ++msgid "RAID Chassis" ++msgstr "Xassís RAID" ++ ++#: ../core/dmi.cc:657 ++msgid "Rack Mount Chassis" ++msgstr "Xassís de muntatge de bastidor" ++ ++#: ../core/dmi.cc:658 ++msgid "Sealed-case PC" ++msgstr "PC de carcassa segellada" ++ ++#: ../core/dmi.cc:659 ++msgid "Multi-system" ++msgstr "Polisistema" ++ ++#: ../core/dmi.cc:660 ++msgid "Compact PCI" ++msgstr "PCI compacte" ++ ++#: ../core/dmi.cc:661 ++msgid "Advanced TCA" ++msgstr "TCA avançat" ++ ++#: ../core/dmi.cc:662 ++msgid "Blade" ++msgstr "Blade" ++ ++#: ../core/dmi.cc:663 ++msgid "Blade enclosure" ++msgstr "Recinte de blade" ++ ++#: ../core/dmi.cc:664 ++msgid "Tablet" ++msgstr "Tauleta" ++ ++#: ../core/dmi.cc:665 ++msgid "Convertible" ++msgstr "Convertible" ++ ++#: ../core/dmi.cc:666 ++msgid "Detachable" ++msgstr "Separable" ++ ++#: ../core/dmi.cc:667 ++msgid "IoT Gateway" ++msgstr "Passarel·la IoT" ++ ++#: ../core/dmi.cc:668 ++msgid "Embedded PC" ++msgstr "PC incrustat" ++ ++#: ../core/dmi.cc:669 ++msgid "Mini PC" ++msgstr "Mini PC" ++ ++#: ../core/dmi.cc:670 ++msgid "Stick PC" ++msgstr "PC de llapis" ++ ++#: ../core/dmi.cc:1045 ++msgid "BIOS" ++msgstr "BIOS" ++ ++#: ../core/dmi.cc:1147 ++msgid "CPU" ++msgstr "CPU" ++ ++#: ../core/dmi.cc:1198 ../core/dmi.cc:1312 ../core/dmi.cc:1613 ++msgid "[empty]" ++msgstr "[buit]" ++ ++#: ../core/dmi.cc:1226 ++msgid "64-bit capable" ++msgstr "Capaç de 64 bits" ++ ++#: ../core/dmi.cc:1259 ++msgid " Memory Controller" ++msgstr " Controlador de memòria" ++ ++#: ../core/dmi.cc:1277 ../core/dmi.cc:1536 ++msgid "empty memory bank" ++msgstr "banc de memòria buit" ++ ++#: ../core/dmi.cc:1447 ++msgid "System Memory" ++msgstr "Memòria de sistema" ++ ++#: ../core/dmi.cc:1453 ++msgid "Video Memory" ++msgstr "Memòria de vídeo" ++ ++#: ../core/dmi.cc:1457 ++msgid "Flash Memory" ++msgstr "Memòria de flash" ++ ++#: ../core/dmi.cc:1461 ++msgid "NVRAM" ++msgstr "NVRAM" ++ ++#: ../core/dmi.cc:1465 ++msgid "Cache Memory" ++msgstr "Memòria cau" ++ ++#: ../core/dmi.cc:1469 ++msgid "Generic Memory" ++msgstr "Memòria genèrica" ++ ++#: ../core/dmi.cc:1490 ++msgid "Parity error correction" ++msgstr "Correcció d'errors de paritat" ++ ++#: ../core/dmi.cc:1494 ++msgid "Single-bit error-correcting code (ECC)" ++msgstr "Codi de correcció d'errors d'un sol bit (ECC)" ++ ++#: ../core/dmi.cc:1498 ++msgid "Multi-bit error-correcting code (ECC)" ++msgstr "Codi de correcció d'errors de múltiples bits (ECC)" ++ ++#: ../core/dmi.cc:1502 ++msgid "CRC error correction" ++msgstr "Correcció d'errors CRC" ++ ++#: ../core/dmi.cc:1783 ++msgid "make outbound connections" ++msgstr "fa connexions sortints" ++ ++#: ../core/dmi.cc:1784 ++msgid "receive inbound connections" ++msgstr "rep connexions entrants" ++ ++#: ../core/hw.cc:1713 ++msgid "" ++msgstr "" ++ ++#: ../core/hw.cc:2249 ++msgid "(none)" ++msgstr "(cap)" ++ ++#: ../core/hw.cc:2252 ++msgid "dma" ++msgstr "dma" ++ ++#: ../core/hw.cc:2256 ++msgid "irq" ++msgstr "irq" ++ ++#: ../core/hw.cc:2260 ++msgid "iomemory" ++msgstr "iomemory" ++ ++#: ../core/hw.cc:2264 ++msgid "memory" ++msgstr "memòria" ++ ++#: ../core/hw.cc:2266 ++msgid "(prefetchable)" ++msgstr "(precarregable)" ++ ++#: ../core/hw.cc:2269 ++msgid "ioport" ++msgstr "ioport" ++ ++#: ../core/hw.cc:2273 ++#, c-format ++msgid "%lx(size=%ld)" ++msgstr "%lx(mida=%ld)" ++ ++#: ../core/hw.cc:2276 ++msgid "(unknown)" ++msgstr "(desconegut)" ++ ++#: ../core/hw.cc:2446 ++msgid "false" ++msgstr "fals" ++ ++#: ../core/hw.cc:2446 ++msgid "true" ++msgstr "cert" ++ ++#: ../core/hw.cc:2448 ++msgid "(nil)" ++msgstr "(nul)" ++ ++#: ../core/lvm.cc:132 ++msgid "Linux LVM Physical Volume" ++msgstr "Volum físic LVM de Linux" ++ ++#: ../core/mem.cc:154 ++msgid "System memory" ++msgstr "Memòria de sistema" ++ ++#: ../core/network.cc:274 ++msgid "Ethernet" ++msgstr "Ethernet" ++ ++#: ../core/network.cc:276 ++msgid "SLIP" ++msgstr "SLIP" ++ ++#: ../core/network.cc:278 ++msgid "loopback" ++msgstr "loopback" ++ ++#: ../core/network.cc:280 ++msgid "FDDI" ++msgstr "FDDI" ++ ++#: ../core/network.cc:282 ++msgid "IEEE1394" ++msgstr "IEEE1394" ++ ++#: ../core/network.cc:284 ++msgid "IRDA" ++msgstr "IRDA" ++ ++#: ../core/network.cc:286 ++msgid "PPP" ++msgstr "PPP" ++ ++#: ../core/network.cc:288 ++msgid "X25" ++msgstr "X25" ++ ++#: ../core/network.cc:290 ++msgid "IPtunnel" ++msgstr "TúnelIP" ++ ++#: ../core/network.cc:292 ++msgid "Framerelay.DLCI" ++msgstr "Framerelay.DLCI" ++ ++#: ../core/network.cc:294 ++msgid "Framerelay.AD" ++msgstr "Framerelay.AD" ++ ++#: ../core/network.cc:296 ++msgid "IP6tunnel" ++msgstr "TúnelIP6" ++ ++#: ../core/network.cc:298 ++msgid "IP6inIP4" ++msgstr "IP6enIP4" ++ ++#: ../core/network.cc:364 ++msgid "twisted pair" ++msgstr "parell trenat" ++ ++#: ../core/network.cc:366 ++msgid "AUI" ++msgstr "AUI" ++ ++#: ../core/network.cc:368 ++msgid "BNC" ++msgstr "BNC" ++ ++#: ../core/network.cc:370 ++msgid "Media Independent Interface" ++msgstr "Interfície independent de mitjans" ++ ++#: ../core/network.cc:372 ++msgid "optical fibre" ++msgstr "fibra òptica" ++ ++#: ../core/network.cc:375 ++msgid "10Mbit/s" ++msgstr "10Mbit/s" ++ ++#: ../core/network.cc:380 ++msgid "10Mbit/s (full duplex)" ++msgstr "10Mbit/s (dúplex complet)" ++ ++#: ../core/network.cc:385 ++msgid "100Mbit/s" ++msgstr "100Mbit/s" ++ ++#: ../core/network.cc:390 ++msgid "100Mbit/s (full duplex)" ++msgstr "100Mbit/s (dúplex complet)" ++ ++#: ../core/network.cc:400 ../core/network.cc:405 ++msgid "1Gbit/s (full duplex)" ++msgstr "1Gbit/s (dúplex complet)" ++ ++#: ../core/network.cc:410 ../core/network.cc:415 ++msgid "2.5Gbit/s (full duplex)" ++msgstr "2,5Gbit/s (dúplex complet)" ++ ++#: ../core/network.cc:420 ++msgid "5Gbit/s (full duplex)" ++msgstr "5Gbit/s (dúplex complet)" ++ ++#: ../core/network.cc:425 ../core/network.cc:432 ++msgid "10Gbit/s (full duplex)" ++msgstr "10Gbit/s (dúplex complet)" ++ ++#: ../core/network.cc:438 ++msgid "25Gbit/s (full duplex)" ++msgstr "25Gbit/s (dúplex complet)" ++ ++#: ../core/network.cc:444 ++msgid "40Gbit/s (full duplex)" ++msgstr "40Gbit/s (dúplex complet)" ++ ++#: ../core/network.cc:448 ++msgid "Auto-negotiation" ++msgstr "Negociació automàtica" ++ ++#: ../core/network.cc:636 ../core/network.cc:644 ../core/network.cc:684 ++msgid "Logical interface" ++msgstr "Interfície lògica" ++ ++#: ../core/network.cc:638 ++msgid "Physical interface" ++msgstr "Interfície física" ++ ++#: ../core/network.cc:652 ++msgid "Wireless-LAN" ++msgstr "LAN sense fil" ++ ++#: ../core/network.cc:654 ../core/usb.cc:263 ++msgid "Wireless interface" ++msgstr "Interfície sense fil" ++ ++#: ../core/pci.cc:736 ++msgid "PCI Express" ++msgstr "PCI Exprés" ++ ++#: ../core/print.cc:143 ../gui/print-gui.cc:114 ++msgid " DISABLED" ++msgstr " DESHABILITAT" ++ ++#: ../core/print.cc:145 ../gui/print-gui.cc:116 ++msgid " UNCLAIMED" ++msgstr " NO RECLAMAT" ++ ++#: ../core/print.cc:178 ++msgid "description" ++msgstr "descripció" ++ ++#: ../core/print.cc:195 ../gui/print-gui.cc:137 ++msgid "product" ++msgstr "producte" ++ ++#: ../core/print.cc:212 ../gui/print-gui.cc:138 ++msgid "vendor" ++msgstr "fabricant" ++ ++#: ../core/print.cc:229 ++msgid "physical id" ++msgstr "id físic" ++ ++#: ../core/print.cc:246 ../gui/print-gui.cc:139 ++msgid "bus info" ++msgstr "informació de bus" ++ ++#: ../core/print.cc:267 ../gui/print-gui.cc:145 ++msgid "logical name" ++msgstr "nom lògic" ++ ++#: ../core/print.cc:285 ../gui/print-gui.cc:148 ++msgid "version" ++msgstr "versió" ++ ++#: ../core/print.cc:302 ++msgid "date" ++msgstr "data" ++ ++#: ../core/print.cc:319 ../gui/print-gui.cc:149 ++msgid "serial" ++msgstr "serial" ++ ++#: ../core/print.cc:336 ../gui/print-gui.cc:150 ++msgid "slot" ++msgstr "ranura" ++ ++#: ../core/print.cc:353 ../gui/print-gui.cc:153 ++msgid "size" ++msgstr "mida" ++ ++#: ../core/print.cc:407 ../gui/print-gui.cc:155 ++msgid "capacity" ++msgstr "capacitat" ++ ++#: ../core/print.cc:463 ++msgid "address" ++msgstr "adreça" ++ ++#: ../core/print.cc:466 ++msgid "range" ++msgstr "interval" ++ ++#: ../core/print.cc:477 ../gui/print-gui.cc:158 ++msgid "width" ++msgstr "amplada" ++ ++#: ../core/print.cc:491 ../gui/print-gui.cc:161 ++msgid "clock" ++msgstr "rellotge" ++ ++#: ../core/print.cc:508 ../gui/print-gui.cc:168 ++msgid "capabilities" ++msgstr "capabilitats" ++ ++#: ../core/print.cc:529 ++msgid "configuration:" ++msgstr "configuració:" ++ ++#: ../core/print.cc:531 ++msgid "configuration of " ++msgstr "configuració de " ++ ++#: ../core/print.cc:551 ++msgid "resources:" ++msgstr "recursos:" ++ ++#: ../core/print.cc:553 ++msgid "resources of " ++msgstr "recursos de " ++ ++#: ../core/print.cc:706 ++msgid "H/W path" ++msgstr "Camí H/W" ++ ++#: ../core/print.cc:707 ../core/print.cc:724 ++msgid "Device" ++msgstr "Dispositiu" ++ ++#: ../core/print.cc:708 ../core/print.cc:725 ++msgid "Class" ++msgstr "Classe" ++ ++#: ../core/print.cc:709 ../core/print.cc:726 ++msgid "Description" ++msgstr "Descripció" ++ ++#: ../core/print.cc:723 ++msgid "Bus info" ++msgstr "Informació de bus" ++ ++#: ../core/usb.cc:167 ++msgid "Audio device" ++msgstr "Dispositiu d'àudio" ++ ++#: ../core/usb.cc:171 ++msgid "Control device" ++msgstr "Dispositiu de control" ++ ++#: ../core/usb.cc:174 ++msgid "MIDI" ++msgstr "MIDI" ++ ++#: ../core/usb.cc:176 ++msgid "Audio streaming" ++msgstr "Transmissió d'àudio" ++ ++#: ../core/usb.cc:182 ++msgid "Communication device" ++msgstr "Dispositiu de comunicació" ++ ++#: ../core/usb.cc:185 ++msgid "Modem" ++msgstr "Mòdem" ++ ++#: ../core/usb.cc:186 ++msgid "AT (Hayes) compatible" ++msgstr "Compatible amb AT (Hayes)" ++ ++#: ../core/usb.cc:188 ++msgid "Ethernet networking" ++msgstr "Xarxes d'Ethernet" ++ ++#: ../core/usb.cc:189 ++msgid "OBEX networking" ++msgstr "Xarxes OBEX" ++ ++#: ../core/usb.cc:193 ++msgid "Human interface device" ++msgstr "Dispositiu d'interfície humana" ++ ++#: ../core/usb.cc:199 ++msgid "Keyboard" ++msgstr "Teclat" ++ ++#: ../core/usb.cc:202 ++msgid "Mouse" ++msgstr "Ratolí" ++ ++#: ../core/usb.cc:209 ++msgid "Printer" ++msgstr "Impressora" ++ ++#: ../core/usb.cc:216 ++msgid "Unidirectional" ++msgstr "Unidireccional" ++ ++#: ../core/usb.cc:219 ++msgid "Bidirectional" ++msgstr "Bidireccional" ++ ++#: ../core/usb.cc:222 ++msgid "IEEE 1284.4 compatible bidirectional" ++msgstr "Bidireccional compatible amb IEEE 1284.4" ++ ++#: ../core/usb.cc:229 ++msgid "Mass storage device" ++msgstr "Dispositiu d'emmagatzematge massiu" ++ ++#: ../core/usb.cc:233 ++msgid "RBC (typically Flash) mass storage" ++msgstr "Emmagatzematge massiu RBC (típicament Flash)" ++ ++#: ../core/usb.cc:236 ++msgid "SFF-8020i, MMC-2 (ATAPI)" ++msgstr "SFF-8020i, MMC-2 (ATAPI)" ++ ++#: ../core/usb.cc:239 ++msgid "Floppy (UFI)" ++msgstr "Disquet (UFI)" ++ ++#: ../core/usb.cc:242 ++msgid "SCSI" ++msgstr "SCSI" ++ ++#: ../core/usb.cc:248 ++msgid "USB hub" ++msgstr "Concentrador USB" ++ ++#: ../core/usb.cc:255 ++msgid "Smart card reader" ++msgstr "Lector de targetes intel·ligentes" ++ ++#: ../core/usb.cc:259 ++msgid "Video" ++msgstr "Vídeo" ++ ++#: ../core/usb.cc:266 ++msgid "Bluetooth wireless interface" ++msgstr "Interfície sense fil de Bluetooth" ++ ++#: ../core/usb.cc:267 ++msgid "Bluetooth wireless radio" ++msgstr "Ràdio sense fil de Bluetooth" ++ ++#: ../core/usb.cc:272 ++msgid "Generic USB device" ++msgstr "Dispositiu USB genèric" ++ ++#: ../core/volumes.cc:49 ++msgid "Blank volume" ++msgstr "Volum en blanc" ++ ++#: ../core/volumes.cc:50 ++msgid "Windows FAT volume" ++msgstr "Volum de Windows FAT" ++ ++#: ../core/volumes.cc:51 ++msgid "Windows NTFS volume" ++msgstr "Volum de Windows NTFS" ++ ++#: ../core/volumes.cc:52 ++msgid "OS/2 HPFS volume" ++msgstr "Volum d'OS/2 HPFS" ++ ++#: ../core/volumes.cc:53 ++msgid "EXT2/EXT3 volume" ++msgstr "Volum EXT2/EXT3" ++ ++#: ../core/volumes.cc:54 ++msgid "Linux ReiserFS volume" ++msgstr "Volum de Linux ReiserFS" ++ ++#: ../core/volumes.cc:55 ++msgid "Linux ROMFS volume" ++msgstr "Volum de Linux ROMFS" ++ ++#: ../core/volumes.cc:56 ++msgid "Linux SquashFS volume" ++msgstr "Volum de Linux SquashFS" ++ ++#: ../core/volumes.cc:57 ++msgid "Linux CramFS volume" ++msgstr "Volum de Linux CramFS" ++ ++#: ../core/volumes.cc:58 ++msgid "MinixFS volume" ++msgstr "Volum de MinixFS" ++ ++#: ../core/volumes.cc:59 ++msgid "System V FS volume" ++msgstr "Volum de System V FS" ++ ++#: ../core/volumes.cc:60 ++msgid "Linux JFS volume" ++msgstr "Volum de Linux JFS" ++ ++#: ../core/volumes.cc:61 ++msgid "Linux XFS volume" ++msgstr "Volum de Linux XFS" ++ ++#: ../core/volumes.cc:62 ++msgid "ISO-9660 volume" ++msgstr "Volum ISO-9660" ++ ++#: ../core/volumes.cc:63 ++msgid "X-Box DVD volume" ++msgstr "Volum d'X-Box DVD" ++ ++#: ../core/volumes.cc:64 ++msgid "UDF volume" ++msgstr "Volum UDF" ++ ++#: ../core/volumes.cc:65 ++msgid "UFS volume" ++msgstr "Volum UFS" ++ ++#: ../core/volumes.cc:66 ++msgid "HP-UX HFS volume" ++msgstr "Volum d'HP-UX HFS" ++ ++#: ../core/volumes.cc:67 ++msgid "VxFS volume" ++msgstr "Volum VxFS" ++ ++#: ../core/volumes.cc:68 ++msgid "FFS volume" ++msgstr "Volum FFS" ++ ++#: ../core/volumes.cc:69 ++msgid "BeOS BFS volume" ++msgstr "Volum de BeOS BFS" ++ ++#: ../core/volumes.cc:70 ++msgid "QNX FS volume" ++msgstr "Volum QNX FS" ++ ++#: ../core/volumes.cc:71 ++msgid "MacOS MFS volume" ++msgstr "Volum de MacOS MFS" ++ ++#: ../core/volumes.cc:72 ++msgid "MacOS HFS+ volume" ++msgstr "Volum de MacOS HFS+" ++ ++#: ../core/volumes.cc:73 ++msgid "MacOS HFS volume" ++msgstr "Volum de MacOS HFS" ++ ++#: ../core/volumes.cc:74 ++msgid "MacOS APFS volume" ++msgstr "Volum de MacOS APFS" ++ ++#: ../core/volumes.cc:75 ++msgid "Linux Unified Key Setup volume" ++msgstr "Volum de Linux Unified Key Setup" ++ ++#: ../core/volumes.cc:76 ++msgid "Linux swap volume" ++msgstr "Volum de Linux d'intercanvi" ++ ++#: ../core/volumes.cc:316 ++msgid "Extended Attributes" ++msgstr "Atributs extensos" ++ ++#: ../core/volumes.cc:318 ++msgid "4GB+ files" ++msgstr "fitxers 4GB+" ++ ++#: ../core/volumes.cc:320 ++msgid "16TB+ files" ++msgstr "fitxers 16TB+" ++ ++#: ../core/volumes.cc:322 ++msgid "directories with 65000+ subdirs" ++msgstr "directoris amb 65000+ subdirectoris" ++ ++#: ../core/volumes.cc:324 ++msgid "needs recovery" ++msgstr "necessita recuperació" ++ ++#: ../core/volumes.cc:326 ++msgid "64bit filesystem" ++msgstr "sistema de fitxers de 64 bits" ++ ++#: ../core/volumes.cc:328 ++msgid "extent-based allocation" ++msgstr "assignació basada en abast" ++ ++#: ../core/volumes.cc:336 ++msgid "EXT4 volume" ++msgstr "Volum EXT4" ++ ++#: ../core/volumes.cc:342 ++msgid "EXT3 volume" ++msgstr "Volum EXT3" ++ ++#: ../core/volumes.cc:371 ++msgid "Encrypted volume" ++msgstr "Volum xifrat" ++ ++#: ../core/volumes.cc:644 ++msgid "Contains a bootable Mac OS installation" ++msgstr "Conté una instal·lació de Mac OS arrencable" ++ ++#: ../core/volumes.cc:646 ++msgid "Contains a bootable Mac OS X installation" ++msgstr "Conté una instal·lació de Mac OS X arrencable" ++ ++#: ../core/volumes.cc:1156 ++msgid "initialized volume" ++msgstr "volum initialitzat" ++ ++#: ../gui/print-gui.cc:191 ++msgid "configuration" ++msgstr "configuració" ++ ++#: ../gui/print-gui.cc:207 ++msgid "resources" ++msgstr "recursos" ++ ++#: ../gui/print-gui.cc:219 ++msgid "this device hasn't been claimed\n" ++msgstr "no s'ha reclamat aquest dispositiu\n" ++ ++#: ../gui/print-gui.cc:222 ++msgid "this device has been disabled\n" ++msgstr "s'ha deshabilitat aquest dispositiu\n" ++ ++#: ../lshw.cc:24 ++#, c-format ++msgid "usage: %s [-format] [-options ...]\n" ++msgstr "ús: %s [-format] [-opcions ...]\n" ++ ++#: ../lshw.cc:25 ++#, c-format ++msgid " %s -version\n" ++msgstr " %s -version\n" ++ ++#: ../lshw.cc:27 ++#, c-format ++msgid "\t-version print program version (%s)\n" ++msgstr "\t-version imprimeix la versió del programa (%s)\n" ++ ++#: ../lshw.cc:28 ++#, c-format ++msgid "" ++"\n" ++"format can be\n" ++msgstr "" ++"\n" ++"el format pot ser\n" ++ ++#: ../lshw.cc:29 ++#, c-format ++msgid "\t-html output hardware tree as HTML\n" ++msgstr "\t-html emet l'arbre de maquinari com a HTML\n" ++ ++#: ../lshw.cc:30 ++#, c-format ++msgid "\t-xml output hardware tree as XML\n" ++msgstr "\t-xml emet l'arbre demaquinari com a XML\n" ++ ++#: ../lshw.cc:31 ++#, c-format ++msgid "\t-json output hardware tree as a JSON object\n" ++msgstr "\t-json emet l'arbre de maquinari com a objecte JSON\n" ++ ++#: ../lshw.cc:32 ++#, c-format ++msgid "\t-short output hardware paths\n" ++msgstr "\t-short emet els camins del maquinari\n" ++ ++#: ../lshw.cc:33 ++#, c-format ++msgid "\t-businfo output bus information\n" ++msgstr "\t-businfo emet informació de bus\n" ++ ++#: ../lshw.cc:35 ++#, c-format ++msgid "\t-X use graphical interface\n" ++msgstr "\t-X usa la interfície gràfica\n" ++ ++#: ../lshw.cc:36 ++#, c-format ++msgid "" ++"\n" ++"options can be\n" ++msgstr "" ++"\n" ++"les opcions poden ser\n" ++ ++#: ../lshw.cc:38 ++#, c-format ++msgid "" ++"\t-dump filename display output and dump collected information into a file " ++"(SQLite database)\n" ++msgstr "" ++"\t-dump fitxer mostra la sortida i bolca la informació recollida en un " ++"fitxer (base de dades SQL)\n" ++ ++#: ../lshw.cc:40 ++#, c-format ++msgid "\t-class CLASS only show a certain class of hardware\n" ++msgstr "\t-class CLASSE mostra només una classe determinada de maquinari\n" ++ ++#: ../lshw.cc:41 ++#, c-format ++msgid "\t-C CLASS same as '-class CLASS'\n" ++msgstr "\t-C CLASSE ho mateix que '-class CLASSE'\n" ++ ++#: ../lshw.cc:42 ++#, c-format ++msgid "\t-c CLASS same as '-class CLASS'\n" ++msgstr "\t-c CLASSE ho mateix que '-class CLASSE'\n" ++ ++#: ../lshw.cc:44 ++#, c-format ++msgid "\t-disable TEST disable a test (like pci, isapnp, cpuid, etc.)\n" ++msgstr "" ++"\t-disable TEST deshabilita una prova (com a pci, isapnp, cpuid, etc.)\n" ++ ++#: ../lshw.cc:46 ++#, c-format ++msgid "\t-enable TEST enable a test (like pci, isapnp, cpuid, etc.)\n" ++msgstr "" ++"\t-enable TEST habilita una prova (com a pci, isapnp, cpuid, etc.)\n" ++ ++#: ../lshw.cc:47 ++#, c-format ++msgid "\t-quiet don't display status\n" ++msgstr "\t-quiet no mostris l'estat\n" ++ ++#: ../lshw.cc:48 ++#, c-format ++msgid "" ++"\t-sanitize sanitize output (remove sensitive information like serial " ++"numbers, etc.)\n" ++msgstr "" ++"\t-sanitize saneja la sortida (elimina informació sensitiva com als " ++"nombres serials etc.)\n" ++ ++#: ../lshw.cc:49 ++#, c-format ++msgid "\t-numeric output numeric IDs (for PCI, USB, etc.)\n" ++msgstr "" ++"\t-numeric emet identificadors numèrics (per a PCI, USB, etc.)\n" ++ ++#: ../lshw.cc:50 ++#, c-format ++msgid "" ++"\t-notime exclude volatile attributes (timestamps) from output\n" ++msgstr "" ++"\t-notime exclou els atributs volàtils (marques de temps) de la " ++"sortida\n" ++ ++#: ../lshw.cc:126 ++#, c-format ++msgid "the latest version is %s\n" ++msgstr "la versió més darrera és %s\n" ++ ++#: ../lshw.cc:228 ++#, c-format ++msgid "WARNING: you should run this program as super-user.\n" ++msgstr "ADVERTÈNCIA: es deu executar aquest programa com al superusuari.\n" ++ ++#: ../lshw.cc:259 ++#, c-format ++msgid "" ++"WARNING: output may be incomplete or inaccurate, you should run this program " ++"as super-user.\n" ++msgstr "" ++"AVERTÈNCIA: la sortida pot ser incompleta o inexacta, es deu executar aquest " ++"programa com al superusuari.\n" +-- +2.33.1 + diff --git a/SOURCES/0065-merge-Github-PR-77.patch b/SOURCES/0065-merge-Github-PR-77.patch new file mode 100644 index 0000000..4a93a5d --- /dev/null +++ b/SOURCES/0065-merge-Github-PR-77.patch @@ -0,0 +1,172 @@ +From 9a7ded387a87accd6437b3e36748d4451e8135f4 Mon Sep 17 00:00:00 2001 +From: Erik Ekman +Date: Tue, 2 Nov 2021 14:56:25 +0100 +Subject: [PATCH 65/65] merge Github PR#77 + +--- + src/core/network.cc | 128 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 128 insertions(+) + +diff --git a/src/core/network.cc b/src/core/network.cc +index 01a1f51..746ac1b 100644 +--- a/src/core/network.cc ++++ b/src/core/network.cc +@@ -93,6 +93,41 @@ struct ethtool_link_settings + supported, advertised, peer advertised. */ + }; + ++/* Recognized module eeprom standards. */ ++#define ETH_MODULE_SFF_8079 0x1 ++#define ETH_MODULE_SFF_8472 0x2 ++#define ETH_MODULE_SFF_8636 0x3 ++#define ETH_MODULE_SFF_8436 0x4 ++ ++struct ethtool_modinfo { ++ u32 cmd; ++ u32 type; /* SFF standard used in module */ ++ u32 eeprom_len; /* Length of module eeprom */ ++ u32 reserved[8]; ++}; ++ ++/* Known id types. */ ++#define SFF_8024_ID_SOLDERED 0x2 ++#define SFF_8024_ID_SFP 0x3 ++#define SFF_8024_EXT_ID_DEFINED_BY_2WIRE_ID 0x4 ++ ++/* Common connector types. */ ++#define SFF_8024_CONNECTOR_SC 0x1 ++#define SFF_8024_CONNECTOR_LC 0x7 ++#define SFF_8024_CONNECTOR_OPTICAL_PIGTAIL 0xb ++#define SFF_8024_CONNECTOR_COPPER_PIGTAIL 0x21 ++#define SFF_8024_CONNECTOR_RJ45 0x22 ++#define SFF_8024_CONNECTOR_NON_SEPARABLE 0x23 ++ ++#define MAX_EEPROM_SIZE 256 ++struct ethtool_eeprom { ++ u32 cmd; ++ u32 magic; /* Only used for eeprom writes */ ++ u32 offset; /* Read or write offset */ ++ u32 len; /* Length of read/write */ ++ u8 data[MAX_EEPROM_SIZE]; /* Buffer */ ++}; ++ + #ifndef IFNAMSIZ + #define IFNAMSIZ 32 + #endif +@@ -131,6 +166,8 @@ struct ethtool_value + #define ETHTOOL_GSET 0x00000001 /* Get settings. */ + #define ETHTOOL_GDRVINFO 0x00000003 /* Get driver info. */ + #define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */ ++#define ETHTOOL_GMODULEINFO 0x00000042 /* Get plug-in module information */ ++#define ETHTOOL_GMODULEEEPROM 0x00000043 /* Get plug-in module eeprom */ + #define ETHTOOL_GLINKSETTINGS 0x0000004c /* Get link mode settings. */ + + /* Indicates what features are supported by the interface. */ +@@ -358,6 +395,96 @@ static bool isVirtual(const string & MAC) + } + + ++// Get data for connected transceiver module. ++static void scan_module(hwNode & interface, int fd) ++{ ++ struct ifreq ifr; ++ struct ethtool_modinfo emodinfo; ++ struct ethtool_eeprom eeeprom; ++ ++ emodinfo.cmd = ETHTOOL_GMODULEINFO; ++ memset(&ifr, 0, sizeof(ifr)); ++ strcpy(ifr.ifr_name, interface.getLogicalName().c_str()); ++ ifr.ifr_data = (caddr_t) &emodinfo; ++ // Skip interface if module info not supported. ++ if (ioctl(fd, SIOCETHTOOL, &ifr) != 0) ++ return; ++ ++ eeeprom.cmd = ETHTOOL_GMODULEEEPROM; ++ eeeprom.offset = 0; ++ eeeprom.len = emodinfo.eeprom_len; ++ if (eeeprom.len > MAX_EEPROM_SIZE) ++ eeeprom.len = MAX_EEPROM_SIZE; ++ memset(&ifr, 0, sizeof(ifr)); ++ strcpy(ifr.ifr_name, interface.getLogicalName().c_str()); ++ ifr.ifr_data = (caddr_t) &eeeprom; ++ if (ioctl(fd, SIOCETHTOOL, &ifr) != 0) ++ return; ++ ++ switch (emodinfo.type) ++ { ++ /* SFF 8472 eeprom layout starts with same data as SFF 8079. */ ++ case ETH_MODULE_SFF_8079: ++ case ETH_MODULE_SFF_8472: ++ if ((eeeprom.data[0] == SFF_8024_ID_SOLDERED || eeeprom.data[0] == SFF_8024_ID_SFP) && ++ eeeprom.data[1] == SFF_8024_EXT_ID_DEFINED_BY_2WIRE_ID) ++ { ++ char buffer[32]; ++ /* Get part number (padded with space). String is stripped inside setConfig. */ ++ interface.setConfig("module", string((const char*)&eeeprom.data[40], 16)); ++ int wavelength = eeeprom.data[60] << 8 | eeeprom.data[61]; ++ /* Skip wavelength for SFP+ cables, they use byte 60 for other data. */ ++ if ((eeeprom.data[8] & 0x0C) == 0 && wavelength > 0) ++ { ++ snprintf(buffer, sizeof(buffer), "%dnm", wavelength); ++ interface.setConfig("wavelength", buffer); ++ } ++ int max_length = 0; ++ int length; ++ length = eeeprom.data[14] * 1000; /* SMF, km */ ++ if (length > max_length) max_length = length; ++ length = eeeprom.data[15] * 100; /* SMF, meter */ ++ if (length > max_length) max_length = length; ++ length = eeeprom.data[16] * 10; /* 50um (OM2), meter */ ++ if (length > max_length) max_length = length; ++ length = eeeprom.data[17] * 10; /* 62.5um (OM1), meter */ ++ if (length > max_length) max_length = length; ++ length = eeeprom.data[18]; /* Copper, meter */ ++ if (length > max_length) max_length = length; ++ length = eeeprom.data[19] * 10; /* OM3, meter */ ++ if (length > max_length) max_length = length; ++ if (max_length > 0) ++ { ++ snprintf(buffer, sizeof(buffer), "%dm", max_length); ++ interface.setConfig("maxlength", buffer); ++ } ++ switch (eeeprom.data[2]) ++ { ++ case SFF_8024_CONNECTOR_SC: ++ interface.setConfig("connector", "SC"); ++ break; ++ case SFF_8024_CONNECTOR_LC: ++ interface.setConfig("connector", "LC"); ++ break; ++ case SFF_8024_CONNECTOR_OPTICAL_PIGTAIL: ++ interface.setConfig("connector", "optical pigtail"); ++ break; ++ case SFF_8024_CONNECTOR_COPPER_PIGTAIL: ++ interface.setConfig("connector", "copper pigtail"); ++ break; ++ case SFF_8024_CONNECTOR_RJ45: ++ interface.setConfig("connector", "RJ45"); ++ break; ++ case SFF_8024_CONNECTOR_NON_SEPARABLE: ++ interface.setConfig("connector", "non separable"); ++ break; ++ } ++ } ++ break; ++ } ++} ++ ++ + static void updateCapabilities(hwNode & interface, u32 supported, u32 supported2, u32 speed, u8 duplex, u8 port, u8 autoneg) + { + if(supported & SUPPORTED_TP) +@@ -666,6 +793,7 @@ bool scan_network(hwNode & n) + } + + scan_modes(interface, fd); ++ scan_module(interface, fd); + + drvinfo.cmd = ETHTOOL_GDRVINFO; + memset(&ifr, 0, sizeof(ifr)); +-- +2.33.1 + diff --git a/SOURCES/0066-Fix-mistakes-in-Catalan-translation.patch b/SOURCES/0066-Fix-mistakes-in-Catalan-translation.patch new file mode 100644 index 0000000..eb9e8c9 --- /dev/null +++ b/SOURCES/0066-Fix-mistakes-in-Catalan-translation.patch @@ -0,0 +1,95 @@ +From d67d67a7d9d3288a1ddadc8fafeb6143cbafcbac Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Tue, 9 Nov 2021 09:21:24 -0700 +Subject: [PATCH 1/2] Fix mistakes in Catalan translation + +--- + src/po/ca.po | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/src/po/ca.po b/src/po/ca.po +index 09710a9..f1c8cb4 100644 +--- a/src/po/ca.po ++++ b/src/po/ca.po +@@ -8,7 +8,7 @@ msgstr "" + "Project-Id-Version: @(#) $Id$\n" + "Report-Msgid-Bugs-To: \n" + "POT-Creation-Date: 2021-10-22 00:36-0600\n" +-"PO-Revision-Date: 2021-10-22 01:05-0600\n" ++"PO-Revision-Date: 2021-11-09 09:21-0700\n" + "Last-Translator: Alex Henrie \n" + "Language-Team: Catalan \n" + "Language: ca\n" +@@ -1312,11 +1312,11 @@ msgstr "Atributs extensos" + + #: ../core/volumes.cc:318 + msgid "4GB+ files" +-msgstr "fitxers 4GB+" ++msgstr "fitxers de 4GB+" + + #: ../core/volumes.cc:320 + msgid "16TB+ files" +-msgstr "fitxers 16TB+" ++msgstr "fitxers de 16TB+" + + #: ../core/volumes.cc:322 + msgid "directories with 65000+ subdirs" +@@ -1406,7 +1406,7 @@ msgstr "\t-html emet l'arbre de maquinari com a HTML\n" + #: ../lshw.cc:30 + #, c-format + msgid "\t-xml output hardware tree as XML\n" +-msgstr "\t-xml emet l'arbre demaquinari com a XML\n" ++msgstr "\t-xml emet l'arbre de maquinari com a XML\n" + + #: ../lshw.cc:31 + #, c-format +@@ -1443,7 +1443,7 @@ msgid "" + "\t-dump filename display output and dump collected information into a file " + "(SQLite database)\n" + msgstr "" +-"\t-dump fitxer mostra la sortida i bolca la informació recollida en un " ++"\t-dump fitxer mostra la sortida i bolca la informació recollida en un " + "fitxer (base de dades SQL)\n" + + #: ../lshw.cc:40 +@@ -1454,24 +1454,24 @@ msgstr "\t-class CLASSE mostra només una classe determinada de maquinari\n" + #: ../lshw.cc:41 + #, c-format + msgid "\t-C CLASS same as '-class CLASS'\n" +-msgstr "\t-C CLASSE ho mateix que '-class CLASSE'\n" ++msgstr "\t-C CLASSE ho mateix que '-class CLASSE'\n" + + #: ../lshw.cc:42 + #, c-format + msgid "\t-c CLASS same as '-class CLASS'\n" +-msgstr "\t-c CLASSE ho mateix que '-class CLASSE'\n" ++msgstr "\t-c CLASSE ho mateix que '-class CLASSE'\n" + + #: ../lshw.cc:44 + #, c-format + msgid "\t-disable TEST disable a test (like pci, isapnp, cpuid, etc.)\n" + msgstr "" +-"\t-disable TEST deshabilita una prova (com a pci, isapnp, cpuid, etc.)\n" ++"\t-disable PROVA deshabilita una prova (com a pci, isapnp, cpuid, etc.)\n" + + #: ../lshw.cc:46 + #, c-format + msgid "\t-enable TEST enable a test (like pci, isapnp, cpuid, etc.)\n" + msgstr "" +-"\t-enable TEST habilita una prova (com a pci, isapnp, cpuid, etc.)\n" ++"\t-enable PROVA habilita una prova (com a pci, isapnp, cpuid, etc.)\n" + + #: ../lshw.cc:47 + #, c-format +@@ -1484,7 +1484,7 @@ msgid "" + "\t-sanitize sanitize output (remove sensitive information like serial " + "numbers, etc.)\n" + msgstr "" +-"\t-sanitize saneja la sortida (elimina informació sensitiva com als " ++"\t-sanitize expurga la sortida (elimina informació sensitiva com als " + "nombres serials etc.)\n" + + #: ../lshw.cc:49 +-- +2.33.1 + diff --git a/SOURCES/0067-Add-Spanish-translation.patch b/SOURCES/0067-Add-Spanish-translation.patch new file mode 100644 index 0000000..4ef2685 --- /dev/null +++ b/SOURCES/0067-Add-Spanish-translation.patch @@ -0,0 +1,1541 @@ +From 002d203372e9b468796b343d2fdfa3615ee3ed86 Mon Sep 17 00:00:00 2001 +From: Alex Henrie +Date: Tue, 9 Nov 2021 09:22:16 -0700 +Subject: [PATCH 2/2] Add Spanish translation + +--- + src/po/Makefile | 2 +- + src/po/es.po | 1521 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1522 insertions(+), 1 deletion(-) + create mode 100644 src/po/es.po + +diff --git a/src/po/es.po b/src/po/es.po +new file mode 100644 +index 0000000..6530073 +--- /dev/null ++++ b/src/po/es.po +@@ -0,0 +1,1521 @@ ++# Spanish translations for lshw ++# Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the lshw package. ++# Alex Henrie , 2021 ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: @(#) $Id$\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2021-10-22 00:36-0600\n" ++"PO-Revision-Date: 2021-11-09 09:22-0700\n" ++"Last-Translator: Alex Henrie \n" ++"Language-Team: Spanish \n" ++"Language: es\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: Poedit 3.0\n" ++ ++#: ../core/abi.cc:50 ++msgid "32-bit processes" ++msgstr "Procesos de 32 bits" ++ ++#: ../core/abi.cc:51 ++msgid "64-bit processes" ++msgstr "Procesos de 64 bits" ++ ++#: ../core/cpuid.cc:285 ++msgid "CPU virtualization (Vanderpool)" ++msgstr "Virtualización CPU (Vanderpool)" ++ ++#: ../core/cpuid.cc:298 ../core/cpuid.cc:299 ++msgid "Logical CPU" ++msgstr "CPU lógico" ++ ++#: ../core/cpuid.cc:302 ++msgid "HyperThreading" ++msgstr "HyperThreading" ++ ++#: ../core/cpuid.cc:366 ../core/cpuid.cc:373 ../core/cpuid.cc:467 ++msgid "L1 cache" ++msgstr "Caché L1" ++ ++#: ../core/cpuid.cc:384 ../core/cpuid.cc:391 ../core/cpuid.cc:479 ++msgid "L2 cache" ++msgstr "Caché L2" ++ ++#: ../core/dmi.cc:155 ++msgid "Other Battery" ++msgstr "Otra pila" ++ ++#: ../core/dmi.cc:156 ++msgid "Unknown Battery" ++msgstr "Pila desconocida" ++ ++#: ../core/dmi.cc:157 ++msgid "Lead Acid Battery" ++msgstr "Pila de plomo y ácido" ++ ++#: ../core/dmi.cc:158 ++msgid "Nickel Cadmium Battery" ++msgstr "Pila de níquel-cadmio" ++ ++#: ../core/dmi.cc:159 ++msgid "Nickel Metal Hydride Battery" ++msgstr "Pila de níquel-metalhidruro" ++ ++#: ../core/dmi.cc:160 ++msgid "Lithium Ion Battery" ++msgstr "Pila de ion de litio" ++ ++#: ../core/dmi.cc:161 ++msgid "Zinc Air Battery" ++msgstr "Pila de cinc-aire" ++ ++#: ../core/dmi.cc:162 ++msgid "Lithium Polymer Battery" ++msgstr "Pila de polímero de litio" ++ ++#: ../core/dmi.cc:167 ++msgid "Battery" ++msgstr "Pila" ++ ++#: ../core/dmi.cc:279 ++msgid "Server Blade" ++msgstr "Servidor blade" ++ ++#: ../core/dmi.cc:280 ++msgid "Connectivity Switch" ++msgstr "Conmutador de conectividad" ++ ++#: ../core/dmi.cc:281 ++msgid "System Management Module" ++msgstr "Módulo de gestión de sistema" ++ ++#: ../core/dmi.cc:282 ++msgid "Processor Module" ++msgstr "Módulo de procesador" ++ ++#: ../core/dmi.cc:283 ++msgid "I/O Module" ++msgstr "Modulo E/S" ++ ++#: ../core/dmi.cc:284 ++msgid "Memory Module" ++msgstr "Módulo de memoria" ++ ++#: ../core/dmi.cc:285 ++msgid "Daughter Board" ++msgstr "Placa hija" ++ ++#: ../core/dmi.cc:286 ../core/dmi.cc:1094 ++msgid "Motherboard" ++msgstr "Placa madre" ++ ++#: ../core/dmi.cc:287 ++msgid "Processor/Memory Module" ++msgstr "Módulo de procesador/memoria" ++ ++#: ../core/dmi.cc:288 ++msgid "Processor/IO Module " ++msgstr "Módulo de procesador/ES " ++ ++#: ../core/dmi.cc:289 ++msgid "Interconnect Board" ++msgstr "Placa de interconexión" ++ ++#: ../core/dmi.cc:306 ++msgid "ISA bus" ++msgstr "Bus ISA" ++ ++#: ../core/dmi.cc:308 ++msgid "MCA bus" ++msgstr "Bus MCA" ++ ++#: ../core/dmi.cc:310 ++msgid "EISA bus" ++msgstr "Bus EISA" ++ ++#: ../core/dmi.cc:312 ++msgid "PCI bus" ++msgstr "Bus PCI" ++ ++#: ../core/dmi.cc:314 ++msgid "PCMCIA/PCCard" ++msgstr "PCMCIA/PCCard" ++ ++#: ../core/dmi.cc:316 ++msgid "Plug-and-Play" ++msgstr "Plug-and-Play" ++ ++#: ../core/dmi.cc:318 ++msgid "Advanced Power Management" ++msgstr "Gestión de poder avanzada" ++ ++#: ../core/dmi.cc:320 ++msgid "BIOS EEPROM can be upgraded" ++msgstr "Se puede actualizar la EEPROM del BIOS" ++ ++#: ../core/dmi.cc:322 ++msgid "BIOS shadowing" ++msgstr "Sombreado de BIOS" ++ ++#: ../core/dmi.cc:324 ++msgid "VESA video extensions" ++msgstr "Extensiones de vídeo VESA" ++ ++#: ../core/dmi.cc:326 ++msgid "ESCD" ++msgstr "ESCD" ++ ++#: ../core/dmi.cc:328 ++msgid "Booting from CD-ROM/DVD" ++msgstr "Se arranca desde CD-ROM/DVD" ++ ++#: ../core/dmi.cc:330 ++msgid "Selectable boot path" ++msgstr "Camino de arrancada seleccionable" ++ ++#: ../core/dmi.cc:332 ++msgid "BIOS ROM is socketed" ++msgstr "La ROM de BIOS tiene enchufe" ++ ++#: ../core/dmi.cc:334 ++msgid "Booting from PCMCIA" ++msgstr "Se arranca desde PCMCIA" ++ ++#: ../core/dmi.cc:336 ++msgid "Enhanced Disk Drive extensions" ++msgstr "Extensiones de controlador de disco mejoradas" ++ ++#: ../core/dmi.cc:338 ++msgid "NEC 9800 floppy" ++msgstr "Disquete de NEC 9800" ++ ++#: ../core/dmi.cc:340 ++msgid "Toshiba floppy" ++msgstr "Disquete de Toshiba" ++ ++#: ../core/dmi.cc:342 ++msgid "5.25\" 360KB floppy" ++msgstr "Disquete 5,25\" 360KB" ++ ++#: ../core/dmi.cc:344 ++msgid "5.25\" 1.2MB floppy" ++msgstr "Disquete 5,25\" 1,2MB" ++ ++#: ../core/dmi.cc:346 ++msgid "3.5\" 720KB floppy" ++msgstr "Disquete 3,5\" 720KB" ++ ++#: ../core/dmi.cc:348 ++msgid "3.5\" 2.88MB floppy" ++msgstr "Disquete 3,5\" 2,88MB" ++ ++#: ../core/dmi.cc:350 ++msgid "Print Screen key" ++msgstr "Tecla de Imprimir Pantalla" ++ ++#: ../core/dmi.cc:352 ++msgid "i8042 keyboard controller" ++msgstr "Controlador de teclado i8042" ++ ++#: ../core/dmi.cc:354 ++msgid "INT14 serial line control" ++msgstr "Control de línea serial INT14" ++ ++#: ../core/dmi.cc:356 ++msgid "INT17 printer control" ++msgstr "Control de impresora INT17" ++ ++#: ../core/dmi.cc:358 ++msgid "INT10 CGA/Mono video" ++msgstr "Vídeo CGA/Mono INT10" ++ ++#: ../core/dmi.cc:360 ++msgid "NEC PC-98" ++msgstr "NEC PC-98" ++ ++#: ../core/dmi.cc:372 ++msgid "ACPI" ++msgstr "ACPI" ++ ++#: ../core/dmi.cc:374 ++msgid "USB legacy emulation" ++msgstr "Emulación del USB antiguo" ++ ++#: ../core/dmi.cc:376 ++msgid "AGP" ++msgstr "AGP" ++ ++#: ../core/dmi.cc:378 ++msgid "I2O booting" ++msgstr "Arrancada I2O" ++ ++#: ../core/dmi.cc:380 ++msgid "Booting from LS-120" ++msgstr "Se arranca desde LS-120" ++ ++#: ../core/dmi.cc:382 ++msgid "Booting from ATAPI ZIP" ++msgstr "Se arranca desde ATAPI ZIP" ++ ++#: ../core/dmi.cc:384 ++msgid "Booting from IEEE1394 (Firewire)" ++msgstr "Se arranca desde IEEE1394 (Firewire)" ++ ++#: ../core/dmi.cc:386 ++msgid "Smart battery" ++msgstr "Pila inteligente" ++ ++#: ../core/dmi.cc:392 ++msgid "BIOS boot specification" ++msgstr "Especificación de arrancada BIOS" ++ ++#: ../core/dmi.cc:395 ++msgid "Function-key initiated network service boot" ++msgstr "Una tecla de función ha iniciado una arrancada de servicio de red" ++ ++#: ../core/dmi.cc:397 ++msgid "UEFI specification is supported" ++msgstr "Es compatible con la especificación UEFI" ++ ++#: ../core/dmi.cc:399 ++msgid "This machine is a virtual machine" ++msgstr "Esta máquina es una máquina virtual" ++ ++#: ../core/dmi.cc:429 ++msgid "Non-burst" ++msgstr "Sin ráfaga" ++ ++#: ../core/dmi.cc:431 ++msgid "Burst" ++msgstr "Ráfaga" ++ ++#: ../core/dmi.cc:433 ++msgid "Pipeline burst" ++msgstr "Ráfaga de cañería" ++ ++#: ../core/dmi.cc:435 ../core/dmi.cc:608 ++msgid "Synchronous" ++msgstr "Sincrónico" ++ ++#: ../core/dmi.cc:437 ++msgid "Asynchronous" ++msgstr "Asincrónico" ++ ++#: ../core/dmi.cc:453 ++msgid "Internal" ++msgstr "Interno" ++ ++#: ../core/dmi.cc:456 ++msgid "External" ++msgstr "Externo" ++ ++#: ../core/dmi.cc:465 ++msgid "Write-through" ++msgstr "Escritura inmediata" ++ ++#: ../core/dmi.cc:468 ++msgid "Write-back" ++msgstr "Escritura postergada" ++ ++#: ../core/dmi.cc:471 ++msgid "Varies With Memory Address" ++msgstr "Varia con la dirección de memoria" ++ ++#: ../core/dmi.cc:475 ++msgid "cache" ++msgstr "caché" ++ ++#: ../core/dmi.cc:480 ++msgid "Instruction cache" ++msgstr "Caché de instrucciones" ++ ++#: ../core/dmi.cc:483 ++msgid "Data cache" ++msgstr "Caché de datos" ++ ++#: ../core/dmi.cc:486 ++msgid "Unified cache" ++msgstr "Caché unificado" ++ ++#: ../core/dmi.cc:501 ++msgid "System board or motherboard" ++msgstr "Placa de sistema o placa madre" ++ ++#: ../core/dmi.cc:502 ++msgid "ISA add-on card" ++msgstr "Tarjeta de expansión ISA" ++ ++#: ../core/dmi.cc:503 ++msgid "EISA add-on card" ++msgstr "Tarjeta de expansión EISA" ++ ++#: ../core/dmi.cc:504 ++msgid "PCI add-on card" ++msgstr "Tarjeta de expansión PCI" ++ ++#: ../core/dmi.cc:505 ++msgid "MCA add-on card" ++msgstr "Tarjeta de expansión MCA" ++ ++#: ../core/dmi.cc:506 ++msgid "PCMCIA add-on card" ++msgstr "Tarjeta de expansión PCMCIA" ++ ++#: ../core/dmi.cc:507 ++msgid "Proprietary add-on card" ++msgstr "Tarjeta de expansión propietaria" ++ ++#: ../core/dmi.cc:508 ++msgid "NuBus" ++msgstr "NuBus" ++ ++#: ../core/dmi.cc:512 ++msgid "PC-98/C20 add-on card" ++msgstr "Tarjeta de expansión PC-98/C20" ++ ++#: ../core/dmi.cc:513 ++msgid "PC-98/C24 add-on card" ++msgstr "Tarjeta de expansión PC-98/C24" ++ ++#: ../core/dmi.cc:514 ++msgid "PC-98/E add-on card" ++msgstr "Tarjeta de expansión PC-98/E" ++ ++#: ../core/dmi.cc:515 ++msgid "PC-98/Local bus add-on card" ++msgstr "Tarjeta de expansión PC-98/Bus local" ++ ++#: ../core/dmi.cc:516 ++msgid "PC-98/Card slot add-on card" ++msgstr "Tarjeta de expansión PC-98/Muesca de tarjeta" ++ ++#: ../core/dmi.cc:533 ++msgid " SIMM" ++msgstr " SIMM" ++ ++#: ../core/dmi.cc:534 ++msgid " SIP" ++msgstr " SIP" ++ ++#: ../core/dmi.cc:535 ++msgid " Chip" ++msgstr " Chip" ++ ++#: ../core/dmi.cc:536 ++msgid " DIP" ++msgstr " DIP" ++ ++#: ../core/dmi.cc:537 ++msgid " ZIP" ++msgstr " ZIP" ++ ++#: ../core/dmi.cc:538 ++msgid " Proprietary Card" ++msgstr "Tarjeta propietaria" ++ ++#: ../core/dmi.cc:539 ++msgid " DIMM" ++msgstr " DIMM" ++ ++#: ../core/dmi.cc:540 ++msgid " TSOP" ++msgstr " TSOP" ++ ++#: ../core/dmi.cc:541 ++msgid " Row of chips" ++msgstr "Fila de chips" ++ ++#: ../core/dmi.cc:542 ++msgid " RIMM" ++msgstr " RIMM" ++ ++#: ../core/dmi.cc:543 ++msgid " SODIMM" ++msgstr " SODIMM" ++ ++#: ../core/dmi.cc:544 ++msgid " SRIMM" ++msgstr " SRIMM" ++ ++#: ../core/dmi.cc:545 ++msgid " FB-DIMM" ++msgstr " FB-DIMM" ++ ++#: ../core/dmi.cc:560 ++msgid " DRAM" ++msgstr " DRAM" ++ ++#: ../core/dmi.cc:561 ++msgid " EDRAM" ++msgstr " EDRAM" ++ ++#: ../core/dmi.cc:562 ++msgid " VRAM" ++msgstr " VRAM" ++ ++#: ../core/dmi.cc:563 ++msgid " SRAM" ++msgstr " SRAM" ++ ++#: ../core/dmi.cc:564 ++msgid " RAM" ++msgstr " RAM" ++ ++#: ../core/dmi.cc:565 ++msgid " ROM" ++msgstr " ROM" ++ ++#: ../core/dmi.cc:566 ++msgid " FLASH" ++msgstr " FLASH" ++ ++#: ../core/dmi.cc:567 ++msgid " EEPROM" ++msgstr " EEPROM" ++ ++#: ../core/dmi.cc:568 ++msgid " FEPROM" ++msgstr " FEPROM" ++ ++#: ../core/dmi.cc:569 ++msgid " EPROM" ++msgstr " EPROM" ++ ++#: ../core/dmi.cc:570 ++msgid " CDRAM" ++msgstr " CDRAM" ++ ++#: ../core/dmi.cc:571 ++msgid " 3DRAM" ++msgstr " 3DRAM" ++ ++#: ../core/dmi.cc:572 ++msgid " SDRAM" ++msgstr " SDRAM" ++ ++#: ../core/dmi.cc:573 ++msgid " SGRAM" ++msgstr " SGRAM" ++ ++#: ../core/dmi.cc:574 ++msgid " RDRAM" ++msgstr " RDRAM" ++ ++#: ../core/dmi.cc:575 ++msgid " DDR" ++msgstr " DDR" ++ ++#: ../core/dmi.cc:576 ++msgid " DDR2" ++msgstr " DDR2" ++ ++#: ../core/dmi.cc:577 ++msgid " DDR2 FB-DIMM" ++msgstr " DDR2 FB-DIMM" ++ ++#: ../core/dmi.cc:600 ++msgid "Fast-paged" ++msgstr "Paginación rápida" ++ ++#: ../core/dmi.cc:602 ++msgid "Static column" ++msgstr "Columna estática" ++ ++#: ../core/dmi.cc:604 ++msgid "Pseudo-static" ++msgstr "Seudo-estàtica" ++ ++#: ../core/dmi.cc:606 ++msgid "RAMBUS" ++msgstr "RAMBUS" ++ ++#: ../core/dmi.cc:610 ++msgid "CMOS" ++msgstr "CMOS" ++ ++#: ../core/dmi.cc:612 ++msgid "EDO" ++msgstr "EDO" ++ ++#: ../core/dmi.cc:614 ++msgid "Window DRAM" ++msgstr "DRAM de ventana" ++ ++#: ../core/dmi.cc:616 ++msgid "Cache DRAM" ++msgstr "DRAM de caché" ++ ++#: ../core/dmi.cc:618 ++msgid "Non-volatile" ++msgstr "No volátil" ++ ++#: ../core/dmi.cc:620 ++msgid "Registered (Buffered)" ++msgstr "Registrada (con memoria intermedia)" ++ ++#: ../core/dmi.cc:622 ++msgid "Unbuffered (Unregistered)" ++msgstr "Sin memoria intermedia (no registrada)" ++ ++#: ../core/dmi.cc:624 ++msgid "LRDIMM" ++msgstr "LRDIMM" ++ ++#: ../core/dmi.cc:637 ++msgid "Desktop Computer" ++msgstr "Ordenador de mesa" ++ ++#: ../core/dmi.cc:638 ++msgid "Low Profile Desktop Computer" ++msgstr "Ordenador de mesa de perfil bajo" ++ ++#: ../core/dmi.cc:639 ++msgid "Pizza Box Computer" ++msgstr "Ordenador de caja de pizza" ++ ++#: ../core/dmi.cc:640 ++msgid "Mini Tower Computer" ++msgstr "Ordenador de torre pequeña" ++ ++#: ../core/dmi.cc:641 ++msgid "Tower Computer" ++msgstr "Ordenador de torre" ++ ++#: ../core/dmi.cc:642 ++msgid "Portable Computer" ++msgstr "Ordenador portable" ++ ++#: ../core/dmi.cc:643 ++msgid "Laptop" ++msgstr "Portátil" ++ ++#: ../core/dmi.cc:644 ++msgid "Notebook" ++msgstr "Portátil pequeño" ++ ++#: ../core/dmi.cc:645 ++msgid "Hand Held Computer" ++msgstr "Ordenador de mano" ++ ++#: ../core/dmi.cc:646 ++msgid "Docking Station" ++msgstr "Estación de acoplamiento" ++ ++#: ../core/dmi.cc:647 ++msgid "All In One" ++msgstr "Todo en uno" ++ ++#: ../core/dmi.cc:648 ++msgid "Sub Notebook" ++msgstr "Subportátil" ++ ++#: ../core/dmi.cc:649 ++msgid "Space-saving Computer" ++msgstr "Ordenador compacto" ++ ++#: ../core/dmi.cc:650 ++msgid "Lunch Box Computer" ++msgstr "Ordenador de fiambrera" ++ ++#: ../core/dmi.cc:651 ++msgid "System" ++msgstr "Sistema" ++ ++#: ../core/dmi.cc:652 ++msgid "Expansion Chassis" ++msgstr "Chasis de expansión" ++ ++#: ../core/dmi.cc:653 ++msgid "Sub Chassis" ++msgstr "Subchasis" ++ ++#: ../core/dmi.cc:654 ++msgid "Bus Expansion Chassis" ++msgstr "Chasis de expansión de bus" ++ ++#: ../core/dmi.cc:655 ++msgid "Peripheral Chassis" ++msgstr "Chasis periférico" ++ ++#: ../core/dmi.cc:656 ++msgid "RAID Chassis" ++msgstr "Chasis RAID" ++ ++#: ../core/dmi.cc:657 ++msgid "Rack Mount Chassis" ++msgstr "Chasis de montaje de bastidor" ++ ++#: ../core/dmi.cc:658 ++msgid "Sealed-case PC" ++msgstr "PC de estuche sellado" ++ ++#: ../core/dmi.cc:659 ++msgid "Multi-system" ++msgstr "Multisistema" ++ ++#: ../core/dmi.cc:660 ++msgid "Compact PCI" ++msgstr "PCI compacto" ++ ++#: ../core/dmi.cc:661 ++msgid "Advanced TCA" ++msgstr "TCA avanzado" ++ ++#: ../core/dmi.cc:662 ++msgid "Blade" ++msgstr "Blade" ++ ++#: ../core/dmi.cc:663 ++msgid "Blade enclosure" ++msgstr "Recinto de blade" ++ ++#: ../core/dmi.cc:664 ++msgid "Tablet" ++msgstr "Tableta" ++ ++#: ../core/dmi.cc:665 ++msgid "Convertible" ++msgstr "Convertible" ++ ++#: ../core/dmi.cc:666 ++msgid "Detachable" ++msgstr "Separable" ++ ++#: ../core/dmi.cc:667 ++msgid "IoT Gateway" ++msgstr "Pasarela IoT" ++ ++#: ../core/dmi.cc:668 ++msgid "Embedded PC" ++msgstr "PC embebido" ++ ++#: ../core/dmi.cc:669 ++msgid "Mini PC" ++msgstr "Mini PC" ++ ++#: ../core/dmi.cc:670 ++msgid "Stick PC" ++msgstr "PC de lápiz" ++ ++#: ../core/dmi.cc:1045 ++msgid "BIOS" ++msgstr "BIOS" ++ ++#: ../core/dmi.cc:1147 ++msgid "CPU" ++msgstr "CPU" ++ ++#: ../core/dmi.cc:1198 ../core/dmi.cc:1312 ../core/dmi.cc:1613 ++msgid "[empty]" ++msgstr "[vacío]" ++ ++#: ../core/dmi.cc:1226 ++msgid "64-bit capable" ++msgstr "Capaz de 64 bits" ++ ++#: ../core/dmi.cc:1259 ++msgid " Memory Controller" ++msgstr "Controlador de memoria" ++ ++#: ../core/dmi.cc:1277 ../core/dmi.cc:1536 ++msgid "empty memory bank" ++msgstr "banco de memoria vacío" ++ ++#: ../core/dmi.cc:1447 ++msgid "System Memory" ++msgstr "Memoria de sistema" ++ ++#: ../core/dmi.cc:1453 ++msgid "Video Memory" ++msgstr "Memoria de vídeo" ++ ++#: ../core/dmi.cc:1457 ++msgid "Flash Memory" ++msgstr "Memoria de flash" ++ ++#: ../core/dmi.cc:1461 ++msgid "NVRAM" ++msgstr "NVRAM" ++ ++#: ../core/dmi.cc:1465 ++msgid "Cache Memory" ++msgstr "Memoria de caché" ++ ++#: ../core/dmi.cc:1469 ++msgid "Generic Memory" ++msgstr "Memoria genérica" ++ ++#: ../core/dmi.cc:1490 ++msgid "Parity error correction" ++msgstr "Corrección de errores de paridad" ++ ++#: ../core/dmi.cc:1494 ++msgid "Single-bit error-correcting code (ECC)" ++msgstr "Código de corrección de errores de un solo bit (ECC)" ++ ++#: ../core/dmi.cc:1498 ++msgid "Multi-bit error-correcting code (ECC)" ++msgstr "Código de corrección de errores de varios bits (ECC)" ++ ++#: ../core/dmi.cc:1502 ++msgid "CRC error correction" ++msgstr "Corrección de errores CRC" ++ ++#: ../core/dmi.cc:1783 ++msgid "make outbound connections" ++msgstr "hace conexiones salientes" ++ ++#: ../core/dmi.cc:1784 ++msgid "receive inbound connections" ++msgstr "hace conexiones entrantes" ++ ++#: ../core/hw.cc:1713 ++msgid "" ++msgstr "" ++ ++#: ../core/hw.cc:2249 ++msgid "(none)" ++msgstr "(cap)" ++ ++#: ../core/hw.cc:2252 ++msgid "dma" ++msgstr "dma" ++ ++#: ../core/hw.cc:2256 ++msgid "irq" ++msgstr "irq" ++ ++#: ../core/hw.cc:2260 ++msgid "iomemory" ++msgstr "iomemory" ++ ++#: ../core/hw.cc:2264 ++msgid "memory" ++msgstr "memoria" ++ ++#: ../core/hw.cc:2266 ++msgid "(prefetchable)" ++msgstr "(precargable)" ++ ++#: ../core/hw.cc:2269 ++msgid "ioport" ++msgstr "ioport" ++ ++#: ../core/hw.cc:2273 ++#, c-format ++msgid "%lx(size=%ld)" ++msgstr "%lx(tamaño=%ld)" ++ ++#: ../core/hw.cc:2276 ++msgid "(unknown)" ++msgstr "(desconocido)" ++ ++#: ../core/hw.cc:2446 ++msgid "false" ++msgstr "falso" ++ ++#: ../core/hw.cc:2446 ++msgid "true" ++msgstr "verdadero" ++ ++#: ../core/hw.cc:2448 ++msgid "(nil)" ++msgstr "(nulo)" ++ ++#: ../core/lvm.cc:132 ++msgid "Linux LVM Physical Volume" ++msgstr "Volumen físico LVM de Línux" ++ ++#: ../core/mem.cc:154 ++msgid "System memory" ++msgstr "Memoria de sistema" ++ ++#: ../core/network.cc:274 ++msgid "Ethernet" ++msgstr "Ethernet" ++ ++#: ../core/network.cc:276 ++msgid "SLIP" ++msgstr "SLIP" ++ ++#: ../core/network.cc:278 ++msgid "loopback" ++msgstr "loopback" ++ ++#: ../core/network.cc:280 ++msgid "FDDI" ++msgstr "FDDI" ++ ++#: ../core/network.cc:282 ++msgid "IEEE1394" ++msgstr "IEEE1394" ++ ++#: ../core/network.cc:284 ++msgid "IRDA" ++msgstr "IRDA" ++ ++#: ../core/network.cc:286 ++msgid "PPP" ++msgstr "PPP" ++ ++#: ../core/network.cc:288 ++msgid "X25" ++msgstr "X25" ++ ++#: ../core/network.cc:290 ++msgid "IPtunnel" ++msgstr "IPtunnel" ++ ++#: ../core/network.cc:292 ++msgid "Framerelay.DLCI" ++msgstr "Framerelay.DLCI" ++ ++#: ../core/network.cc:294 ++msgid "Framerelay.AD" ++msgstr "Framerelay.AD" ++ ++#: ../core/network.cc:296 ++msgid "IP6tunnel" ++msgstr "IP6tunnel" ++ ++#: ../core/network.cc:298 ++msgid "IP6inIP4" ++msgstr "IP6inIP4" ++ ++#: ../core/network.cc:364 ++msgid "twisted pair" ++msgstr "par trenzado" ++ ++#: ../core/network.cc:366 ++msgid "AUI" ++msgstr "AUI" ++ ++#: ../core/network.cc:368 ++msgid "BNC" ++msgstr "BNC" ++ ++#: ../core/network.cc:370 ++msgid "Media Independent Interface" ++msgstr "Interfaz independiente de medios" ++ ++#: ../core/network.cc:372 ++msgid "optical fibre" ++msgstr "fibra óptica" ++ ++#: ../core/network.cc:375 ++msgid "10Mbit/s" ++msgstr "10Mbit/s" ++ ++#: ../core/network.cc:380 ++msgid "10Mbit/s (full duplex)" ++msgstr "10Mbit/s (dúplex completo)" ++ ++#: ../core/network.cc:385 ++msgid "100Mbit/s" ++msgstr "100Mbit/s" ++ ++#: ../core/network.cc:390 ++msgid "100Mbit/s (full duplex)" ++msgstr "100Mbit/s (dúplex completo)" ++ ++#: ../core/network.cc:400 ../core/network.cc:405 ++msgid "1Gbit/s (full duplex)" ++msgstr "1Gbit/s (dúplex completo)" ++ ++#: ../core/network.cc:410 ../core/network.cc:415 ++msgid "2.5Gbit/s (full duplex)" ++msgstr "2,5Gbit/s (dúplex completo)" ++ ++#: ../core/network.cc:420 ++msgid "5Gbit/s (full duplex)" ++msgstr "5Gbit/s (dúplex completo)" ++ ++#: ../core/network.cc:425 ../core/network.cc:432 ++msgid "10Gbit/s (full duplex)" ++msgstr "10Gbit/s (dúplex completo)" ++ ++#: ../core/network.cc:438 ++msgid "25Gbit/s (full duplex)" ++msgstr "25Gbit/s (dúplex completo)" ++ ++#: ../core/network.cc:444 ++msgid "40Gbit/s (full duplex)" ++msgstr "40Gbit/s (dúplex completo)" ++ ++#: ../core/network.cc:448 ++msgid "Auto-negotiation" ++msgstr "Negociación automática" ++ ++#: ../core/network.cc:636 ../core/network.cc:644 ../core/network.cc:684 ++msgid "Logical interface" ++msgstr "Interfaz lógica" ++ ++#: ../core/network.cc:638 ++msgid "Physical interface" ++msgstr "Interfaz física" ++ ++#: ../core/network.cc:652 ++msgid "Wireless-LAN" ++msgstr "LAN inalámbrica" ++ ++#: ../core/network.cc:654 ../core/usb.cc:263 ++msgid "Wireless interface" ++msgstr "Interfaz inalámbrica" ++ ++#: ../core/pci.cc:736 ++msgid "PCI Express" ++msgstr "PCI Expreso" ++ ++#: ../core/print.cc:143 ../gui/print-gui.cc:114 ++msgid " DISABLED" ++msgstr " INHABILITADO" ++ ++#: ../core/print.cc:145 ../gui/print-gui.cc:116 ++msgid " UNCLAIMED" ++msgstr " NO RECLAMADO" ++ ++#: ../core/print.cc:178 ++msgid "description" ++msgstr "descripción" ++ ++#: ../core/print.cc:195 ../gui/print-gui.cc:137 ++msgid "product" ++msgstr "producto" ++ ++#: ../core/print.cc:212 ../gui/print-gui.cc:138 ++msgid "vendor" ++msgstr "vendedor" ++ ++#: ../core/print.cc:229 ++msgid "physical id" ++msgstr "id físico" ++ ++#: ../core/print.cc:246 ../gui/print-gui.cc:139 ++msgid "bus info" ++msgstr "información de bus" ++ ++#: ../core/print.cc:267 ../gui/print-gui.cc:145 ++msgid "logical name" ++msgstr "nombre lógico" ++ ++#: ../core/print.cc:285 ../gui/print-gui.cc:148 ++msgid "version" ++msgstr "versión" ++ ++#: ../core/print.cc:302 ++msgid "date" ++msgstr "fecha" ++ ++#: ../core/print.cc:319 ../gui/print-gui.cc:149 ++msgid "serial" ++msgstr "serial" ++ ++#: ../core/print.cc:336 ../gui/print-gui.cc:150 ++msgid "slot" ++msgstr "muesca" ++ ++#: ../core/print.cc:353 ../gui/print-gui.cc:153 ++msgid "size" ++msgstr "tamaño" ++ ++#: ../core/print.cc:407 ../gui/print-gui.cc:155 ++msgid "capacity" ++msgstr "capacidad" ++ ++#: ../core/print.cc:463 ++msgid "address" ++msgstr "dirección" ++ ++#: ../core/print.cc:466 ++msgid "range" ++msgstr "interval" ++ ++#: ../core/print.cc:477 ../gui/print-gui.cc:158 ++msgid "width" ++msgstr "anchura" ++ ++#: ../core/print.cc:491 ../gui/print-gui.cc:161 ++msgid "clock" ++msgstr "reloj" ++ ++#: ../core/print.cc:508 ../gui/print-gui.cc:168 ++msgid "capabilities" ++msgstr "capabilidades" ++ ++#: ../core/print.cc:529 ++msgid "configuration:" ++msgstr "configuración:" ++ ++#: ../core/print.cc:531 ++msgid "configuration of " ++msgstr "configuración de " ++ ++#: ../core/print.cc:551 ++msgid "resources:" ++msgstr "recursos:" ++ ++#: ../core/print.cc:553 ++msgid "resources of " ++msgstr "recursos de " ++ ++#: ../core/print.cc:706 ++msgid "H/W path" ++msgstr "Camino H/W" ++ ++#: ../core/print.cc:707 ../core/print.cc:724 ++msgid "Device" ++msgstr "Dispositivo" ++ ++#: ../core/print.cc:708 ../core/print.cc:725 ++msgid "Class" ++msgstr "Clase" ++ ++#: ../core/print.cc:709 ../core/print.cc:726 ++msgid "Description" ++msgstr "Descripción" ++ ++#: ../core/print.cc:723 ++msgid "Bus info" ++msgstr "Información de bus" ++ ++#: ../core/usb.cc:167 ++msgid "Audio device" ++msgstr "Dispositivo de audio" ++ ++#: ../core/usb.cc:171 ++msgid "Control device" ++msgstr "Dispositivo de control" ++ ++#: ../core/usb.cc:174 ++msgid "MIDI" ++msgstr "MIDI" ++ ++#: ../core/usb.cc:176 ++msgid "Audio streaming" ++msgstr "Transmisión de audio" ++ ++#: ../core/usb.cc:182 ++msgid "Communication device" ++msgstr "Dispositivo de comunicación" ++ ++#: ../core/usb.cc:185 ++msgid "Modem" ++msgstr "Módem" ++ ++#: ../core/usb.cc:186 ++msgid "AT (Hayes) compatible" ++msgstr "Compatible con AT (Hayes)" ++ ++#: ../core/usb.cc:188 ++msgid "Ethernet networking" ++msgstr "Redes de Ethernet" ++ ++#: ../core/usb.cc:189 ++msgid "OBEX networking" ++msgstr "Redes OBEX" ++ ++#: ../core/usb.cc:193 ++msgid "Human interface device" ++msgstr "Dispositivo de interfaz humana" ++ ++#: ../core/usb.cc:199 ++msgid "Keyboard" ++msgstr "Teclado" ++ ++#: ../core/usb.cc:202 ++msgid "Mouse" ++msgstr "Ratón" ++ ++#: ../core/usb.cc:209 ++msgid "Printer" ++msgstr "Impresora" ++ ++#: ../core/usb.cc:216 ++msgid "Unidirectional" ++msgstr "Unidireccional" ++ ++#: ../core/usb.cc:219 ++msgid "Bidirectional" ++msgstr "Bidireccional" ++ ++#: ../core/usb.cc:222 ++msgid "IEEE 1284.4 compatible bidirectional" ++msgstr "Bidireccional compatible con IEEE 1284.4" ++ ++#: ../core/usb.cc:229 ++msgid "Mass storage device" ++msgstr "Dispositivo de almacenamiento masivo" ++ ++#: ../core/usb.cc:233 ++msgid "RBC (typically Flash) mass storage" ++msgstr "Almacenamiento masivo RBC (típicamente Flash)" ++ ++#: ../core/usb.cc:236 ++msgid "SFF-8020i, MMC-2 (ATAPI)" ++msgstr "SFF-8020i, MMC-2 (ATAPI)" ++ ++#: ../core/usb.cc:239 ++msgid "Floppy (UFI)" ++msgstr "Disquete (UFI)" ++ ++#: ../core/usb.cc:242 ++msgid "SCSI" ++msgstr "SCSI" ++ ++#: ../core/usb.cc:248 ++msgid "USB hub" ++msgstr "Concentrador USB" ++ ++#: ../core/usb.cc:255 ++msgid "Smart card reader" ++msgstr "Lector de tarjetas inteligentes" ++ ++#: ../core/usb.cc:259 ++msgid "Video" ++msgstr "Vídeo" ++ ++#: ../core/usb.cc:266 ++msgid "Bluetooth wireless interface" ++msgstr "Interfaz inalámbrica de Bluetooth" ++ ++#: ../core/usb.cc:267 ++msgid "Bluetooth wireless radio" ++msgstr "Radio inalámbrica de Bluetooth" ++ ++#: ../core/usb.cc:272 ++msgid "Generic USB device" ++msgstr "Dispositivo USB genérico" ++ ++#: ../core/volumes.cc:49 ++msgid "Blank volume" ++msgstr "Volumen en blanco" ++ ++#: ../core/volumes.cc:50 ++msgid "Windows FAT volume" ++msgstr "Volumen de Windows FAT" ++ ++#: ../core/volumes.cc:51 ++msgid "Windows NTFS volume" ++msgstr "Volumen de Windows NTFS" ++ ++#: ../core/volumes.cc:52 ++msgid "OS/2 HPFS volume" ++msgstr "Volumen de OS/2 HPFS" ++ ++#: ../core/volumes.cc:53 ++msgid "EXT2/EXT3 volume" ++msgstr "Volumen de EXT2/EXT3" ++ ++#: ../core/volumes.cc:54 ++msgid "Linux ReiserFS volume" ++msgstr "Volumen de Linux ReiserFS" ++ ++#: ../core/volumes.cc:55 ++msgid "Linux ROMFS volume" ++msgstr "Volumen de Linux ROMFS" ++ ++#: ../core/volumes.cc:56 ++msgid "Linux SquashFS volume" ++msgstr "Volumen de Linux SquashFS" ++ ++#: ../core/volumes.cc:57 ++msgid "Linux CramFS volume" ++msgstr "Volumen de Linux CramFS" ++ ++#: ../core/volumes.cc:58 ++msgid "MinixFS volume" ++msgstr "Volumen de MinixFS" ++ ++#: ../core/volumes.cc:59 ++msgid "System V FS volume" ++msgstr "Volumen de System V FS" ++ ++#: ../core/volumes.cc:60 ++msgid "Linux JFS volume" ++msgstr "Volumen de Linux JFS" ++ ++#: ../core/volumes.cc:61 ++msgid "Linux XFS volume" ++msgstr "Volumen de Linux XFS" ++ ++#: ../core/volumes.cc:62 ++msgid "ISO-9660 volume" ++msgstr "Volumen ISO-9660" ++ ++#: ../core/volumes.cc:63 ++msgid "X-Box DVD volume" ++msgstr "Volumen de X-Box DVD" ++ ++#: ../core/volumes.cc:64 ++msgid "UDF volume" ++msgstr "Volumen UDF" ++ ++#: ../core/volumes.cc:65 ++msgid "UFS volume" ++msgstr "Volumen UFS" ++ ++#: ../core/volumes.cc:66 ++msgid "HP-UX HFS volume" ++msgstr "Volumen de HP-UX HFS" ++ ++#: ../core/volumes.cc:67 ++msgid "VxFS volume" ++msgstr "Volumen VxFS" ++ ++#: ../core/volumes.cc:68 ++msgid "FFS volume" ++msgstr "Volumen FFS" ++ ++#: ../core/volumes.cc:69 ++msgid "BeOS BFS volume" ++msgstr "Volumen de BeOS BFS" ++ ++#: ../core/volumes.cc:70 ++msgid "QNX FS volume" ++msgstr "Volumen QNX FS" ++ ++#: ../core/volumes.cc:71 ++msgid "MacOS MFS volume" ++msgstr "Volumen de MacOS MFS" ++ ++#: ../core/volumes.cc:72 ++msgid "MacOS HFS+ volume" ++msgstr "Volumen de MacOS HFS+" ++ ++#: ../core/volumes.cc:73 ++msgid "MacOS HFS volume" ++msgstr "Volumen de MacOS HFS" ++ ++#: ../core/volumes.cc:74 ++msgid "MacOS APFS volume" ++msgstr "Volumen de MacOS APFS" ++ ++#: ../core/volumes.cc:75 ++msgid "Linux Unified Key Setup volume" ++msgstr "Volumen de Linux Unified Key Setup" ++ ++#: ../core/volumes.cc:76 ++msgid "Linux swap volume" ++msgstr "Volumen de Linux de intercambio" ++ ++#: ../core/volumes.cc:316 ++msgid "Extended Attributes" ++msgstr "Atributos extensos" ++ ++#: ../core/volumes.cc:318 ++msgid "4GB+ files" ++msgstr "archivos de 4GB+" ++ ++#: ../core/volumes.cc:320 ++msgid "16TB+ files" ++msgstr "archivos de 16TB+" ++ ++#: ../core/volumes.cc:322 ++msgid "directories with 65000+ subdirs" ++msgstr "directorios con 65000+ subdirectorios" ++ ++#: ../core/volumes.cc:324 ++msgid "needs recovery" ++msgstr "necesita recuperación" ++ ++#: ../core/volumes.cc:326 ++msgid "64bit filesystem" ++msgstr "sistema de archivos de 64 bits" ++ ++#: ../core/volumes.cc:328 ++msgid "extent-based allocation" ++msgstr "asignación basada en alcance" ++ ++#: ../core/volumes.cc:336 ++msgid "EXT4 volume" ++msgstr "Volumen EXT4" ++ ++#: ../core/volumes.cc:342 ++msgid "EXT3 volume" ++msgstr "Volumen EXT3" ++ ++#: ../core/volumes.cc:371 ++msgid "Encrypted volume" ++msgstr "Volumen cifrado" ++ ++#: ../core/volumes.cc:644 ++msgid "Contains a bootable Mac OS installation" ++msgstr "Contiene una instalación de Mac OS arrancable" ++ ++#: ../core/volumes.cc:646 ++msgid "Contains a bootable Mac OS X installation" ++msgstr "Contiene una instalación de Mac OS X arrancable" ++ ++#: ../core/volumes.cc:1156 ++msgid "initialized volume" ++msgstr "volumen inicializado" ++ ++#: ../gui/print-gui.cc:191 ++msgid "configuration" ++msgstr "configuración" ++ ++#: ../gui/print-gui.cc:207 ++msgid "resources" ++msgstr "recursos" ++ ++#: ../gui/print-gui.cc:219 ++msgid "this device hasn't been claimed\n" ++msgstr "no se ha reclamado este dispositivo\n" ++ ++#: ../gui/print-gui.cc:222 ++msgid "this device has been disabled\n" ++msgstr "se ha inhabilitado este dispositivo\n" ++ ++#: ../lshw.cc:24 ++#, c-format ++msgid "usage: %s [-format] [-options ...]\n" ++msgstr "uso: %s [-formato] [-opciones ...]\n" ++ ++#: ../lshw.cc:25 ++#, c-format ++msgid " %s -version\n" ++msgstr " %s -version\n" ++ ++#: ../lshw.cc:27 ++#, c-format ++msgid "\t-version print program version (%s)\n" ++msgstr "\t-version imprimir la versión del programa (%s)\n" ++ ++#: ../lshw.cc:28 ++#, c-format ++msgid "" ++"\n" ++"format can be\n" ++msgstr "" ++"\n" ++"el formato puede ser\n" ++ ++#: ../lshw.cc:29 ++#, c-format ++msgid "\t-html output hardware tree as HTML\n" ++msgstr "\t-html emitir el árbol de hardware como HTML\n" ++ ++#: ../lshw.cc:30 ++#, c-format ++msgid "\t-xml output hardware tree as XML\n" ++msgstr "\t-xml emitir el árbol de hardware como XML\n" ++ ++#: ../lshw.cc:31 ++#, c-format ++msgid "\t-json output hardware tree as a JSON object\n" ++msgstr "\t-json emitir el árbol de hardware como objecto JSON\n" ++ ++#: ../lshw.cc:32 ++#, c-format ++msgid "\t-short output hardware paths\n" ++msgstr "\t-short emitir los caminos del hardware\n" ++ ++#: ../lshw.cc:33 ++#, c-format ++msgid "\t-businfo output bus information\n" ++msgstr "\t-businfo emitir la información de bus\n" ++ ++#: ../lshw.cc:35 ++#, c-format ++msgid "\t-X use graphical interface\n" ++msgstr "\t-X usar la interfaz gráfica\n" ++ ++#: ../lshw.cc:36 ++#, c-format ++msgid "" ++"\n" ++"options can be\n" ++msgstr "" ++"\n" ++"las opciones pueden ser\n" ++ ++#: ../lshw.cc:38 ++#, c-format ++msgid "" ++"\t-dump filename display output and dump collected information into a file " ++"(SQLite database)\n" ++msgstr "" ++"\t-dump archivo mostrar la salida y verter la información recogida en un " ++"archivo (base de datos SQLite)\n" ++ ++#: ../lshw.cc:40 ++#, c-format ++msgid "\t-class CLASS only show a certain class of hardware\n" ++msgstr "\t-class CLASE solo mostrar una clase determinada de hardware\n" ++ ++#: ../lshw.cc:41 ++#, c-format ++msgid "\t-C CLASS same as '-class CLASS'\n" ++msgstr "\t-C CLASE lo mismo que '-class CLASE'\n" ++ ++#: ../lshw.cc:42 ++#, c-format ++msgid "\t-c CLASS same as '-class CLASS'\n" ++msgstr "\t-c CLASE lo mismo que '-class CLASE'\n" ++ ++#: ../lshw.cc:44 ++#, c-format ++msgid "\t-disable TEST disable a test (like pci, isapnp, cpuid, etc.)\n" ++msgstr "" ++"\t-disable PRUEBA inhabilitar una prueba (como pci, isapnp, cpuid, etc.)\n" ++ ++#: ../lshw.cc:46 ++#, c-format ++msgid "\t-enable TEST enable a test (like pci, isapnp, cpuid, etc.)\n" ++msgstr "" ++"\t-enable PRUEBA habilitar una prueba (como pci, isapnp, cpuid, etc.)\n" ++ ++#: ../lshw.cc:47 ++#, c-format ++msgid "\t-quiet don't display status\n" ++msgstr "\t-quiet no mostrar el estado\n" ++ ++#: ../lshw.cc:48 ++#, c-format ++msgid "" ++"\t-sanitize sanitize output (remove sensitive information like serial " ++"numbers, etc.)\n" ++msgstr "" ++"-sanitize expurgar la salida (quitar información sensitiva como " ++"números de serie, etcétera)\n" ++ ++#: ../lshw.cc:49 ++#, c-format ++msgid "\t-numeric output numeric IDs (for PCI, USB, etc.)\n" ++msgstr "" ++"\t-numeric emitir identificadores numéricos (para PCI, USB, etc.)\n" ++ ++#: ../lshw.cc:50 ++#, c-format ++msgid "" ++"\t-notime exclude volatile attributes (timestamps) from output\n" ++msgstr "" ++"\t-notime excluir atributos volátiles (marcas de tiempo) de la " ++"salida\n" ++ ++#: ../lshw.cc:126 ++#, c-format ++msgid "the latest version is %s\n" ++msgstr "la versión más reciente es %s\n" ++ ++#: ../lshw.cc:228 ++#, c-format ++msgid "WARNING: you should run this program as super-user.\n" ++msgstr "ADVERTENCIA: se debe ejecutar este programa como el superusuario.\n" ++ ++#: ../lshw.cc:259 ++#, c-format ++msgid "" ++"WARNING: output may be incomplete or inaccurate, you should run this program " ++"as super-user.\n" ++msgstr "" ++"ADVERTENCIA: la salida puede ser incompleta o inexacta, se debe ejecutar " ++"este programa como el superusuario.\n" +-- +2.33.1 + diff --git a/SOURCES/lshw-B.02.18-revert-json.patch b/SOURCES/lshw-B.02.18-revert-json.patch deleted file mode 100644 index 9a2a076..0000000 --- a/SOURCES/lshw-B.02.18-revert-json.patch +++ /dev/null @@ -1,66 +0,0 @@ -commit 135a853c60582b14c5b67e5cd988a8062d9896f4 -Author: Lyonel Vincent -Date: Fri Apr 28 16:54:42 2017 +0200 - - Fix JSON output format - - cf. https://github.com/lyonel/lshw/pull/28 - -diff --git a/src/core/hw.cc b/src/core/hw.cc -index 68e5912..9defd26 100644 ---- a/src/core/hw.cc -+++ b/src/core/hw.cc -@@ -1368,9 +1368,14 @@ string hwNode::asJSON(unsigned level) - config = getConfigKeys(); - resources = getResources("\" value=\""); - -+ if (level == 0) -+ { -+ out << "[" << endl; -+ } -+ - if(visible(getClassName())) - { -- out << "{" << endl; -+ out << spaces(2*level) << "{" << endl; - out << spaces(2*level+2) << "\"id\" : \"" << getId() << "\"," << endl; - out << spaces(2*level+2) << "\"class\" : \"" << getClassName() << "\""; - -@@ -1613,20 +1618,13 @@ string hwNode::asJSON(unsigned level) - resources.clear(); - } - -- -- if(countChildren()>0) -+ for (unsigned int i = 0; i < countChildren(); i++) - { -- if(visible(getClassName())) -- out << "," << endl << spaces(2*level+2) << "\"children\" : [" << endl; -- -- for (unsigned int i = 0; i < countChildren(); i++) -+ out << getChild(i)->asJSON(visible(getClassName()) ? level + 2 : 1); -+ if (visible(getChild(i)->getClassName())) - { -- out << spaces(2*level+4) << getChild(i)->asJSON(visible(getClassName()) ? level + 2 : 1); -- if(visible(getChild(i)->getClassName()) && (i < countChildren()-1)) out << "," << endl; -+ out << "," << endl; - } -- -- if(visible(getClassName())) -- out << endl << spaces(2*level+2) << "]"; - } - - if(visible(getClassName())) -@@ -1635,6 +1633,12 @@ string hwNode::asJSON(unsigned level) - out << "}"; - } - -+ if (level == 0) -+ { -+ out.seekp(-2, std::ios_base::end); -+ out << endl << "]" << endl; -+ } -+ - return out.str(); - } - diff --git a/SOURCES/lshw-B.02.19.2-cmake.patch b/SOURCES/lshw-B.02.19.2-cmake.patch index 86d9ffd..987aac6 100644 --- a/SOURCES/lshw-B.02.19.2-cmake.patch +++ b/SOURCES/lshw-B.02.19.2-cmake.patch @@ -734,24 +734,25 @@ new file mode 100644 index 0000000..3489053 --- /dev/null +++ b/src/gui/CMakeLists.txt -@@ -0,0 +1,67 @@ +@@ -0,0 +1,68 @@ +if(NOT GUI OR STATIC) + message("-- gtk-${PROJECT_NAME} disabled") + return() +endif() + +find_package(PkgConfig) -+pkg_check_modules(GTK2 REQUIRED gtk+-2.0 gmodule-2.0) ++pkg_check_modules(GTK3 REQUIRED gtk+-3.0 gmodule-2.0) + +file(GLOB GTK_SOURCES "*.c*") ++list(FILTER GTK_SOURCES EXCLUDE REGEX ".*support.c$") + +include_directories("${PROJECT_BINARY_DIR}") +include_directories("${PROJECT_SOURCE_DIR}/src/core") + -+include_directories("${GTK2_INCLUDE_DIRS}") ++include_directories("${GTK3_INCLUDE_DIRS}") + +add_executable(gtk-lshw ${GTK_SOURCES}) -+target_link_libraries(gtk-lshw ${SQLITE3_LIBRARIES} ${Z_LIBRARIES} ${GTK2_LIBRARIES} core resolv) ++target_link_libraries(gtk-lshw ${SQLITE3_LIBRARIES} ${Z_LIBRARIES} ${GTK3_LIBRARIES} core resolv) +install(TARGETS gtk-lshw DESTINATION sbin) + +if(POLICYKIT) diff --git a/SOURCES/lshw-fix-mmc.patch b/SOURCES/lshw-fix-mmc.patch deleted file mode 100644 index 9d6c193..0000000 --- a/SOURCES/lshw-fix-mmc.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 2524bb3def3009e53a78e600bbea2c4639dc1e99 Mon Sep 17 00:00:00 2001 -From: Martin Liska -Date: Fri, 24 Apr 2020 15:02:44 +0200 -Subject: [PATCH] Fix type used for read to ssize_t. - -Function declaration: -ssize_t read(int fd, void *buf, size_t count); - -With size_t the following expression is always true: -while ((count = read(cpuinfo, buffer, sizeof(buffer))) > 0) - -and bad things happen. ---- - src/core/cpuinfo.cc | 2 +- - src/core/osutils.cc | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/core/cpuinfo.cc b/src/core/cpuinfo.cc -index eceb83a..3dbdd0c 100644 ---- a/src/core/cpuinfo.cc -+++ b/src/core/cpuinfo.cc -@@ -589,7 +589,7 @@ bool scan_cpuinfo(hwNode & n) - if (core) - { - char buffer[1024]; -- size_t count; -+ ssize_t count; - string cpuinfo_str = ""; - string description = "", version = ""; - string plat = platform(); -diff --git a/src/core/osutils.cc b/src/core/osutils.cc -index f023a46..a53ed89 100644 ---- a/src/core/osutils.cc -+++ b/src/core/osutils.cc -@@ -148,7 +148,7 @@ vector < string > &list) - { - char buffer[1024]; - string buffer_str = ""; -- size_t count = 0; -+ ssize_t count = 0; - data_file fd = file_open(file); - - if (file_open_error(fd)) -@@ -174,7 +174,7 @@ const string & def) - if (fd >= 0) - { - char buffer[1024]; -- size_t count = 0; -+ ssize_t count = 0; - - memset(buffer, 0, sizeof(buffer)); - result = ""; - diff --git a/SOURCES/lshw-fix-segfault-in-apfs-volume-code.patch b/SOURCES/lshw-fix-segfault-in-apfs-volume-code.patch deleted file mode 100644 index 40d7119..0000000 --- a/SOURCES/lshw-fix-segfault-in-apfs-volume-code.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 82df4fa7d3705f2f61282ed5b22074d4e0a6efc4 Mon Sep 17 00:00:00 2001 -From: Harry Mallon -Date: Thu, 23 Apr 2020 21:18:47 +0100 -Subject: [PATCH] volumes: fix segfault in apfs volume code - ---- - src/core/volumes.cc | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/core/volumes.cc b/src/core/volumes.cc -index e703523..6fce2ee 100644 ---- a/src/core/volumes.cc -+++ b/src/core/volumes.cc -@@ -784,12 +784,13 @@ struct apfs_super_block { - - static bool detect_apfs(hwNode & n, source & s) - { -- static char buffer[sizeof(apfs_super_block)]; -+ static char buffer[APFS_STANDARD_BLOCK_SIZE]; - source apfsvolume; - apfs_super_block *sb = (apfs_super_block*)buffer; - unsigned long block_size; - - apfsvolume = s; -+ apfsvolume.blocksize = APFS_STANDARD_BLOCK_SIZE; - - if(readlogicalblocks(apfsvolume, buffer, 0, 1)!=1) - return false; - diff --git a/SPECS/lshw.spec b/SPECS/lshw.spec index 7f4dfae..c1fc2dd 100644 --- a/SPECS/lshw.spec +++ b/SPECS/lshw.spec @@ -2,22 +2,84 @@ Summary: Hardware lister Name: lshw Version: B.02.19.2 -Release: 6%{?dist} +Release: 7%{?dist} License: GPLv2 URL: http://ezix.org/project/wiki/HardwareLiSter Source0: http://www.ezix.org/software/files/lshw-%{version}.tar.gz Source1: https://salsa.debian.org/openstack-team/third-party/lshw/raw/debian/stein/debian/patches/lshw-gtk.1 Patch1: lshw-B.02.18-scandir.patch -Patch3: lshw-B.02.18-revert-json.patch Patch4: lshw-B.02.19.2-cmake.patch -Patch5: https://build.opensuse.org/package/view_file/hardware/lshw/lshw-fix-mmc.patch -Patch6: https://build.opensuse.org/package/view_file/hardware/lshw/lshw-fix-segfault-in-apfs-volume-code.patch +Patch9: 0003-report-CPU-family-model-stepping.patch +Patch10: 0004-move-PnP-devices-to-the-ISA-LPC-bridge.patch +Patch11: 0005-correctly-format-SMBIOS-UUID.patch +Patch12: 0006-cosmetic-clean-up.patch +Patch13: 0007-begin-work-on-input-devices.patch +Patch14: 0008-cosmetic-fixes.patch +Patch15: 0009-detect-sound-devices.patch +Patch16: 0010-detect-framebuffers.patch +Patch17: 0011-try-to-connect-input-devices-to-the-right-parent.patch +Patch18: 0012-devtree-Add-chip-id-from-the-dimm-module.patch +Patch19: 0013-devtree-Add-chip-id-from-CPU-node.patch +Patch20: 0014-volumes-fix-segfault-in-apfs-volume-code.patch +Patch21: 0015-merge-Github-PR-53.patch +Patch22: 0016-devtree-Add-capabilites-to-the-OPAL-Firmware.patch +Patch23: 0017-fix-issue-with-logical-names-being-truncated-dev-sda.patch +Patch24: 0018-code-clean-up-for-read-3.patch +Patch25: 0019-JSON-output-clean-up-list-object.patch +Patch26: 0020-clean-up-JSON-output.patch +Patch27: 0021-report-product-model-on-Power-systems.patch +Patch28: 0022-Fix-few-memory-leaks.patch +Patch29: 0023-Build-against-gtk3-instead-of-gtk2.patch +Patch30: 0024-Remove-deprecated-stock-messages.patch +Patch31: 0025-Remove-hack-which-is-apparently-not-useful-anymore.patch +Patch32: 0026-Use-GtkFileChooserNative-instead-of-GtkFileChooserDi.patch +Patch33: 0027-Replace-deprecated-GtkIconFactory-with-GHashTable.patch +Patch34: 0028-Replace-the-last-GtkStock-in-overwrite-dialog.patch +Patch35: 0029-Remove-deprecated-widgets.patch +Patch36: 0030-Remove-deprecated-use_action_appearance-property.patch +Patch37: 0031-Move-to-GtkApplication.patch +Patch38: 0032-Replace-signals-with-GSimpleActions.patch +Patch39: 0033-Enable-Disable-GSimpleAction-instead-of-button-sensi.patch +Patch40: 0034-Move-from-GtkMenuBar-to-GMenu.patch +Patch41: 0035-Replace-the-about-GtkDialog-with-a-GtkAboutDialog.patch +Patch42: 0036-Update-docs-TODO.patch +Patch43: 0037-Update-docs-TODO.patch +Patch44: 0038-update-man-page.patch +Patch45: 0039-fix-man-page-after-previous-update.patch +Patch46: 0040-Report-correct-memory-size-on-SMBIOS-2.7.patch +Patch47: 0041-Add-JEDEC-manufacturer.patch +Patch48: 0042-Avoid-crash-on-device-tree-parsing.patch +#Patch49: 0043-add-static-target-to-Makefile.patch +Patch50: 0044-fix-potential-crash.patch +Patch51: 0045-improve-portability-esp.-musl.patch +Patch52: 0046-code-clean-up.patch +Patch53: 0047-devtree-Add-UUID-property.patch +Patch54: 0048-Fix-getting-size-of-memory-banks-32GiB.patch +Patch55: 0049-Fix-typos-in-translatable-messages.patch +Patch56: 0050-Fix-another-typo.patch +Patch57: 0051-Translate-all-words-of-a-phrase-together.patch +Patch58: 0052-Remove-unnecessary-space-before-closing-parenthesis.patch +#Patch59: 0053-allow-pkg-config-override.patch +#Patch60: 0054-allow-pkg-config-override.patch +Patch61: 0055-code-clean-up.patch +Patch62: 0056-code-clean-up.patch +Patch63: 0057-support-for-new-ethtool-capabilities.patch +Patch64: 0058-cosmetic-fixes.patch +Patch65: 0059-fix-typo.patch +Patch66: 0060-add-some-includes.patch +Patch67: 0061-Add-more-network-speeds.patch +Patch68: 0062-Update-POT-file.patch +Patch69: 0063-Add-Catalan-translation.patch +#Patch70: 0064-use-max-9-Gzip-compression.patch +Patch71: 0065-merge-Github-PR-77.patch +Patch72: 0066-Fix-mistakes-in-Catalan-translation.patch +Patch73: 0067-Add-Spanish-translation.patch BuildRequires: cmake BuildRequires: desktop-file-utils BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gettext -BuildRequires: gtk2-devel >= 2.4 +BuildRequires: gtk3-devel >= 3.24 BuildRequires: libappstream-glib BuildRequires: ninja-build BuildRequires: python3-devel @@ -43,10 +105,72 @@ format. %prep %setup -q %patch01 -p1 -%patch03 -R -p1 %patch04 -p1 -%patch05 -p1 -%patch06 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +#%patch49 -p1 changes only on Makefile, not needed +%patch50 -p1 +%patch51 -p1 +%patch52 -p1 +%patch53 -p1 +%patch54 -p1 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 -p1 +#%patch59 -p1 changes only on src/Makefile, not needed +#%patch60 -p1 changes only on src/gui/Makefile, not needed +%patch61 -p1 +%patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 +%patch69 -p1 +#%patch70 -p1 changes only on src/Makefile, not needed +%patch71 -p1 +%patch72 -p1 +%patch73 -p1 %build %cmake -DNOLOGO=ON -DHWDATA=OFF -DPOLICYKIT=ON -DBUILD_SHARED_LIBS=OFF -GNinja @@ -59,7 +183,7 @@ ln -s gtk-lshw %{buildroot}%{_sbindir}/lshw-gui # translations seems borken, remove for now #find_lang %{name} -rm -rf %{buildroot}%{_datadir}/locale/fr/ +rm -rf %{buildroot}%{_datadir}/locale/*/ %check appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/appdata/*.appdata.xml @@ -93,6 +217,9 @@ appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/appdata/*.appdata %{_datadir}/polkit-1/actions/org.ezix.lshw.gui.policy %changelog +* Fri Dec 24 2021 Tao Liu - B.02.19.2-7 +- Update lshw to upstream latest(a2b731e7ecf) + * Mon Aug 09 2021 Mohan Boddu - B.02.19.2-6 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688