From 30bd4d62a9a0effbc8fca7a9f7bab12cda104c4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 2 Oct 2020 23:12:33 +0100 Subject: [PATCH] Add blkid fallback for file system detection if udev method fails. --- src/plugins/sfdisk/sfdiskbackend.cpp | 14 +++++++++++--- src/util/externalcommand_whitelist.h | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/plugins/sfdisk/sfdiskbackend.cpp b/src/plugins/sfdisk/sfdiskbackend.cpp index 842d13f..3a859fd 100644 --- a/src/plugins/sfdisk/sfdiskbackend.cpp +++ b/src/plugins/sfdisk/sfdiskbackend.cpp @@ -464,12 +464,20 @@ FileSystem::Type SfdiskBackend::detectFileSystem(const QString& partitionPath) QStringLiteral("--query=property"), partitionPath }); - QString udevTypeRegExp = QStringLiteral("ID_FS_TYPE=(\\w+)"); - QString udevVersionRegExp = QStringLiteral("ID_FS_VERSION=(\\w+)"); + QString typeRegExp = QStringLiteral("ID_FS_TYPE=(\\w+)"); + QString versionRegExp = QStringLiteral("ID_FS_VERSION=(\\w+)"); QString name = {}; - rval = runDetectFileSystemCommand(udevCommand, udevTypeRegExp, udevVersionRegExp, name); + rval = runDetectFileSystemCommand(udevCommand, typeRegExp, versionRegExp, name); + + // Fallback to blkid. blkid has slightly worse detection but it works on whole block device filesystems. + if (rval == FileSystem::Type::Unknown) { + ExternalCommand blkidCommand(QStringLiteral("blkid"), { partitionPath }); + typeRegExp = QStringLiteral("TYPE=\"(\\w+)\""); + versionRegExp = QStringLiteral("SEC_TYPE=\"(\\w+)\""); + rval = runDetectFileSystemCommand(blkidCommand, typeRegExp, versionRegExp, name); + } if (rval == FileSystem::Type::Unknown) { qWarning() << "unknown file system type " << name << " on " << partitionPath; diff --git a/src/util/externalcommand_whitelist.h b/src/util/externalcommand_whitelist.h index 7ebae8d..4c52ced 100644 --- a/src/util/externalcommand_whitelist.h +++ b/src/util/externalcommand_whitelist.h @@ -1,5 +1,5 @@ /* - SPDX-FileCopyrightText: 2018-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2018-2020 Andrius Štikonas SPDX-FileCopyrightText: 2019 Shubham Jangra SPDX-License-Identifier: GPL-3.0-or-later @@ -15,6 +15,7 @@ QStringLiteral("udevadm"), //Core programs QStringLiteral("blockdev"), +QStringLiteral("blkid"), QStringLiteral("partx"), QStringLiteral("sfdisk"), QStringLiteral("wipefs"),