summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2016-02-11 00:47:11 +0100
committerSlávek Banko <slavek.banko@axis.cz>2016-02-11 00:47:11 +0100
commit36481f68c1cbb7c55a7325d709311e20b9c2ce54 (patch)
tree874acdbf6c367d14a182036ab6f806f6d091dcce
parentff469a69ff7951e429b5ce48187906aac5ad89f9 (diff)
downloadtdelibs-36481f68c1cbb7c55a7325d709311e20b9c2ce54.tar.gz
tdelibs-36481f68c1cbb7c55a7325d709311e20b9c2ce54.zip
Fix crash in tdehwlib on partitions without parent disk
This applies for example to the software RAID defined in the BIOS Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
-rw-r--r--tdecore/tdehw/tdehardwaredevices.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/tdecore/tdehw/tdehardwaredevices.cpp b/tdecore/tdehw/tdehardwaredevices.cpp
index cf11d8b6b..9c5a0833d 100644
--- a/tdecore/tdehw/tdehardwaredevices.cpp
+++ b/tdecore/tdehw/tdehardwaredevices.cpp
@@ -2595,18 +2595,21 @@ void TDEHardwareDevices::updateExistingDeviceInformation(TDEGenericDevice* exist
TDEDiskDeviceType::TDEDiskDeviceType disktype = sdevice->diskType();
TDEDiskDeviceStatus::TDEDiskDeviceStatus diskstatus = TDEDiskDeviceStatus::Null;
- if (TQString(udev_device_get_property_value(dev, "ID_PART_ENTRY_NUMBER")).isEmpty()) {
- disktype = classifyDiskType(dev, devicenode, devicebus, devicetypestring, systempath, devicevendor, devicemodel, filesystemtype, devicedriver);
- }
- else {
- // Set partition disk type and status based on the parent device
+ TDEStorageDevice* parentdisk = NULL;
+ if (!(TQString(udev_device_get_property_value(dev, "ID_PART_ENTRY_NUMBER")).isEmpty())) {
TQString parentsyspath = systempath;
parentsyspath.truncate(parentsyspath.length()-1); // Remove trailing slash
parentsyspath.truncate(parentsyspath.findRev("/"));
- TDEStorageDevice* parentdisk = static_cast<TDEStorageDevice*>(findBySystemPath(parentsyspath));
+ parentdisk = static_cast<TDEStorageDevice*>(findBySystemPath(parentsyspath));
+ }
+ if (parentdisk) {
+ // Set partition disk type and status based on the parent device
disktype = parentdisk->diskType();
diskstatus = diskstatus | parentdisk->diskStatus();
}
+ else {
+ disktype = classifyDiskType(dev, devicenode, devicebus, devicetypestring, systempath, devicevendor, devicemodel, filesystemtype, devicedriver);
+ }
sdevice->internalSetDiskType(disktype);
device = classifyUnknownDeviceByExternalRules(dev, device, true); // Check external rules for possible subtype overrides
disktype = sdevice->diskType(); // The type can be overridden by an external rule