From d51404c7f1b262331329ca1a1e97e3f9bd9dea4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 11 Jul 2018 23:36:20 +0100 Subject: [PATCH] sfdisk: fix returned partition name This makes it work with partitions such as /dev/mmcblk1p2 --- src/plugins/sfdisk/sfdiskpartitiontable.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/plugins/sfdisk/sfdiskpartitiontable.cpp b/src/plugins/sfdisk/sfdiskpartitiontable.cpp index c169a8c..5faf5c8 100644 --- a/src/plugins/sfdisk/sfdiskpartitiontable.cpp +++ b/src/plugins/sfdisk/sfdiskpartitiontable.cpp @@ -76,12 +76,16 @@ QString SfdiskPartitionTable::createPartition(Report& report, const Partition& p if ( createCommand.write(QByteArrayLiteral("start=") + QByteArray::number(partition.firstSector()) + type + QByteArrayLiteral(" size=") + QByteArray::number(partition.length()) + QByteArrayLiteral("\nwrite\n")) && createCommand.start(-1) && createCommand.waitFor() ) { - QRegularExpression re(QStringLiteral("Created a new partition (\\d)")); + QRegularExpression re(QStringLiteral("Created a new partition (\\d+)")); QRegularExpressionMatch rem = re.match(createCommand.output()); - // TODO: Needs refactoring. Workaround to check if device path is RAID and include 'p' character before partition number. - if (rem.hasMatch()) - return partition.devicePath() + (SoftwareRAID::isRaidPath(partition.devicePath()) ? QStringLiteral("p") : QStringLiteral("")) + rem.captured(1); + if (rem.hasMatch()) { + // TODO: Use back() with Qt 5.10 + if ( partition.devicePath()[partition.devicePath().size() - 1].isDigit() ) + return partition.devicePath() + QLatin1Char('p') + rem.captured(1); + else + return partition.devicePath() + rem.captured(1); + } } report.line() << xi18nc("@info:progress", "Failed to add partition %1 to device %2.", partition.deviceNode(), m_device->deviceNode());