diff options
author | Phillip Susi <psusi@ubuntu.com> | 2014-04-26 19:27:00 -0400 |
---|---|---|
committer | Phillip Susi <psusi@ubuntu.com> | 2014-05-22 19:56:36 -0400 |
commit | 7cde99849ed321da2712248bc27c14a954d6b481 (patch) | |
tree | 9719e12b956186bd92e3af7a12a473c61214076b | |
parent | ec0b631c43ced29a05557d911bbf57110d0b7ae3 (diff) | |
download | parted-7cde99849ed321da2712248bc27c14a954d6b481.tar.gz |
libparted: give correct partition device name on loop labels
ped_partition_get_path() was returning "/dev/foo1" instead of
"/dev/foo" on loop labels. This caused gparted to run tools like mkfs on
a device node that did not actually exist.
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | libparted/arch/linux.c | 10 |
2 files changed, 11 insertions, 2 deletions
@@ -29,6 +29,9 @@ GNU parted NEWS -*- outline -*- ** Bug Fixes + libparted: ped_partition_get_path() was returning "/dev/foo1" instead + of "/dev/foo" for loop labels. + partprobe: when called on a disk that has become a loop label, remove any partitions left over from a previous label. diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c index 9ae6d64..f2e2abc 100644 --- a/libparted/arch/linux.c +++ b/libparted/arch/linux.c @@ -48,6 +48,7 @@ #include "../architecture.h" #include "dirname.h" #include "xstrtol.h" +#include "xalloc.h" #if ENABLE_NLS # include <libintl.h> @@ -2356,6 +2357,9 @@ _device_get_part_path (PedDevice const *dev, int num) static char* linux_partition_get_path (const PedPartition* part) { + /* loop label means use the whole disk */ + if (strcmp (part->disk->type->name, "loop") == 0) + return xstrdup (part->disk->dev->path); return _device_get_part_path (part->disk->dev, part->num); } @@ -2424,6 +2428,8 @@ linux_partition_is_busy (const PedPartition* part) PED_ASSERT (part != NULL); + if (strcmp (part->disk->type->name, "loop") == 0) + return linux_is_busy (part->disk->dev); if (_partition_is_mounted (part)) return 1; if (part->type == PED_PARTITION_EXTENDED) { @@ -2546,7 +2552,7 @@ _sysfs_ull_entry_from_part(PedPartition const* part, const char *entry, unsigned long long *val) { char path[128]; - char *part_name = linux_partition_get_path(part); + char *part_name = _device_get_part_path (part->disk->dev, part->num); if (!part_name) return false; @@ -2581,7 +2587,7 @@ _kernel_get_partition_start_and_length(PedPartition const *part, PED_ASSERT(start); PED_ASSERT(length); - char *dev_name = linux_partition_get_path (part); + char *dev_name = _device_get_part_path (part->disk->dev, part->num); if (!dev_name) return false; |