From 037380228d14fb17af072f70a5cc434cfd5cb504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 4 Jul 2017 14:42:29 +0100 Subject: [PATCH] QRegularExpression->QJson lsblk LUKS mapping point parsing now uses json. --- src/fs/luks.cpp | 29 ++++++++++++++++------ src/plugins/libparted/libpartedbackend.cpp | 3 +-- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 090e0de..e8ce6ba 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -27,12 +27,16 @@ #include "util/helpers.h" #include "util/report.h" +#include + #include #include -#include +#include +#include +#include #include +#include #include -#include #include #include @@ -334,7 +338,7 @@ void luks::loadInnerFileSystem(const QString& mapperNode) setLabel(m_innerFs->readLabel(mapperNode)); setUUID(m_innerFs->readUUID(mapperNode)); if (m_innerFs->supportGetUsed() == FileSystem::cmdSupportFileSystem) - setSectorsUsed(qCeil((m_innerFs->readUsedCapacity(mapperNode) + payloadOffset()) / static_cast(m_logicalSectorSize) )); + setSectorsUsed(std::ceil((m_innerFs->readUsedCapacity(mapperNode) + payloadOffset()) / static_cast(m_logicalSectorSize) )); m_innerFs->scan(mapperNode); } @@ -561,16 +565,25 @@ void luks::getMapperName(const QString& deviceNode) ExternalCommand cmd(QStringLiteral("lsblk"), { QStringLiteral("--list"), QStringLiteral("--noheadings"), + QStringLiteral("--paths"), + QStringLiteral("--json"), QStringLiteral("--output"), QStringLiteral("type,name"), deviceNode }); + m_MapperName = QString(); + if (cmd.run(-1) && cmd.exitCode() == 0) { - QStringList output=cmd.output().split(QStringLiteral("\n")).filter(QRegularExpression(QStringLiteral("^crypt "))); - if (!output.isEmpty() && !output.first().isEmpty()) - m_MapperName = QStringLiteral("/dev/mapper/") + output.first().split(QStringLiteral(" ")).last(); + const QJsonDocument jsonDocument = QJsonDocument::fromJson(cmd.output().toUtf8()); + QJsonObject jsonObject = jsonDocument.object(); + const QJsonArray jsonArray = jsonObject[QLatin1String("blockdevices")].toArray(); + for (const auto &deviceLine : jsonArray) { + QJsonObject deviceObject = deviceLine.toObject(); + if (deviceObject[QLatin1String("type")].toString() == QLatin1String("crypt")) { + m_MapperName = deviceObject[QLatin1String("name")].toString(); + break; + } + } } - else - m_MapperName = QString(); } void luks::getLuksInfo(const QString& deviceNode) diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index 825ec02..8f4b5cd 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -48,7 +48,7 @@ #include #include #include -#include +#include #include #include @@ -421,7 +421,6 @@ QList LibPartedBackend::scanDevices(bool excludeReadOnly) ExternalCommand cmd(QStringLiteral("lsblk"), { QStringLiteral("--nodeps"), - QStringLiteral("--noheadings"), QStringLiteral("--paths"), QStringLiteral("--sort"), QStringLiteral("name"), QStringLiteral("--json"),