diff options
author | Slávek Banko <slavek.banko@axis.cz> | 2016-02-11 00:47:11 +0100 |
---|---|---|
committer | Slávek Banko <slavek.banko@axis.cz> | 2016-02-11 00:47:11 +0100 |
commit | 36481f68c1cbb7c55a7325d709311e20b9c2ce54 (patch) | |
tree | 874acdbf6c367d14a182036ab6f806f6d091dcce /tdecore/tdehw | |
parent | ff469a69ff7951e429b5ce48187906aac5ad89f9 (diff) | |
download | tdelibs-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>
Diffstat (limited to 'tdecore/tdehw')
-rw-r--r-- | tdecore/tdehw/tdehardwaredevices.cpp | 15 |
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 |