Fix hardware control center crashes on device hot remove

Fix incorrect decoding of hex escaped device names
pull/16/head
Timothy Pearson 10 years ago
parent 9ea35022d2
commit 3b57fe6816

@ -402,8 +402,8 @@ void TDEHardwareDevices::processHotPluggedHardware() {
TDEGenericDevice *hwdevice;
for (hwdevice = m_deviceList.first(); hwdevice; hwdevice = m_deviceList.next()) {
if (hwdevice->systemPath() == systempath) {
emit hardwareRemoved(hwdevice);
emit hardwareEvent(TDEHardwareEvent::HardwareRemoved, hwdevice->uniqueID());
// Temporarily disable auto-deletion to ensure object validity when calling the Removed events below
m_deviceList.setAutoDelete(false);
// If the device is a storage device and has a slave, update it as well
if (hwdevice->type() == TDEGenericDeviceType::Disk) {
@ -423,6 +423,13 @@ void TDEHardwareDevices::processHotPluggedHardware() {
m_deviceList.remove(hwdevice);
}
emit hardwareRemoved(hwdevice);
emit hardwareEvent(TDEHardwareEvent::HardwareRemoved, hwdevice->uniqueID());
// Reenable auto-deletion and delete the removed device object
m_deviceList.setAutoDelete(true);
delete hwdevice;
break;
}
}

@ -25,6 +25,7 @@
#include <sys/ioctl.h>
#include <linux/cdrom.h>
#include <tqregexp.h>
#include <tqpixmap.h>
#include <tqfile.h>
@ -489,13 +490,26 @@ void TDEStorageDevice::internalSetSlaveDevices(TQStringList sd) {
m_slaveDevices = sd;
}
TQString decodeHexEncoding(TQString str) {
TQRegExp hexEncRegExp("\\\\x[0-9A-Fa-f]{1,2}");
hexEncRegExp.setMinimal(false);
hexEncRegExp.setCaseSensitive(true);
int s = -1;
while((s = hexEncRegExp.search(str, s+1))>=0){
str.replace(s, hexEncRegExp.cap(0).length(), TQChar((char)strtol(hexEncRegExp.cap(0).mid(2).ascii(), NULL, 16)));
}
return str;
}
TQString TDEStorageDevice::friendlyName() {
// Return the actual storage device name
TQString devicevendorid = vendorEncoded();
TQString devicemodelid = modelEncoded();
devicevendorid.replace("\\x20", " ");
devicemodelid.replace("\\x20", " ");
devicevendorid = decodeHexEncoding(devicevendorid);
devicemodelid = decodeHexEncoding(devicemodelid);
devicevendorid = devicevendorid.stripWhiteSpace();
devicemodelid = devicemodelid.stripWhiteSpace();
@ -637,7 +651,7 @@ TQPixmap TDEStorageDevice::icon(TDEIcon::StdSizes size) {
ret = DesktopIcon("tape_unmount", size);
}
if (isDiskOfType(TDEDiskDeviceType::Camera)) {
ret = DesktopIcon("camera_unmount");
ret = DesktopIcon("camera_unmount", size);
}
if (isDiskOfType(TDEDiskDeviceType::HDD)) {

Loading…
Cancel
Save