[Parted-commits] GNU Parted Official Repository: Changes to 'master'

Jim Meyering meyering at alioth.debian.org
Sun Dec 20 11:41:28 UTC 2009


 libparted/arch/linux.c |    9 +++++----
 libparted/disk.c       |   13 ++++++++++++-
 libparted/labels/dos.c |    5 ++++-
 parted/parted.c        |    2 +-
 4 files changed, 22 insertions(+), 7 deletions(-)

New commits:
commit 676f90d8f0281b8b2bace1f91e8e45bb9d6024f8
Author: Hans de Goede <hdegoede at redhat.com>
Date:   Thu Dec 17 10:27:40 2009 +0100

    dos: honor cylinder alignment disk flag when allocating metadata
    
    * libparted/labels/dos.c (add_startend_metadata): Honor cylinder
    alignment flag.

diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
index 2566435..d1df0c7 100644
--- a/libparted/labels/dos.c
+++ b/libparted/labels/dos.c
@@ -2209,7 +2209,10 @@ add_startend_metadata (PedDisk* disk)
 	else
 		init_end = PED_MIN (dev->bios_geom.sectors - 1, init_end - 1);
 
-	if (!get_end_last_nonfree_part(disk, &final_start))
+        DosDiskData *disk_specific = disk->disk_specific;
+        if (!disk_specific->cylinder_alignment)
+                final_start = dev->length - 1;
+        else if (!get_end_last_nonfree_part(disk, &final_start))
 		final_start = ped_round_down_to (dev->length, cyl_size);
 	else
 		final_start = PED_MAX (final_start + 1,

commit 837c9c9d5a21ce14c6e4a48de7f98201ef0fd525
Author: Hans de Goede <hdegoede at redhat.com>
Date:   Thu Dec 17 10:27:39 2009 +0100

    libparted: push/pop update mode around ped_disk_set_flag
    
    Disk flags can change how the metadata gets allocated, so push/pop
    update mode around ops->disk_set_flag, so that the metadata gets
    re-allocated.
    * libparted/disk.c (ped_disk_set_flag): push/pop update mode.

diff --git a/libparted/disk.c b/libparted/disk.c
index 7cbde81..0dc97f3 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -759,10 +759,15 @@ ped_disk_get_max_primary_partition_count (const PedDisk* disk)
 int
 ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state)
 {
+        int ret;
+
         PED_ASSERT (disk != NULL, return 0);
 
         PedDiskOps *ops = disk->type->ops;
 
+        if (!_disk_push_update_mode(disk))
+                return 0;
+
         if (!ped_disk_is_flag_available(disk, flag)) {
                 ped_exception_throw (
                         PED_EXCEPTION_ERROR,
@@ -770,10 +775,16 @@ ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state)
                         "The flag '%s' is not available for %s disk labels.",
                         ped_disk_flag_get_name(flag),
                         disk->type->name);
+                _disk_pop_update_mode(disk);
                 return 0;
         }
 
-        return ops->disk_set_flag(disk, flag, state);
+        ret = ops->disk_set_flag(disk, flag, state);
+
+        if (!_disk_pop_update_mode (disk))
+                return 0;
+
+        return ret;
 }
 
 /**

commit d5b3f617e0da00b37aad786ce9b1091825e2c062
Author: Hans de Goede <hdegoede at redhat.com>
Date:   Fri Dec 18 10:33:18 2009 +0100

    linux: fix use-after-free in devicemapper code
    
    * libparted/arch/linux.c (_dm_add_partition): Fix use of dm_task
    information after freeing it.

diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
index 9d15bf2..aefe788 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2423,7 +2423,6 @@ err:
 static int
 _dm_add_partition (PedDisk* disk, PedPartition* part)
 {
-        struct dm_task* task = NULL;
         int             rc;
         char*           vol_name = NULL;
         const char*     dev_name = NULL;
@@ -2434,7 +2433,7 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
                 return 0;
 
         /* Get map name from devicemapper */
-        task = dm_task_create (DM_DEVICE_INFO);
+        struct dm_task *task = dm_task_create (DM_DEVICE_INFO);
         if (!task)
                 goto err;
 
@@ -2447,12 +2446,14 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
                 goto err;
 
         dev_name = dm_task_get_name (task);
-        dm_task_destroy (task);
-        task = NULL;
 
         if (asprintf (&vol_name, "%sp%d", dev_name, part->num) == -1)
                 goto err;
 
+        /* Caution: dm_task_destroy frees dev_name.  */
+        dm_task_destroy (task);
+        task = NULL;
+
         if (asprintf (&params, "%d:%d %lld", arch_specific->major,
                       arch_specific->minor, part->geom.start) == -1)
                 goto err;

commit dba5a6bad835a3801911ebe154a7fa625142ceee
Author: Hans de Goede <hdegoede at redhat.com>
Date:   Fri Dec 18 10:33:17 2009 +0100

    ui: Do not truncate flag names when printing
    
    The partition_print_flags() function was truncating the flag names,
    but these are translated strings, and thus can contain multibyte
    characters. Truncating multibyte chars in a non multibyte aware way
    is not good and was causing issues when printing tables in Russian:
    http://bugzilla.redhat.com/show_bug.cgi?id=543029
    
    Since the truncating does not seem to make sense at all this patch
    simply removes it (it was likely an attempt to stay within 80 chars
    when printing, but as one partition can have multiple flags set this
    won't work)
    
    * parted/parted.c (partition_print_flags): Don't truncate flag names.

diff --git a/parted/parted.c b/parted/parted.c
index 6919701..5074bdf 100644
--- a/parted/parted.c
+++ b/parted/parted.c
@@ -1254,7 +1254,7 @@ partition_print_flags (PedPartition* part)
                         _res = res;
                         ped_realloc (&_res, strlen (res) + 1 + strlen (name));
                         res = _res;
-                        strncat (res, name, 21);
+                        strcat(res, name);
                 }
         }
 



More information about the Parted-commits mailing list