diff options
-rw-r--r-- | libparted/arch/linux.c | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c index c108f5a..b56ce2b 100644 --- a/libparted/arch/linux.c +++ b/libparted/arch/linux.c @@ -2238,19 +2238,6 @@ linux_partition_get_path (const PedPartition* part) return _device_get_part_path (part->disk->dev, part->num); } -static dev_t -_partition_get_part_dev (const PedPartition* part) -{ - struct stat dev_stat; - int dev_major, dev_minor; - - if (stat (part->disk->dev->path, &dev_stat)) - return (dev_t)0; - dev_major = major (dev_stat.st_rdev); - dev_minor = minor (dev_stat.st_rdev); - return (dev_t)makedev (dev_major, dev_minor + part->num); -} - static int _mount_table_search (const char* file_name, dev_t dev) { @@ -2294,16 +2281,19 @@ _partition_is_mounted_by_path (const char *path) return _partition_is_mounted_by_dev (part_stat.st_rdev); } +/* If partition PART is mounted, or if we encounter an out-of-memory error + while trying to determine its status, return 1. Otherwise, return 0. */ static int _partition_is_mounted (const PedPartition *part) { - dev_t dev; - if (!ped_partition_is_active (part)) - return 0; - dev = _partition_get_part_dev (part); - if (!dev) - return 0; - return _partition_is_mounted_by_dev (dev); + if (!ped_partition_is_active (part)) + return 0; + char *part_name = _device_get_part_path (part->disk->dev, part->num); + if (!part_name) + return 1; + int status = _partition_is_mounted_by_path (part_name); + free (part_name); + return !!status; } static int |