From 6c928e04040b4d7d5373545a94ff81df33b67774 Mon Sep 17 00:00:00 2001
From: Teo Mrnjavac <teo@kde.org>
Date: Fri, 2 Sep 2016 15:12:48 +0200
Subject: [PATCH] Exclude ISO9660 volumes.

---
 .../partition/core/PartitionCoreModule.cpp    | 34 +++++++++++++++++--
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp
index 19b70bf648..219192a248 100644
--- a/src/modules/partition/core/PartitionCoreModule.cpp
+++ b/src/modules/partition/core/PartitionCoreModule.cpp
@@ -63,6 +63,36 @@ hasRootPartition( Device* device )
     return false;
 }
 
+static bool
+isIso9660( const Device* device )
+{
+    QString path = device->deviceNode();
+    if ( path.isEmpty() )
+        return false;
+
+    QProcess blkid;
+    blkid.start( "blkid", { path } );
+    blkid.waitForFinished();
+    QString output = QString::fromLocal8Bit( blkid.readAllStandardOutput() );
+    if ( output.contains( "iso9660" ) )
+        return true;
+
+    if ( device->partitionTable() &&
+         !device->partitionTable()->children().isEmpty() )
+    {
+        for ( const Partition* partition : device->partitionTable()->children() )
+        {
+            path = partition->partitionPath();
+            blkid.start( "blkid", { path } );
+            blkid.waitForFinished();
+            QString output = QString::fromLocal8Bit( blkid.readAllStandardOutput() );
+            if ( output.contains( "iso9660" ) )
+                return true;
+        }
+    }
+    return false;
+}
+
 //- DeviceInfo ---------------------------------------------
 PartitionCoreModule::DeviceInfo::DeviceInfo( Device* _device )
     : device( _device )
@@ -128,9 +158,7 @@ PartitionCoreModule::doInit()
     for ( QList< Device* >::iterator it = devices.begin(); it != devices.end(); )
         if ( hasRootPartition( *it ) ||
              (*it)->deviceNode().startsWith( "/dev/zram") ||
-             ( (*it)->partitionTable() &&
-               (*it)->partitionTable()->type() == PartitionTable::loop &&
-               (*it)->partitionTable()->isChildMounted() ) )
+             isIso9660( *it ) )
             it = devices.erase( it );
         else
             ++it;
-- 
GitLab