diff --git a/src/solid/devices/backends/fstab/fstabhandling.h b/src/solid/devices/backends/fstab/fstabhandling.h --- a/src/solid/devices/backends/fstab/fstabhandling.h +++ b/src/solid/devices/backends/fstab/fstabhandling.h @@ -46,6 +46,7 @@ static QStringList currentMountPoints(const QString &device); static QStringList mountPoints(const QString &device); static QStringList options(const QString &device); + static QString fstype(const QString &device); static bool callSystemCommand(const QString &commandName, const QStringList &args, const QObject *recvr, std::function callback); static void flushMtabCache(); static void flushFstabCache(); @@ -59,6 +60,7 @@ QStringMultiHash m_mtabCache; QStringMultiHash m_fstabCache; QStringMultiHash m_fstabOptionsCache; + QHash m_fstabFstypeCache; bool m_fstabCacheValid; bool m_mtabCacheValid; diff --git a/src/solid/devices/backends/fstab/fstabhandling.cpp b/src/solid/devices/backends/fstab/fstabhandling.cpp --- a/src/solid/devices/backends/fstab/fstabhandling.cpp +++ b/src/solid/devices/backends/fstab/fstabhandling.cpp @@ -139,12 +139,15 @@ struct mntent *fe; while ((fe = getmntent(fstab)) != nullptr) { - if (_k_isFstabNetworkFileSystem(fe->mnt_type, fe->mnt_fsname)) { - const QString device = QFile::decodeName(fe->mnt_fsname); + const QString fsname = QFile::decodeName(fe->mnt_fsname); + const QString fstype = QFile::decodeName(fe->mnt_type); + if (_k_isFstabNetworkFileSystem(fstype, fsname)) { const QString mountpoint = QFile::decodeName(fe->mnt_dir); + const QString device = fsname; QStringList options = QFile::decodeName(fe->mnt_opts).split(QLatin1Char(',')); globalFstabCache->m_fstabCache.insert(device, mountpoint); + globalFstabCache->m_fstabFstypeCache.insert(device, fstype); while (!options.isEmpty()) { globalFstabCache->m_fstabOptionsCache.insert(device, options.takeFirst()); } @@ -225,6 +228,13 @@ return options; } +QString Solid::Backends::Fstab::FstabHandling::fstype(const QString &device) +{ + _k_updateFstabMountPointsCache(); + + return globalFstabCache->m_fstabFstypeCache.value(device); +} + bool Solid::Backends::Fstab::FstabHandling::callSystemCommand(const QString &commandName, const QStringList &args, const QObject *receiver, std::function callback) { @@ -276,6 +286,7 @@ const QString device = QFile::decodeName(mounted[i].f_mntfromname); const QString mountpoint = QFile::decodeName(mounted[i].f_mntonname); globalFstabCache->m_mtabCache.insert(device, mountpoint); + globalFstabCache->m_fstabFstypeCache.insert(device, type); } } @@ -292,6 +303,7 @@ const QString device = QFile::decodeName(FSNAME(fe)); const QString mountpoint = QFile::decodeName(MOUNTPOINT(fe)); globalFstabCache->m_mtabCache.insert(device, mountpoint); + globalFstabCache->m_fstabFstypeCache.insert(device, type); } } ENDMNTENT(mnttab);