Joel Granados Moreno wrote:

> From: Joel Andres Granados <[email protected]>
>
> If disks did not contain any partitions, parted did not create metadata
> partitions for msdos labels.  This lead to inconsistencies when
> reporting free space partition ranges.  This patch addresses this issue.
>
> * libparted/labels/dos.c (get_last_part): Erased this function.
> * libparted/labels/dos.c (get_start_first_nonfree_part): New function to
>   find the start sector of the first non-free partition in disk.
> * libparted/labels/dos.c (get_end_last_nonfree_part): New function to
>   find the end sector of the last non-free partition in disk.
> * libparted/lables/dos.c (add_startend_metadata): Added code that
>   handles disks no partitions.  Added check that prevents the metadata
>   partitions from being greater than the device length.  Added check
>   that prevents metadata partitions from overlapping in small devs.

...

Hi Joel,

Thanks for posting this series.

1 and 2 look ok.  This one (3/4) required a description for each of the
two new functions (added below), plus I've made small syntax adjustments.
I'm about to amend your #3 with the patch below.

Once I get past #4 (new version coming?) and test, I'll push the series.

diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
index f724722..f219e7d 100644
--- a/libparted/labels/dos.c
+++ b/libparted/labels/dos.c
@@ -2082,10 +2082,12 @@ add_logical_part_metadata (PedDisk* disk, const 
PedPartition* log_part)
 }

 /*
- * return 0 if we don't asign sector
+ * Find the starting sector number of the first non-free partition,
+ * set *SECTOR to that value, and return 1.
+ * If there is no non-free partition, don't modify *SECTOR and return 0.
  */
 static int
-get_start_first_nonfree_part(const PedDisk* disk, PedSector *sector)
+get_start_first_nonfree_part (const PedDisk* disk, PedSector *sector)
 {
        PedPartition* walk;

@@ -2093,20 +2095,23 @@ get_start_first_nonfree_part(const PedDisk* disk, 
PedSector *sector)
        if (!disk->part_list)
                return 0;

-       for (walk = disk->part_list; walk; walk = walk->next)
+       for (walk = disk->part_list; walk; walk = walk->next) {
                if (walk->type == PED_PARTITION_NORMAL ||
-                               walk->type == PED_PARTITION_EXTENDED){
+                               walk->type == PED_PARTITION_EXTENDED) {
                        *sector = walk->geom.start;
                        return 1;
                }
+       }
        return 0;
 }

 /*
- * return 0 if we don't asign sector
+ * Find the ending sector number of the last non-free partition,
+ * set *SECTOR to that value, and return 1.
+ * If there is no non-free partition, don't modify *SECTOR and return 0.
  */
 static int
-get_end_last_nonfree_part(const PedDisk* disk, PedSector *sector)
+get_end_last_nonfree_part (const PedDisk* disk, PedSector *sector)
 {
        PedPartition* last_part = NULL;
        PedPartition* walk;
@@ -2115,15 +2120,16 @@ get_end_last_nonfree_part(const PedDisk* disk, 
PedSector *sector)
        if (!disk->part_list)
                return 0;

-       for (walk = disk->part_list; walk; walk = walk->next)
+       for (walk = disk->part_list; walk; walk = walk->next) {
                if (walk->type == PED_PARTITION_NORMAL ||
-                               walk->type == PED_PARTITION_EXTENDED){
+                               walk->type == PED_PARTITION_EXTENDED) {
                        last_part = walk;
                }
+       }

        if (!last_part)
                return 0;
-       else{
+       else {
                *sector = last_part->geom.end;
                return 1;
        }

_______________________________________________
parted-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/parted-devel

Reply via email to