diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp
index a6fa3c4..c7aa68c 100644
--- a/src/plugins/libparted/libpartedbackend.cpp
+++ b/src/plugins/libparted/libpartedbackend.cpp
@@ -143,6 +143,8 @@ static quint64 firstUsableSector(const Device& d)
rval += 32;
}
+ ped_disk_destroy(pedDisk);
+
return rval;
}
@@ -171,6 +173,8 @@ static quint64 lastUsableSector(const Device& d)
rval -= 32;
}
+ ped_disk_destroy(pedDisk);
+
return rval;
}
@@ -321,8 +325,8 @@ void LibPartedBackend::scanDevicePartitions(Device& d, PedDisk* pedDisk)
PartitionRole::Roles r = PartitionRole::None;
- char* pedPath = ped_partition_get_path(pedPartition);
FileSystem::Type type = FileSystem::Unknown;
+ char* pedPath = ped_partition_get_path(pedPartition);
if (pedPath)
type = detectFileSystem(QString::fromUtf8(pedPath));
free(pedPath);
@@ -352,7 +356,9 @@ void LibPartedBackend::scanDevicePartitions(Device& d, PedDisk* pedDisk)
if (parent == nullptr)
parent = d.partitionTable();
- const QString node = QString::fromUtf8(ped_partition_get_path(pedPartition));
+ pedPath = ped_partition_get_path(pedPartition);
+ const QString node = QString::fromUtf8(pedPath);
+ free(pedPath);
FileSystem* fs = FileSystemFactory::create(type, pedPartition->geom.start, pedPartition->geom.end);
// libparted does not handle LUKS partitions
@@ -445,6 +451,7 @@ Device* LibPartedBackend::scanDevice(const QString& device_node)
scanDevicePartitions(*d, pedDisk);
}
+ ped_device_destroy(pedDevice);
return d;
}
@@ -495,9 +502,9 @@ FileSystem::Type LibPartedBackend::detectFileSystem(const QString& partitionPath
if ((dev = blkid_get_dev(cache,
partitionPath.toLocal8Bit().constData(),
BLKID_DEV_NORMAL)) != nullptr) {
- QString s = QString::fromUtf8(blkid_get_tag_value(cache,
- "TYPE",
- partitionPath.toLocal8Bit().constData()));
+ char *string = blkid_get_tag_value(cache, "TYPE", partitionPath.toLocal8Bit().constData());
+ QString s = QString::fromUtf8(string);
+ free(string);
if (s == QStringLiteral("ext2")) rval = FileSystem::Ext2;
else if (s == QStringLiteral("ext3")) rval = FileSystem::Ext3;
@@ -513,9 +520,9 @@ FileSystem::Type LibPartedBackend::detectFileSystem(const QString& partitionPath
else if (s == QStringLiteral("ufs")) rval = FileSystem::Ufs;
else if (s == QStringLiteral("vfat")) {
// libblkid uses SEC_TYPE to distinguish between FAT16 and FAT32
- QString st = QString::fromUtf8(blkid_get_tag_value(cache,
- "SEC_TYPE",
- partitionPath.toLocal8Bit().constData()));
+ string = blkid_get_tag_value(cache, "SEC_TYPE", partitionPath.toLocal8Bit().constData());
+ QString st = QString::fromUtf8(string);
+ free(string);
if (st == QStringLiteral("msdos"))
rval = FileSystem::Fat16;
else
@@ -582,5 +589,4 @@ QString LibPartedBackend::lastPartedExceptionMessage()
return s_lastPartedExceptionMessage;
}
-
#include "libpartedbackend.moc"
diff --git a/src/plugins/libparted/libpartedpartitiontable.cpp b/src/plugins/libparted/libpartedpartitiontable.cpp
index 62d5cbc..9f5f4c6 100644
--- a/src/plugins/libparted/libpartedpartitiontable.cpp
+++ b/src/plugins/libparted/libpartedpartitiontable.cpp
@@ -44,8 +44,7 @@ LibPartedPartitionTable::LibPartedPartitionTable(PedDevice* device) :
LibPartedPartitionTable::~LibPartedPartitionTable()
{
- if (m_PedDisk != nullptr)
- ped_disk_destroy(m_PedDisk);
+ ped_disk_destroy(m_PedDisk);
}
bool LibPartedPartitionTable::open()
@@ -167,14 +166,18 @@ QString LibPartedPartitionTable::createPartition(Report& report, const Partition
if (pedGeometry)
pedConstraint = ped_constraint_exact(pedGeometry);
+ ped_geometry_destroy(pedGeometry);
if (pedConstraint == nullptr) {
report.line() << i18nc("@info/plain", "Failed to create a new partition: could not get geometry for constraint.");
return QString();
}
- if (ped_disk_add_partition(pedDisk(), pedPartition, pedConstraint))
- rval = QString::fromUtf8(ped_partition_get_path(pedPartition));
+ if (ped_disk_add_partition(pedDisk(), pedPartition, pedConstraint)) {
+ char *pedPath = ped_partition_get_path(pedPartition);
+ rval = QString::fromUtf8(pedPath);
+ free(pedPath);
+ }
else {
report.line() << xi18nc("@info/plain", "Failed to add partition %1 to device %2.", partition.deviceNode(), QString::fromUtf8(pedDisk()->dev->path));
report.line() << LibPartedBackend::lastPartedExceptionMessage();
@@ -223,8 +226,10 @@ bool LibPartedPartitionTable::updateGeometry(Report& report, const Partition& pa
rval = true;
else
report.line() << xi18nc("@info/plain", "Could not set geometry for partition %1 while trying to resize/move it.", partition.deviceNode());
+ ped_constraint_destroy(pedConstraint);
} else
report.line() << xi18nc("@info/plain", "Could not get constraint for partition %1 while trying to resize/move it.", partition.deviceNode());
+ ped_geometry_destroy(pedGeometry);
} else
report.line() << xi18nc("@info/plain", "Could not get geometry for partition %1 while trying to resize/move it.", partition.deviceNode());
} else
@@ -283,12 +288,14 @@ bool LibPartedPartitionTable::resizeFileSystem(Report& report, const Partition&
if (!rval)
report.line() << xi18nc("@info/plain", "Could not resize file system on partition %1.", partition.deviceNode());
+ ped_geometry_destroy(resizedGeometry);
} else
report.line() << xi18nc("@info/plain", "Could not get geometry for resized partition %1 while trying to resize the file system.", partition.deviceNode());
ped_file_system_close(pedFileSystem);
} else
report.line() << xi18nc("@info/plain", "Could not open partition %1 while trying to resize the file system.", partition.deviceNode());
+ ped_geometry_destroy(originalGeometry);
} else
report.line() << xi18nc("@info/plain", "Could not read geometry for partition %1 while trying to resize the file system.", partition.deviceNode());
#else