[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 (¶ms, "%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