[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH parted 5/5] dasd: fix disk duplication
From: |
Hans de Goede |
Subject: |
[PATCH parted 5/5] dasd: fix disk duplication |
Date: |
Tue, 3 Nov 2009 13:09:00 +0100 |
Fix dasd_duplicate and add a dasd_partition_duplicate function.
* libparted/labels/dasd.c(dasd_partition_duplicate): New function.
(dasd_duplicate): Don't set the disk_specific pointer to NULL!
(dasd_duplicate): Copy DasdDiskSpecific from old disk to new disk.
---
libparted/labels/dasd.c | 24 +++++++++++++++++++++---
1 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
index 841f122..56b8131 100644
--- a/libparted/labels/dasd.c
+++ b/libparted/labels/dasd.c
@@ -82,6 +82,7 @@ static PedPartition* dasd_partition_new (const PedDisk* disk,
const PedFileSystemType* fs_type,
PedSector start,
PedSector end);
+static PedPartition* dasd_partition_duplicate (const PedPartition *part);
static void dasd_partition_destroy (PedPartition* part);
static int dasd_partition_set_flag (PedPartition* part,
PedPartitionFlag flag,
@@ -116,6 +117,7 @@ static PedDiskOps dasd_disk_ops = {
partition_set_system: dasd_partition_set_system,
partition_new: dasd_partition_new,
+ partition_duplicate: dasd_partition_duplicate,
partition_destroy: dasd_partition_destroy,
partition_set_flag: dasd_partition_set_flag,
partition_get_flag: dasd_partition_get_flag,
@@ -129,8 +131,6 @@ static PedDiskOps dasd_disk_ops = {
get_max_primary_partition_count: dasd_get_max_primary_partition_count,
get_max_supported_partition_count:
dasd_get_max_supported_partition_count,
get_partition_alignment: dasd_get_partition_alignment,
-
- partition_duplicate: NULL
};
static PedDiskType dasd_disk_type = {
@@ -176,7 +176,8 @@ dasd_duplicate (const PedDisk* disk)
if (!new_disk)
return NULL;
- new_disk->disk_specific = NULL;
+ memcpy(new_disk->disk_specific, disk->disk_specific,
+ sizeof(DasdDiskSpecific));
return new_disk;
}
@@ -631,6 +632,23 @@ error:
return 0;
}
+static PedPartition*
+dasd_partition_duplicate (const PedPartition *part)
+{
+ PedPartition *new_part;
+
+ new_part = ped_partition_new (part->disk, part->type, part->fs_type,
+ part->geom.start, part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+
+ memcpy(new_part->disk_specific, part->disk_specific,
+ sizeof(DasdPartitionData));
+
+ return new_part;
+}
+
static void
dasd_partition_destroy (PedPartition* part)
{
--
1.6.5.1