Fix inverted logic in IOKitStorage::isRemovable
Summary:
Reading through the code, I realized that the isRemovable check
returned true when the kDADiskDescriptionDeviceInternalKey property
is set to true. But that sounds like the check needs to be inverted:
According to [1] e.g. a disk is non-removable when it is internal.
And kDADiskDescriptionDeviceInternalKey returns whether the disk
is internal, not external.
Output from solid-hardware5 details and ... nonportableinfo
on a MacBook Pro Retina, 13-inch, Mid 2014 with macOS 10.15.2,
before this patch:
udi = 'IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/RP06@1C,5/IOPP/SSD0@0/AppleAHCI/PRT0@0/IOAHCIDevice@0/AppleAHCIDiskDriver/IOAHCIBlockStorageDevice/IOBlockStorageDriver/APPLE SSD SM0256F Media' parent = 'IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/RP06@1C,5/IOPP/SSD0@0/AppleAHCI/PRT0@0/IOAHCIDevice@0/AppleAHCIDiskDriver/IOAHCIBlockStorageDevice/IOBlockStorageDriver' (string) vendor = '' (string) product = 'APPLE SSD SM0256F ' (string) description = 'APPLE SSD SM0256F Media' (string) icon = 'drive-removable-media' (string) Block.major = 1 (0x1) (int) Block.minor = 0 (0x0) (int) Block.device = '/dev/disk0' (string) StorageAccess.accessible = false (bool) StorageAccess.filePath = '' (string) StorageAccess.ignored = false (bool) StorageDrive.bus = 'Platform' (0x5) (enum) StorageDrive.driveType = 'HardDisk' (0x0) (enum) StorageDrive.removable = true (bool) StorageDrive.hotpluggable = false (bool) StorageDrive.inUse = true (bool) StorageDrive.size = 251000193024 (0x3a70c70000) (qulonglong) StorageVolume.ignored = false (bool) StorageVolume.usage = 'PartitionTable' (0x3) (enum) StorageVolume.fsType = '' (string) StorageVolume.label = '' (string) StorageVolume.uuid = '' (string) StorageVolume.size = 251000193024 (0x3a70c70000) (qulonglong) udi = 'IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/RP06@1C,5/IOPP/SSD0@0/AppleAHCI/PRT0@0/IOAHCIDevice@0/AppleAHCIDiskDriver/IOAHCIBlockStorageDevice/IOBlockStorageDriver/APPLE SSD SM0256F Media' BSD Major = 1 (0x1) (int) BSD Minor = 0 (0x0) (int) BSD Name = 'disk0' (string) BSD Unit = 0 (0x0) (int) Content = 'GUID_partition_scheme' (string) Content Hint = '' (string) Ejectable = false (bool) IOBusyInterest = 'IOCommand is not serializable' (string) IOGeneralInterest = 'IOCommand is not serializable' (string) IOMediaIcon = '' (string) IOPolledInterfaceStack = 'IOPolledFilePollers is not serializable' (string) Leaf = false (bool) Open = true (bool) Preferred Block Size = 512 (0x200) (qlonglong) Removable = false (bool) Size = 251000193024 (0x3a70c70000) (qlonglong) Whole = true (bool) Writable = true (bool) className = 'IOMedia' (string)
Note the Ejectable = false (bool) vs.
StorageDrive.removable = true (bool). The patch here fixes
it to yield StorageDrive.removable = false (bool)
Subscribers: kde-frameworks-devel
Tags: Frameworks
Differential Revision: https://phabricator.kde.org/D27065