summaryrefslogtreecommitdiff
path: root/diskman/disk.cc
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2020-02-12 10:54:27 -0600
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2020-02-12 10:54:27 -0600
commit0e8c19b115797ff934e84c105ef4357a899bc973 (patch)
treeb3645d8bd16c47ab9281b566135472236d6de336 /diskman/disk.cc
parentd72ef990a3a417e4f9062517313afe325e7035e6 (diff)
downloadhorizon-0e8c19b115797ff934e84c105ef4357a899bc973.tar.gz
horizon-0e8c19b115797ff934e84c105ef4357a899bc973.tar.bz2
horizon-0e8c19b115797ff934e84c105ef4357a899bc973.tar.xz
horizon-0e8c19b115797ff934e84c105ef4357a899bc973.zip
DiskMan: Fix all memory leaks
Diffstat (limited to 'diskman/disk.cc')
-rw-r--r--diskman/disk.cc14
1 files changed, 9 insertions, 5 deletions
diff --git a/diskman/disk.cc b/diskman/disk.cc
index 8006052..329edaa 100644
--- a/diskman/disk.cc
+++ b/diskman/disk.cc
@@ -111,6 +111,7 @@ Disk::Disk(void *creation, int type, bool partition) {
fdisk_table_get_partition(parts, next);
_partitions.push_back(Partition(*this, part, 0));
}
+ fdisk_unref_table(parts);
}
} else if(type == 0) {
/* fallback to udev, if available */
@@ -120,8 +121,7 @@ Disk::Disk(void *creation, int type, bool partition) {
struct udev *udev = udev_device_get_udev(device);
struct udev_enumerate *part_enum = udev_enumerate_new(udev);
if(part_enum != NULL) {
- struct udev_list_entry *first, *item;
- struct udev_device *part_device = NULL;
+ struct udev_list_entry *first;
udev_enumerate_add_match_subsystem(part_enum, "block");
udev_enumerate_add_match_property(part_enum, "DEVTYPE",
@@ -131,13 +131,17 @@ Disk::Disk(void *creation, int type, bool partition) {
first = udev_enumerate_get_list_entry(part_enum);
if(first != NULL) {
+ struct udev_list_entry *item;
udev_list_entry_foreach(item, first) {
const char *path = udev_list_entry_get_name(item);
- if(part_device != NULL) udev_device_unref(part_device);
- part_device = udev_device_new_from_syspath(udev, path);
- _partitions.push_back(Partition(*this, part_device, 1));
+ struct udev_device *part_device = udev_device_new_from_syspath(udev, path);
+ if(part_device != nullptr) {
+ _partitions.push_back(Partition(*this, part_device, 1));
+ udev_device_unref(part_device);
+ }
}
}
+ udev_enumerate_unref(part_enum);
}
} else {
std::cerr << "Cannot load partitions for " << _name << std::endl;