From 844d7ff40403238d8a36b9344a7c9c1501a151bf Mon Sep 17 00:00:00 2001 From: Pascal Terjan Date: Fri, 13 Feb 2009 16:14:05 +0000 Subject: diskdrake: don't crash on invalid partition table --- perl-install/NEWS | 1 + perl-install/c/stuff.xs.pl | 72 ++++++++++++++++++++++++++-------------------- perl-install/install/NEWS | 2 ++ 3 files changed, 44 insertions(+), 31 deletions(-) (limited to 'perl-install') diff --git a/perl-install/NEWS b/perl-install/NEWS index ca458cfce..8652ab9c2 100644 --- a/perl-install/NEWS +++ b/perl-install/NEWS @@ -1,6 +1,7 @@ - diskdrake: o allow resizing on lvm for mounted ext3/4 and not mounted xfs o use a list instead of combo in the partition type selection window + o don't crash on invalid partition table Version 11.86 - 12 February 2009 diff --git a/perl-install/c/stuff.xs.pl b/perl-install/c/stuff.xs.pl index bf8e35bc1..519899bd1 100644 --- a/perl-install/c/stuff.xs.pl +++ b/perl-install/c/stuff.xs.pl @@ -519,11 +519,14 @@ const char * get_disk_type(char * device_path) CODE: PedDevice *dev = ped_device_get(device_path); + RETVAL = NULL; if(dev) { PedDisk* disk = ped_disk_new(dev); - RETVAL = disk->type->name; - ped_disk_destroy(disk); - } else RETVAL = NULL; + if(disk) { + RETVAL = disk->type->name; + ped_disk_destroy(disk); + } + } OUTPUT: RETVAL @@ -590,13 +593,16 @@ int disk_delete_all(char * device_path) CODE: PedDevice *dev = ped_device_get(device_path); + RETVAL = 0; if(dev) { PedDisk* disk = ped_disk_new(dev); - RETVAL = ped_disk_delete_all(disk); - if(RETVAL) - RETVAL = ped_disk_commit(disk); - ped_disk_destroy(disk); - } else RETVAL = 0; + if(disk) { + RETVAL = ped_disk_delete_all(disk); + if(RETVAL) + RETVAL = ped_disk_commit(disk); + ped_disk_destroy(disk); + } + } OUTPUT: RETVAL @@ -607,18 +613,20 @@ disk_del_partition(char * device_path, int part_number) RETVAL = 0; if(dev) { PedDisk* disk = ped_disk_new(dev); - PedPartition* part = ped_disk_get_partition(disk, part_number); - if(!part) { - printf("disk_del_partition: failed to find partition\n"); - } else { - RETVAL=ped_disk_delete_partition(disk, part); - if(RETVAL) { - RETVAL = ped_disk_commit(disk); + if(disk) { + PedPartition* part = ped_disk_get_partition(disk, part_number); + if(!part) { + printf("disk_del_partition: failed to find partition\n"); } else { - printf("del_partition failed\n"); + RETVAL=ped_disk_delete_partition(disk, part); + if(RETVAL) { + RETVAL = ped_disk_commit(disk); + } else { + printf("del_partition failed\n"); + } } + ped_disk_destroy(disk); } - ped_disk_destroy(disk); } OUTPUT: RETVAL @@ -630,21 +638,23 @@ disk_add_partition(char * device_path, double start, double length, const char * RETVAL=0; if(dev) { PedDisk* disk = ped_disk_new(dev); - PedGeometry* geom = ped_geometry_new(dev, (long long)start, (long long)length); - PedPartition* part = ped_partition_new (disk, PED_PARTITION_NORMAL, ped_file_system_type_get(fs_type), (long long)start, (long long)start+length-1); - PedConstraint* constraint = ped_constraint_new_from_max(geom); - if(!part) { - printf("ped_partition_new failed\n"); - } else - RETVAL = ped_disk_add_partition (disk, part, constraint); - if(RETVAL) { - RETVAL = ped_disk_commit(disk); - } else { - printf("add_partition failed\n"); + if(disk) { + PedGeometry* geom = ped_geometry_new(dev, (long long)start, (long long)length); + PedPartition* part = ped_partition_new (disk, PED_PARTITION_NORMAL, ped_file_system_type_get(fs_type), (long long)start, (long long)start+length-1); + PedConstraint* constraint = ped_constraint_new_from_max(geom); + if(!part) { + printf("ped_partition_new failed\n"); + } else + RETVAL = ped_disk_add_partition (disk, part, constraint); + if(RETVAL) { + RETVAL = ped_disk_commit(disk); + } else { + printf("add_partition failed\n"); + } + ped_geometry_destroy(geom); + ped_constraint_destroy(constraint); + ped_disk_destroy(disk); } - ped_geometry_destroy(geom); - ped_constraint_destroy(constraint); - ped_disk_destroy(disk); } OUTPUT: RETVAL diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS index 63478e389..eb6569c68 100644 --- a/perl-install/install/NEWS +++ b/perl-install/install/NEWS @@ -1,3 +1,5 @@ +- don't crash on invalid partition table + Version 11.86 - 12 February 2009 - upload a fully updated version -- cgit v1.2.1