bug-parted
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]