diff --git a/parted-1.9.0-dasd-duplicate.patch b/parted-1.9.0-dasd-duplicate.patch deleted file mode 100644 index 5fafc6c..0000000 --- a/parted-1.9.0-dasd-duplicate.patch +++ /dev/null @@ -1,316 +0,0 @@ -From bc854d48563ff30ba4c55914baa8db0a271790e5 Mon Sep 17 00:00:00 2001 -From: Joel Granados Moreno -Date: Thu, 16 Jul 2009 20:16:43 +0200 -Subject: [PATCH] Add duplicate functionality to dasd type lables. - -* libparted/labels/dasd.c (dasd_alloc): Add the errno to the exception -message to ease debugging. -(dasd_partition_duplicate): New function. -(dasd_duplicate): Include all the dasd specific structures in the -duplicate disk. -(dasd_partition_new): Handle the case when malloc fails because of lack -of memory. -(dasd_disk_ops): Add the new dasd_partition_duplicate hook. ---- - libparted/labels/dasd.c | 234 ++++++++++++++++++++++++++++++++++++++++++++--- - 1 files changed, 222 insertions(+), 12 deletions(-) - -diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c -index ec73d09..e87daba 100644 ---- a/libparted/labels/dasd.c -+++ b/libparted/labels/dasd.c -@@ -23,6 +23,7 @@ - #include - - #include -+#include - #include - #include - #include -@@ -58,6 +59,9 @@ - - extern void ped_disk_dasd_init (); - extern void ped_disk_dasd_done (); -+static PedPartition* dasd_partition_new (const PedDisk*, PedPartitionType, -+ const PedFileSystemType*, -+ PedSector, PedSector); - - #define DASD_NAME "dasd" - -@@ -104,7 +108,8 @@ dasd_alloc (const PedDevice* dev) - &disk_specific->real_sector_size) == -1) { - ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, - _("Unable to determine the block " -- "size of this dasd")); -+ "size of this dasd - %s"), -+ strerror(errno)); - free(disk_specific); - free(disk); - return NULL; -@@ -113,19 +118,216 @@ dasd_alloc (const PedDevice* dev) - return disk; - } - -+static PedPartition* -+dasd_partition_duplicate (const PedPartition* part, PedDisk* disk) -+{ -+ PedPartition* walk; -+ PedPartition* new_part; -+ format1_label_t* new_format1; -+ partition_info_t* new_part_info; -+ partition_info_t* old_part_info; -+ DasdPartitionData* old_dasd_data; -+ DasdPartitionData* temp_dasd_data; -+ DasdDiskSpecific* old_disk_specific; -+ partition_info_t* old_anchor_first; -+ partition_info_t* old_anchor_last; -+ char* error_message; -+ -+ /* Initialize old_* variables. */ -+ old_dasd_data = (DasdPartitionData*) part->disk_specific; -+ old_part_info = (partition_info_t*) old_dasd_data->part_info; -+ old_disk_specific = (DasdDiskSpecific*) part->disk->disk_specific; -+ old_anchor_first = (partition_info_t*) old_disk_specific->anchor->first; -+ old_anchor_last = (partition_info_t*) old_disk_specific->anchor->last; -+ /* The default error message. */ -+ error_message = "Could not allocate memory for dasd specific structure."; -+ -+ /* Handle the DasdPartitionData->partition_info_t->format1_label_t pointer. */ -+ new_format1 = (format1_label_t*) ped_malloc (sizeof (format1_label_t)); -+ if (!new_format1) -+ goto error; -+ memcpy (new_format1, old_part_info->f1, sizeof (format1_label_t)); -+ -+ /* Handle the DasdPartitionData->partition_info_t pointer. */ -+ new_part_info = (partition_info_t*) ped_malloc (sizeof (partition_info_t)); -+ if (!new_part_info) -+ goto error_free_format1; -+ memcpy (new_part_info, old_part_info, sizeof (partition_info_t)); -+ new_part_info->f1 = new_format1; -+ new_part_info->next = NULL; -+ new_part_info->prev = NULL; -+ -+ /* Try to set new_part_info->next, new_part_info->prev, -+ * disk->disk_specific->anchor->first & disk->disk_specific->anchor->last -+ * when disk is not NULL. -+ */ -+ if (disk) -+ { -+ /* Handle the next and prev pointers. */ -+ /* Look for the prev. */ -+ if (old_part_info->prev == NULL || part->prev == NULL) -+ new_part_info->prev = NULL; -+ else -+ { -+ for (walk = disk->part_list ; walk ; walk = walk->next) -+ { -+ /* Identify the partition by start and length sectors. */ -+ if (walk->geom.start == part->prev->geom.start -+ && walk->geom.length == part->prev->geom.length) -+ { -+ /* Verify the new_part_info->prev and the walk->next. */ -+ temp_dasd_data = (DasdPartitionData*) walk->disk_specific; -+ new_part_info->prev = (partition_info_t*) temp_dasd_data->part_info; -+ ((partition_info_t*)temp_dasd_data->part_info)->next = new_part_info; -+ break; -+ } -+ } -+ } -+ -+ /* Look for the next. */ -+ if (old_part_info->next == NULL || part->next == NULL) -+ new_part_info->next = NULL; -+ else -+ { -+ for (walk = disk->part_list ; walk ; walk = walk->next) -+ { -+ /* Identify the partition by start and length sectors. */ -+ if (walk->geom.start == part->next->geom.start -+ && walk->geom.length == part->next->geom.length) -+ { -+ /* Verify the new_part_info->next and the walk->prev. */ -+ temp_dasd_data = (DasdPartitionData*) walk->disk_specific; -+ new_part_info->next = (partition_info_t*) temp_dasd_data->part_info; -+ ((partition_info_t*)temp_dasd_data->part_info)->prev = new_part_info; -+ break; -+ } -+ } -+ } -+ -+ /* Handle the DasdDiskSpecific->fdasd_anchor->last && -+ * Handle the DasdDiskSpecific->fdasd_anchor->first. */ -+ if ( old_anchor_first->start_trk == new_part_info->start_trk -+ && old_anchor_first->len_trk == new_part_info->len_trk) -+ ((DasdDiskSpecific*) disk->disk_specific)->anchor->first = new_part_info; -+ else if ( old_anchor_last->start_trk == new_part_info->start_trk -+ && old_anchor_last->len_trk == new_part_info->len_trk) -+ ((DasdDiskSpecific*) disk->disk_specific)->anchor->last = new_part_info; -+ } -+ -+ /* Create new partition. Allocates memory for DasdPartitionData. */ -+ new_part = dasd_partition_new (part->disk, part->type, part->fs_type, -+ part->geom.start, part->geom.end); -+ if (!new_part) -+ goto error_free_part_info; -+ new_part->num = part->num; -+ -+ /* Handle the DasdPartitionData pointer. */ -+ memcpy (new_part->disk_specific, old_dasd_data, sizeof (DasdPartitionData)); -+ ((DasdPartitionData*)new_part->disk_specific)->part_info = new_part_info; -+ -+ return new_part; -+ -+error_free_part_info: -+ free(new_part_info); -+error_free_format1: -+ free(new_format1); -+error: -+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, -+ _(error_message)); -+ return NULL; -+} -+ - static PedDisk* - dasd_duplicate (const PedDisk* disk) - { -- PedDisk* new_disk; -- -- new_disk = ped_disk_new_fresh(disk->dev, &dasd_disk_type); -- -- if (!new_disk) -- return NULL; -- -- new_disk->disk_specific = NULL; -- -- return new_disk; -+ PedDisk* new_disk; -+ DasdDiskSpecific* old_disk_specific; -+ fdasd_anchor_t* new_anchor; -+ fdasd_anchor_t* old_anchor; -+ format4_label_t* new_format4; -+ format5_label_t* new_format5; -+ format7_label_t* new_format7; -+ volume_label_t* new_volume; -+ char* error_message; -+ -+ /* Initialize old_* variables. */ -+ old_disk_specific = disk->disk_specific; -+ old_anchor = old_disk_specific->anchor; -+ /* The default error message. */ -+ error_message = "Could not allocate memory for dasd specific structure."; -+ -+ /* Handle DasdDiskSpecific->fdasd_anchor->format4_label_t. */ -+ new_format4 = (format4_label_t*) ped_malloc (sizeof (format4_label_t)); -+ if (!new_format4) -+ goto error; -+ memcpy (new_format4, old_disk_specific->anchor->f4, sizeof (format4_label_t)); -+ -+ /* Handle DasdDiskSpecific->fdasd_anchor->format5_label_t. */ -+ new_format5 = (format5_label_t*) ped_malloc (sizeof (format5_label_t)); -+ if (!new_format5) -+ goto error_free_format4; -+ memcpy (new_format5, old_disk_specific->anchor->f5, sizeof (format5_label_t)); -+ -+ /* Handle DasdDiskSpecific->fdasd_anchor->format7_label_t. */ -+ new_format7 = (format7_label_t*) ped_malloc (sizeof (format7_label_t)); -+ if (!new_format7) -+ goto error_free_format5; -+ memcpy (new_format7, old_disk_specific->anchor->f7, sizeof (format7_label_t)); -+ -+ /* Handle DasdDiskSpecific->fdasd_anchor->volume_label_t. */ -+ new_volume = (volume_label_t*) ped_malloc (sizeof (volume_label_t)); -+ if (!new_volume) -+ goto error_free_format7; -+ memcpy (new_volume, old_disk_specific->anchor->vlabel, -+ sizeof (volume_label_t)); -+ -+ /* Handle DasdDiskSpecific->fdasd_anchor. */ -+ if (! (new_anchor = (fdasd_anchor_t*) ped_malloc (sizeof (fdasd_anchor_t)))) -+ goto error_free_volume; -+ memcpy (new_anchor, old_anchor, sizeof (fdasd_anchor_t)); -+ new_anchor->f4 = new_format4; -+ new_anchor->f5 = new_format5; -+ new_anchor->f7 = new_format7; -+ new_anchor->vlabel = new_volume; -+ /* We dont have last and first info yet. */ -+ new_anchor->last = NULL; -+ new_anchor->first = NULL; -+ -+ /* Handle new disk creation. ped_disk_new_fresh allocates memory for -+ * new_disk->disk_specific. */ -+ /* We need to make sure that the device is open for reading. */ -+ if (!ped_device_open(disk->dev)) -+ { -+ error_message = "Could not open device for dasd disk duplication"; -+ goto error_free_anchor; -+ } -+ new_disk = ped_disk_new_fresh (disk->dev, &dasd_disk_type); -+ if (!ped_device_close(disk->dev)) -+ { -+ error_message = "Could not close device for dasd disk duplication"; -+ goto error_free_anchor; -+ } -+ if (!new_disk) -+ goto error_free_anchor; -+ memcpy (new_disk->disk_specific, old_disk_specific, sizeof(DasdDiskSpecific)); -+ ((DasdDiskSpecific*)new_disk->disk_specific)->anchor = new_anchor; -+ -+ return new_disk; -+ -+error_free_anchor: -+ free(new_anchor); -+error_free_volume: -+ free(new_volume); -+error_free_format7: -+ free(new_format7); -+error_free_format5: -+ free(new_format5); -+error_free_format4: -+ free(new_format4); -+error: -+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, -+ _(error_message)); -+ return NULL; - } - - static void -@@ -551,12 +753,20 @@ dasd_partition_new (const PedDisk* disk, PedPartitionType part_type, - goto error; - - part->disk_specific = ped_malloc (sizeof (DasdPartitionData)); -+ if (!part->disk_specific) -+ goto error_free_part; - return part; - -+error_free_part: -+ free(part); - error: - return 0; - } - -+/* -+ * Frees the memory of an active partition. Active here is whatever -+ * ped_partition_is_active returns. -+ */ - static void - dasd_partition_destroy (PedPartition* part) - { -@@ -818,6 +1028,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, -@@ -831,7 +1042,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, - -- partition_duplicate: NULL - }; - - static PedDiskType dasd_disk_type = { --- -1.6.0.6 - diff --git a/parted-1.9.0-dasd-fixes.patch b/parted-1.9.0-dasd-fixes.patch new file mode 100644 index 0000000..8930ee6 --- /dev/null +++ b/parted-1.9.0-dasd-fixes.patch @@ -0,0 +1,485 @@ +diff -ur parted-1.9.0.orig/libparted/arch/linux.c parted-1.9.0/libparted/arch/linux.c +--- parted-1.9.0.orig/libparted/arch/linux.c 2009-11-03 11:35:00.000000000 +0100 ++++ parted-1.9.0/libparted/arch/linux.c 2009-11-03 11:45:48.000000000 +0100 +@@ -646,10 +646,14 @@ + #if USE_BLKID + get_blkid_topology(arch_specific); + #endif ++ ++#if defined __s390__ || defined __s390x__ + /* Return PED_SECTOR_SIZE_DEFAULT for DASDs. */ + if (dev->type == PED_DEVICE_DASD) { ++ arch_specific->real_sector_size = dev->sector_size; + dev->sector_size = PED_SECTOR_SIZE_DEFAULT; + } ++#endif + + if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw ( +@@ -1069,6 +1073,7 @@ + return 0; + } + ++#if defined __s390__ || defined __s390x__ + static int + init_dasd (PedDevice* dev, const char* model_name) + { +@@ -1124,6 +1129,7 @@ + error: + return 0; + } ++#endif + + static int + init_generic (PedDevice* dev, const char* model_name) +@@ -1270,10 +1276,12 @@ + goto error_free_arch_specific; + break; + ++#if defined __s390__ || defined __s390x__ + case PED_DEVICE_DASD: + if (!init_dasd (dev, _("IBM S390 DASD drive"))) + goto error_free_arch_specific; + break; ++#endif + + case PED_DEVICE_VIODASD: + if (!init_generic (dev, _("IBM iSeries Virtual DASD"))) +Only in parted-1.9.0/libparted/arch: linux.c.orig +Only in parted-1.9.0/libparted/arch: linux.c.rej +Only in parted-1.9.0/libparted/arch: linux.c~ +diff -ur parted-1.9.0.orig/libparted/arch/linux.h parted-1.9.0/libparted/arch/linux.h +--- parted-1.9.0.orig/libparted/arch/linux.h 2009-11-03 11:35:00.000000000 +0100 ++++ parted-1.9.0/libparted/arch/linux.h 2009-11-03 11:44:40.000000000 +0100 +@@ -18,10 +18,6 @@ + #ifndef PED_ARCH_LINUX_H_INCLUDED + #define PED_ARCH_LINUX_H_INCLUDED + +-#if defined(__s390__) || defined(__s390x__) +-# include +-#endif +- + #if HAVE_BLKID_BLKID_H + # include + #endif +@@ -35,8 +31,6 @@ + char* dmtype; /**< device map target type */ + #if defined(__s390__) || defined(__s390x__) + unsigned int real_sector_size; +- /* IBM internal dasd structure (i guess ;), required. */ +- struct fdasd_anchor *anchor; + #endif + #if HAVE_BLKID_BLKID_H + blkid_probe probe; +Only in parted-1.9.0/libparted/arch: linux.h.orig +Only in parted-1.9.0/libparted/arch: linux.h.rej +Only in parted-1.9.0/libparted/arch: linux.h~ +diff -ur parted-1.9.0.orig/libparted/labels/dasd.c parted-1.9.0/libparted/labels/dasd.c +--- parted-1.9.0.orig/libparted/labels/dasd.c 2009-11-03 11:35:00.000000000 +0100 ++++ parted-1.9.0/libparted/labels/dasd.c 2009-11-03 11:48:17.000000000 +0100 +@@ -66,14 +66,10 @@ + int system; + int raid; + int lvm; +- void *part_info; + } DasdPartitionData; + + typedef struct { +- unsigned int real_sector_size; + unsigned int format_type; +- /* IBM internal dasd structure (i guess ;), required. */ +- struct fdasd_anchor *anchor; + } DasdDiskSpecific; + + static PedDiskType dasd_disk_type; +@@ -98,17 +94,8 @@ + return NULL; + } + +- /* because we lie to parted we have to compensate with the +- real sector size. Record that now. */ +- if (ioctl(arch_specific->fd, BLKSSZGET, +- &disk_specific->real_sector_size) == -1) { +- ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, +- _("Unable to determine the block " +- "size of this dasd")); +- free(disk_specific); +- free(disk); +- return NULL; +- } ++ /* CDL format, newer */ ++ disk_specific->format_type = 2; + + return disk; + } +@@ -123,7 +110,8 @@ + if (!new_disk) + return NULL; + +- new_disk->disk_specific = NULL; ++ memcpy(new_disk->disk_specific, disk->disk_specific, ++ sizeof(DasdDiskSpecific)); + + return new_disk; + } +@@ -187,6 +175,8 @@ + fdasd_recreate_vtoc(&anchor); + fdasd_write_labels(&anchor, arch_specific->fd); + ++ fdasd_cleanup(&anchor); ++ + return 1; + } + +@@ -203,6 +193,7 @@ + partition_info_t *p; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; ++ struct fdasd_anchor anchor; + + PDEBUG; + +@@ -216,35 +207,32 @@ + arch_specific = LINUX_SPECIFIC(dev); + disk_specific = disk->disk_specific; + +- disk_specific->anchor = ped_malloc(sizeof(fdasd_anchor_t)); +- + PDEBUG; + +- fdasd_initialize_anchor(disk_specific->anchor); ++ fdasd_initialize_anchor(&anchor); + +- fdasd_get_geometry(disk_specific->anchor, arch_specific->fd); ++ fdasd_get_geometry(&anchor, arch_specific->fd); + + /* check dasd for labels and vtoc */ +- if (fdasd_check_volume(disk_specific->anchor, arch_specific->fd)) ++ if (fdasd_check_volume(&anchor, arch_specific->fd)) + goto error_close_dev; + +- if ((disk_specific->anchor->geo.cylinders +- * disk_specific->anchor->geo.heads) > BIG_DISK_SIZE) +- disk_specific->anchor->big_disk++; ++ if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE) ++ anchor.big_disk++; + + ped_disk_delete_all (disk); + +- if (strncmp(disk_specific->anchor->vlabel->volkey, ++ if (strncmp(anchor.vlabel->volkey, + vtoc_ebcdic_enc ("LNX1", str, 4), 4) == 0) { + DasdPartitionData* dasd_data; + + /* LDL format, old one */ + disk_specific->format_type = 1; + start = 24; +- end = (long long)(long long) disk_specific->anchor->geo.cylinders +- * (long long)disk_specific->anchor->geo.heads ++ end = (long long)(long long) anchor.geo.cylinders ++ * (long long)anchor.geo.heads + * (long long)disk->dev->hw_geom.sectors +- * (long long)disk_specific->real_sector_size ++ * (long long)arch_specific->real_sector_size + / (long long)disk->dev->sector_size - 1; + part = ped_partition_new (disk, PED_PARTITION_PROTECTED, NULL, start, end); + if (!part) +@@ -260,13 +248,15 @@ + if (!ped_disk_add_partition (disk, part, NULL)) + goto error_close_dev; + ++ fdasd_cleanup(&anchor); ++ + return 1; + } + + /* CDL format, newer */ + disk_specific->format_type = 2; + +- p = disk_specific->anchor->first; ++ p = anchor.first; + PDEBUG; + + for (i = 1 ; i <= USABLE_PARTITIONS; i++) { +@@ -281,11 +271,11 @@ + + start = (long long)(long long) p->start_trk + * (long long) disk->dev->hw_geom.sectors +- * (long long) disk_specific->real_sector_size ++ * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size; + end = (long long)((long long) p->end_trk + 1) + * (long long) disk->dev->hw_geom.sectors +- * (long long) disk_specific->real_sector_size ++ * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size - 1; + part = ped_partition_new(disk, PED_PARTITION_NORMAL, NULL, + start, end); +@@ -331,24 +321,25 @@ + + vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + +- dasd_data->part_info = (void *) p; + dasd_data->type = 0; + + constraint_exact = ped_constraint_exact (&part->geom); + if (!constraint_exact) + goto error_close_dev; +- if (!ped_disk_add_partition(disk, part, constraint_exact)) ++ if (!ped_disk_add_partition(disk, part, constraint_exact)) { ++ ped_constraint_destroy(constraint_exact); + goto error_close_dev; ++ } + ped_constraint_destroy(constraint_exact); + + if (p->fspace_trk > 0) { + start = (long long)((long long) p->end_trk + 1) + * (long long) disk->dev->hw_geom.sectors +- * (long long) disk_specific->real_sector_size ++ * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size; + end = (long long)((long long) p->end_trk + 1 + p->fspace_trk) + * (long long) disk->dev->hw_geom.sectors +- * (long long) disk_specific->real_sector_size ++ * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size - 1; + part = ped_partition_new (disk, PED_PARTITION_NORMAL, + NULL, start, end); +@@ -361,8 +352,10 @@ + + if (!constraint_exact) + goto error_close_dev; +- if (!ped_disk_add_partition(disk, part, constraint_exact)) ++ if (!ped_disk_add_partition(disk, part, constraint_exact)) { ++ ped_constraint_destroy(constraint_exact); + goto error_close_dev; ++ } + + ped_constraint_destroy (constraint_exact); + } +@@ -371,16 +364,20 @@ + } + + PDEBUG; ++ fdasd_cleanup(&anchor); + return 1; + + error_close_dev: + PDEBUG; ++ fdasd_cleanup(&anchor); + return 0; + } + + static int +-dasd_update_type (const PedDisk* disk) ++dasd_update_type (const PedDisk* disk, struct fdasd_anchor *anchor, ++ partition_info_t *part_info[USABLE_PARTITIONS]) + { ++ int i; + PedPartition* part; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; +@@ -390,22 +387,21 @@ + + PDEBUG; + +- for (part = ped_disk_next_partition(disk, NULL); part; +- part = ped_disk_next_partition(disk, part)) { ++ for (i = 1; i <= USABLE_PARTITIONS; i++) { + partition_info_t *p; + char *ch = NULL; + DasdPartitionData* dasd_data; + + PDEBUG; + +- if (part->type & PED_PARTITION_FREESPACE +- || part->type & PED_PARTITION_METADATA) ++ part = ped_disk_get_partition(disk, i); ++ if (!part) + continue; + + PDEBUG; + + dasd_data = part->disk_specific; +- p = dasd_data->part_info; ++ p = part_info[i - 1]; + + if (!p ) { + PDEBUG; +@@ -447,7 +443,7 @@ + break; + } + +- disk_specific->anchor->vtoc_changed++; ++ anchor->vtoc_changed++; + vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + } + +@@ -463,6 +459,9 @@ + partition_info_t *p; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; ++ struct fdasd_anchor anchor; ++ partition_info_t *part_info[USABLE_PARTITIONS]; ++ + PED_ASSERT(disk != NULL, return 0); + PED_ASSERT(disk->dev != NULL, return 0); + +@@ -475,23 +474,21 @@ + if (disk_specific->format_type == 1) + return 1; + +- /* XXX re-initialize anchor? */ +- fdasd_initialize_anchor(disk_specific->anchor); +- fdasd_get_geometry(disk_specific->anchor, arch_specific->fd); ++ /* initialize the anchor */ ++ fdasd_initialize_anchor(&anchor); ++ fdasd_get_geometry(&anchor, arch_specific->fd); + + /* check dasd for labels and vtoc */ +- if (fdasd_check_volume(disk_specific->anchor, arch_specific->fd)) ++ if (fdasd_check_volume(&anchor, arch_specific->fd)) + goto error; + +- if ((disk_specific->anchor->geo.cylinders +- * disk_specific->anchor->geo.heads) > BIG_DISK_SIZE) +- disk_specific->anchor->big_disk++; ++ if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE) ++ anchor.big_disk++; + +- fdasd_recreate_vtoc(disk_specific->anchor); ++ fdasd_recreate_vtoc(&anchor); + + for (i = 1; i <= USABLE_PARTITIONS; i++) { + unsigned int start, stop; +- int type; + + PDEBUG; + part = ped_disk_get_partition(disk, i); +@@ -501,41 +498,40 @@ + PDEBUG; + + start = part->geom.start * disk->dev->sector_size +- / disk_specific->real_sector_size / disk->dev->hw_geom.sectors; ++ / arch_specific->real_sector_size / disk->dev->hw_geom.sectors; + stop = (part->geom.end + 1) +- * disk->dev->sector_size / disk_specific->real_sector_size ++ * disk->dev->sector_size / arch_specific->real_sector_size + / disk->dev->hw_geom.sectors - 1; + + PDEBUG; + dasd_data = part->disk_specific; + +- type = dasd_data->type; +- PDEBUG; +- +- p = fdasd_add_partition(disk_specific->anchor, start, stop); ++ p = fdasd_add_partition(&anchor, start, stop); + if (!p) { + PDEBUG; +- return 0; ++ goto error; + } +- dasd_data->part_info = (void *) p; ++ part_info[i - 1] = p; + p->type = dasd_data->system; + } + + PDEBUG; + +- if (!fdasd_prepare_labels(disk_specific->anchor, arch_specific->fd)) +- return 0; ++ if (!fdasd_prepare_labels(&anchor, arch_specific->fd)) ++ goto error; + +- dasd_update_type(disk); ++ dasd_update_type(disk, &anchor, part_info); + PDEBUG; + +- if (!fdasd_write_labels(disk_specific->anchor, arch_specific->fd)) +- return 0; ++ if (!fdasd_write_labels(&anchor, arch_specific->fd)) ++ goto error; + ++ fdasd_cleanup(&anchor); + return 1; + + error: + PDEBUG; ++ fdasd_cleanup(&anchor); + return 0; + } + +@@ -557,6 +553,23 @@ + 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) + { +@@ -650,8 +662,9 @@ + dasd_get_partition_alignment(const PedDisk *disk) + { + DasdDiskSpecific* disk_specific = disk->disk_specific; ++ LinuxSpecific *arch_specific = LINUX_SPECIFIC(disk->dev); + PedSector sector_size = +- disk_specific->real_sector_size / disk->dev->sector_size; ++ arch_specific->real_sector_size / disk->dev->sector_size; + + return ped_alignment_new(0, disk->dev->hw_geom.sectors * sector_size); + } +@@ -670,7 +683,7 @@ + + arch_specific = LINUX_SPECIFIC (disk->dev); + disk_specific = disk->disk_specific; +- sector_size = disk_specific->real_sector_size / disk->dev->sector_size; ++ sector_size = arch_specific->real_sector_size / disk->dev->sector_size; + + if (!ped_alignment_init (&start_align, 0, + disk->dev->hw_geom.sectors * sector_size)) +@@ -796,7 +809,7 @@ + else + /* Mark the start of the disk as metadata. */ + vtoc_end = (FIRST_USABLE_TRK * (long long) disk->dev->hw_geom.sectors +- * (long long) disk_specific->real_sector_size ++ * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size) - 1; + + new_part = ped_partition_new (disk,PED_PARTITION_METADATA,NULL,0,vtoc_end); +@@ -828,6 +841,7 @@ + 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, +@@ -841,8 +855,6 @@ + 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 = { +Only in parted-1.9.0/libparted/labels: dasd.c.orig +Only in parted-1.9.0/libparted/labels: dasd.c.rej +Only in parted-1.9.0/libparted/labels: dasd.c~ diff --git a/parted-1.9.0-export-alignment-info.patch b/parted-1.9.0-export-alignment-info.patch index 4e10d3e..d765abe 100644 --- a/parted-1.9.0-export-alignment-info.patch +++ b/parted-1.9.0-export-alignment-info.patch @@ -1,6 +1,6 @@ diff -up parted-1.9.0/configure.ac.export-align parted-1.9.0/configure.ac --- parted-1.9.0/configure.ac.export-align 2009-07-23 19:52:08.000000000 +0200 -+++ parted-1.9.0/configure.ac 2009-10-29 15:19:31.000000000 +0100 ++++ parted-1.9.0/configure.ac 2009-11-03 11:30:46.000000000 +0100 @@ -519,6 +519,18 @@ HOST=$(hostname) BUILDINFO="$USER@$HOST, $DATE" AC_SUBST([BUILDINFO]) @@ -22,7 +22,7 @@ diff -up parted-1.9.0/configure.ac.export-align parted-1.9.0/configure.ac lib/Makefile diff -up parted-1.9.0/include/parted/device.h.export-align parted-1.9.0/include/parted/device.h --- parted-1.9.0/include/parted/device.h.export-align 2009-07-23 19:52:08.000000000 +0200 -+++ parted-1.9.0/include/parted/device.h 2009-10-29 15:19:31.000000000 +0100 ++++ parted-1.9.0/include/parted/device.h 2009-11-03 11:30:46.000000000 +0100 @@ -92,6 +92,8 @@ struct _PedDevice { void* arch_specific; }; @@ -58,9 +58,9 @@ diff -up parted-1.9.0/include/parted/device.h.export-align parted-1.9.0/include/ extern void _ped_device_probe (const char* path); diff -up parted-1.9.0/include/parted/disk.h.export-align parted-1.9.0/include/parted/disk.h ---- parted-1.9.0/include/parted/disk.h.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/include/parted/disk.h 2009-10-29 15:19:31.000000000 +0100 -@@ -216,6 +216,7 @@ struct _PedDiskOps { +--- parted-1.9.0/include/parted/disk.h.export-align 2009-11-03 11:30:46.000000000 +0100 ++++ parted-1.9.0/include/parted/disk.h 2009-11-03 11:30:46.000000000 +0100 +@@ -214,6 +214,7 @@ struct _PedDiskOps { int (*get_max_primary_partition_count) (const PedDisk* disk); bool (*get_max_supported_partition_count) (const PedDisk* disk, int* supported); @@ -68,7 +68,7 @@ diff -up parted-1.9.0/include/parted/disk.h.export-align parted-1.9.0/include/pa }; struct _PedDiskType { -@@ -265,6 +266,8 @@ extern int ped_disk_get_last_partition_n +@@ -263,6 +264,8 @@ extern int ped_disk_get_last_partition_n extern int ped_disk_get_max_primary_partition_count (const PedDisk* disk); extern bool ped_disk_get_max_supported_partition_count(const PedDisk* disk, int* supported); @@ -79,7 +79,7 @@ diff -up parted-1.9.0/include/parted/disk.h.export-align parted-1.9.0/include/pa /** @} */ diff -up parted-1.9.0/include/parted/natmath.h.export-align parted-1.9.0/include/parted/natmath.h --- parted-1.9.0/include/parted/natmath.h.export-align 2009-07-23 19:52:08.000000000 +0200 -+++ parted-1.9.0/include/parted/natmath.h 2009-10-29 15:19:31.000000000 +0100 ++++ parted-1.9.0/include/parted/natmath.h 2009-11-03 11:30:46.000000000 +0100 @@ -31,6 +31,7 @@ typedef struct _PedAlignment PedAlignmen #include @@ -90,7 +90,7 @@ diff -up parted-1.9.0/include/parted/natmath.h.export-align parted-1.9.0/include #define PED_MAX(a, b) ( ((a)>(b)) ? (a) : (b) ) diff -up parted-1.9.0/libparted/Makefile.am.export-align parted-1.9.0/libparted/Makefile.am --- parted-1.9.0/libparted/Makefile.am.export-align 2009-07-23 19:52:08.000000000 +0200 -+++ parted-1.9.0/libparted/Makefile.am 2009-10-29 15:19:31.000000000 +0100 ++++ parted-1.9.0/libparted/Makefile.am 2009-11-03 11:30:46.000000000 +0100 @@ -50,6 +50,7 @@ libparted_la_LIBADD = \ $(DL_LIBS) \ $(DM_LIBS) \ @@ -100,8 +100,8 @@ diff -up parted-1.9.0/libparted/Makefile.am.export-align parted-1.9.0/libparted/ EXTRA_DIST = mbr.s diff -up parted-1.9.0/libparted/arch/linux.c.export-align parted-1.9.0/libparted/arch/linux.c ---- parted-1.9.0/libparted/arch/linux.c.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/libparted/arch/linux.c 2009-10-29 15:22:59.000000000 +0100 +--- parted-1.9.0/libparted/arch/linux.c.export-align 2009-11-03 11:30:46.000000000 +0100 ++++ parted-1.9.0/libparted/arch/linux.c 2009-11-03 11:30:46.000000000 +0100 @@ -598,7 +598,24 @@ _have_kern26 () kver = _get_linux_version(); return have_kern26 = kver >= KERNEL_VERSION (2,6,0) ? 1 : 0; @@ -128,7 +128,7 @@ diff -up parted-1.9.0/libparted/arch/linux.c.export-align parted-1.9.0/libparted static void _device_set_sector_size (PedDevice* dev) { -@@ -626,6 +645,9 @@ _device_set_sector_size (PedDevice* dev) +@@ -626,6 +643,9 @@ _device_set_sector_size (PedDevice* dev) dev->sector_size = (long long)sector_size; } @@ -138,7 +138,7 @@ diff -up parted-1.9.0/libparted/arch/linux.c.export-align parted-1.9.0/libparted /* Return PED_SECTOR_SIZE_DEFAULT for DASDs. */ if (dev->type == PED_DEVICE_DASD) { dev->sector_size = PED_SECTOR_SIZE_DEFAULT; -@@ -1237,6 +1235,10 @@ linux_new (const char* path) +@@ -1215,6 +1235,10 @@ linux_new (const char* path) goto error_free_path; arch_specific = LINUX_SPECIFIC (dev); arch_specific->dmtype = NULL; @@ -149,7 +149,7 @@ diff -up parted-1.9.0/libparted/arch/linux.c.export-align parted-1.9.0/libparted dev->open_count = 0; dev->read_only = 0; -@@ -1335,7 +1357,12 @@ error: +@@ -1335,7 +1359,12 @@ error: static void linux_destroy (PedDevice* dev) { @@ -163,7 +163,7 @@ diff -up parted-1.9.0/libparted/arch/linux.c.export-align parted-1.9.0/libparted free (dev->arch_specific); free (dev->path); free (dev->model); -@@ -2446,6 +2473,34 @@ linux_disk_commit (PedDisk* disk) +@@ -2446,6 +2475,34 @@ linux_disk_commit (PedDisk* disk) return 1; } @@ -198,7 +198,7 @@ diff -up parted-1.9.0/libparted/arch/linux.c.export-align parted-1.9.0/libparted static PedDeviceArchOps linux_dev_ops = { _new: linux_new, destroy: linux_destroy, -@@ -2459,7 +2514,11 @@ static PedDeviceArchOps linux_dev_ops = +@@ -2459,7 +2516,11 @@ static PedDeviceArchOps linux_dev_ops = check: linux_check, sync: linux_sync, sync_fast: linux_sync_fast, @@ -213,7 +213,7 @@ diff -up parted-1.9.0/libparted/arch/linux.c.export-align parted-1.9.0/libparted PedDiskArchOps linux_disk_ops = { diff -up parted-1.9.0/libparted/arch/linux.h.export-align parted-1.9.0/libparted/arch/linux.h --- parted-1.9.0/libparted/arch/linux.h.export-align 2009-07-23 19:52:08.000000000 +0200 -+++ parted-1.9.0/libparted/arch/linux.h 2009-10-29 15:19:31.000000000 +0100 ++++ parted-1.9.0/libparted/arch/linux.h 2009-11-03 11:30:46.000000000 +0100 @@ -22,6 +22,10 @@ # include #endif @@ -238,7 +238,7 @@ diff -up parted-1.9.0/libparted/arch/linux.h.export-align parted-1.9.0/libparted #endif /* PED_ARCH_LINUX_H_INCLUDED */ diff -up parted-1.9.0/libparted/device.c.export-align parted-1.9.0/libparted/device.c --- parted-1.9.0/libparted/device.c.export-align 2009-07-23 19:52:08.000000000 +0200 -+++ parted-1.9.0/libparted/device.c 2009-10-29 15:19:31.000000000 +0100 ++++ parted-1.9.0/libparted/device.c 2009-11-03 11:30:46.000000000 +0100 @@ -416,33 +416,146 @@ ped_device_sync_fast (PedDevice* dev) } @@ -398,8 +398,8 @@ diff -up parted-1.9.0/libparted/device.c.export-align parted-1.9.0/libparted/dev /** @} */ diff -up parted-1.9.0/libparted/disk.c.export-align parted-1.9.0/libparted/disk.c ---- parted-1.9.0/libparted/disk.c.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/libparted/disk.c 2009-10-29 15:19:31.000000000 +0100 +--- parted-1.9.0/libparted/disk.c.export-align 2009-11-03 11:30:46.000000000 +0100 ++++ parted-1.9.0/libparted/disk.c 2009-11-03 11:30:46.000000000 +0100 @@ -703,6 +703,26 @@ ped_disk_get_max_supported_partition_cou } @@ -428,9 +428,9 @@ diff -up parted-1.9.0/libparted/disk.c.export-align parted-1.9.0/libparted/disk. * * For example, MacIntosh partition maps can have different sizes, diff -up parted-1.9.0/libparted/labels/dasd.c.export-align parted-1.9.0/libparted/labels/dasd.c ---- parted-1.9.0/libparted/labels/dasd.c.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/libparted/labels/dasd.c 2009-10-29 15:19:31.000000000 +0100 -@@ -856,6 +856,16 @@ dasd_get_max_supported_partition_count ( +--- parted-1.9.0/libparted/labels/dasd.c.export-align 2009-11-03 11:30:46.000000000 +0100 ++++ parted-1.9.0/libparted/labels/dasd.c 2009-11-03 11:32:19.000000000 +0100 +@@ -646,6 +646,16 @@ dasd_get_max_supported_partition_count ( return true; } @@ -447,17 +447,17 @@ diff -up parted-1.9.0/libparted/labels/dasd.c.export-align parted-1.9.0/libparte static PedConstraint* _primary_constraint (PedDisk* disk) { -@@ -1041,6 +1051,7 @@ static PedDiskOps dasd_disk_ops = { +@@ -830,6 +840,7 @@ static PedDiskOps dasd_disk_ops = { alloc_metadata: dasd_alloc_metadata, 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 }; - diff -up parted-1.9.0/libparted/labels/mac.c.export-align parted-1.9.0/libparted/labels/mac.c ---- parted-1.9.0/libparted/labels/mac.c.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/libparted/labels/mac.c 2009-10-29 15:19:31.000000000 +0100 +--- parted-1.9.0/libparted/labels/mac.c.export-align 2009-07-23 19:52:08.000000000 +0200 ++++ parted-1.9.0/libparted/labels/mac.c 2009-11-03 11:30:46.000000000 +0100 @@ -1375,6 +1375,14 @@ mac_partition_get_name (const PedPartiti return mac_data->volume_name; } @@ -484,8 +484,8 @@ diff -up parted-1.9.0/libparted/labels/mac.c.export-align parted-1.9.0/libparted static PedDiskType mac_disk_type = { diff -up parted-1.9.0/libparted/labels/pc98.c.export-align parted-1.9.0/libparted/labels/pc98.c ---- parted-1.9.0/libparted/labels/pc98.c.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/libparted/labels/pc98.c 2009-10-29 15:19:31.000000000 +0100 +--- parted-1.9.0/libparted/labels/pc98.c.export-align 2009-07-23 19:52:08.000000000 +0200 ++++ parted-1.9.0/libparted/labels/pc98.c 2009-11-03 11:30:46.000000000 +0100 @@ -720,6 +720,15 @@ pc98_partition_get_name (const PedPartit return pc98_data->name; } @@ -513,8 +513,8 @@ diff -up parted-1.9.0/libparted/labels/pc98.c.export-align parted-1.9.0/libparte static PedDiskType pc98_disk_type = { diff -up parted-1.9.0/libparted/labels/rdb.c.export-align parted-1.9.0/libparted/labels/rdb.c ---- parted-1.9.0/libparted/labels/rdb.c.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/libparted/labels/rdb.c 2009-10-29 15:19:31.000000000 +0100 +--- parted-1.9.0/libparted/labels/rdb.c.export-align 2009-07-23 19:52:08.000000000 +0200 ++++ parted-1.9.0/libparted/labels/rdb.c 2009-11-03 11:30:46.000000000 +0100 @@ -1024,6 +1024,15 @@ amiga_partition_get_name (const PedParti return _amiga_get_bstr(partition->pb_DriveName); } @@ -542,8 +542,8 @@ diff -up parted-1.9.0/libparted/labels/rdb.c.export-align parted-1.9.0/libparted static PedDiskType amiga_disk_type = { diff -up parted-1.9.0/libparted/labels/sun.c.export-align parted-1.9.0/libparted/labels/sun.c ---- parted-1.9.0/libparted/labels/sun.c.export-align 2009-10-29 15:19:31.000000000 +0100 -+++ parted-1.9.0/libparted/labels/sun.c 2009-10-29 15:19:31.000000000 +0100 +--- parted-1.9.0/libparted/labels/sun.c.export-align 2009-07-23 19:52:08.000000000 +0200 ++++ parted-1.9.0/libparted/labels/sun.c 2009-11-03 11:30:46.000000000 +0100 @@ -677,6 +677,15 @@ sun_get_max_primary_partition_count (con return SUN_DISK_MAXPARTITIONS; } diff --git a/parted-1.9.0-new-duplicate.patch b/parted-1.9.0-new-duplicate.patch deleted file mode 100644 index 1659d4a..0000000 --- a/parted-1.9.0-new-duplicate.patch +++ /dev/null @@ -1,199 +0,0 @@ -From 3b3113cff84f89ae6a64e195acb3423125f6d681 Mon Sep 17 00:00:00 2001 -From: Joel Granados Moreno -Date: Thu, 16 Jul 2009 18:35:30 +0200 -Subject: [PATCH] Add disk as an argument to partition_duplicate. - -The disk is needed to provide some context when creating the duplicate -partition. The disk is needed by the dasd type labels. - -* include/parted/disk.h (partition_duplicate): Add the disk to the -function definition -* libparted/disk.c (_add_duplicate_part): Pass the "new disk" to the -partition_duplicate function. -* libparted/labels/aix.c (aix_partition_duplicate): Comply with the new -partition_duplicate function definition. -* libparted/labels/bsd.c (bsd_partition_duplicate): Likewise -* libparted/labels/dos.c (msdos_partition_duplicate): Likewise -* libparted/labels/dvh.c (dvh_partition_duplicate): Likewise -* libparted/labels/gpt.c (gpt_partition_duplicate): Likewise -* libparted/labels/loop.c (loop_partition_duplicate): Likewise -* libparted/labels/mac.c (mac_partition_duplicate): Likewise -* libparted/labels/pc98.c (pc98_partition_duplicate): Likewise -* libparted/labels/rdb.c (amiga_partition_duplicate): Likewise -* libparted/labels/sun.c (sun_partition_duplicate): Likewise ---- - include/parted/disk.h | 4 +++- - libparted/disk.c | 2 +- - libparted/labels/aix.c | 2 +- - libparted/labels/bsd.c | 2 +- - libparted/labels/dos.c | 2 +- - libparted/labels/dvh.c | 2 +- - libparted/labels/gpt.c | 2 +- - libparted/labels/loop.c | 2 +- - libparted/labels/mac.c | 2 +- - libparted/labels/pc98.c | 2 +- - libparted/labels/rdb.c | 2 +- - libparted/labels/sun.c | 2 +- - 12 files changed, 14 insertions(+), 12 deletions(-) - -diff --git a/include/parted/disk.h b/include/parted/disk.h -index 664c388..7548be8 100644 ---- a/include/parted/disk.h -+++ b/include/parted/disk.h -@@ -189,7 +189,9 @@ struct _PedDiskOps { - const PedFileSystemType* fs_type, - PedSector start, - PedSector end); -- PedPartition* (*partition_duplicate) (const PedPartition* part); -+ /* disk is the result of duplicate (the new disk). Can be NULL */ -+ PedPartition* (*partition_duplicate) (const PedPartition* part, -+ PedDisk* disk); - void (*partition_destroy) (PedPartition* part); - int (*partition_set_system) (PedPartition* part, - const PedFileSystemType* fs_type); -diff --git a/libparted/disk.c b/libparted/disk.c -index 44a2f2f..99cb563 100644 ---- a/libparted/disk.c -+++ b/libparted/disk.c -@@ -227,7 +227,7 @@ _add_duplicate_part (PedDisk* disk, PedPartition* old_part) - PedPartition* new_part; - int ret; - -- new_part = disk->type->ops->partition_duplicate (old_part); -+ new_part = disk->type->ops->partition_duplicate (old_part, disk); - if (!new_part) - goto error; - new_part->disk = disk; -diff --git a/libparted/labels/aix.c b/libparted/labels/aix.c -index de81270..a544cbb 100644 ---- a/libparted/labels/aix.c -+++ b/libparted/labels/aix.c -@@ -165,7 +165,7 @@ aix_partition_new (const PedDisk* disk, PedPartitionType part_type, - } - - static PedPartition* --aix_partition_duplicate (const PedPartition* part) -+aix_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - ped_exception_throw (PED_EXCEPTION_NO_FEATURE, - PED_EXCEPTION_CANCEL, -diff --git a/libparted/labels/bsd.c b/libparted/labels/bsd.c -index 3d6b5ab..62634a6 100644 ---- a/libparted/labels/bsd.c -+++ b/libparted/labels/bsd.c -@@ -417,7 +417,7 @@ error: - } - - static PedPartition* --bsd_partition_duplicate (const PedPartition* part) -+bsd_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* new_part; - BSDPartitionData* new_bsd_data; -diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c -index e7d416d..0987c70 100644 ---- a/libparted/labels/dos.c -+++ b/libparted/labels/dos.c -@@ -1215,7 +1215,7 @@ error: - } - - static PedPartition* --msdos_partition_duplicate (const PedPartition* part) -+msdos_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* new_part; - DosPartitionData* new_dos_data; -diff --git a/libparted/labels/dvh.c b/libparted/labels/dvh.c -index 93de8f9..c4de55a 100644 ---- a/libparted/labels/dvh.c -+++ b/libparted/labels/dvh.c -@@ -534,7 +534,7 @@ error: - } - - static PedPartition* --dvh_partition_duplicate (const PedPartition* part) -+dvh_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* result; - DVHPartData* part_data = part->disk_specific; -diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c -index 1d7f0c5..b5c8cdb 100644 ---- a/libparted/labels/gpt.c -+++ b/libparted/labels/gpt.c -@@ -1212,7 +1212,7 @@ error: - } - - static PedPartition* --gpt_partition_duplicate (const PedPartition* part) -+gpt_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* result; - GPTPartitionData* part_data = part->disk_specific; -diff --git a/libparted/labels/loop.c b/libparted/labels/loop.c -index 10ba29e..60c22eb 100644 ---- a/libparted/labels/loop.c -+++ b/libparted/labels/loop.c -@@ -201,7 +201,7 @@ loop_partition_new (const PedDisk* disk, PedPartitionType part_type, - } - - static PedPartition* --loop_partition_duplicate (const PedPartition* part) -+loop_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* result; - -diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c -index c1f3dc7..42abd66 100644 ---- a/libparted/labels/mac.c -+++ b/libparted/labels/mac.c -@@ -1154,7 +1154,7 @@ error: - } - - static PedPartition* --mac_partition_duplicate (const PedPartition* part) -+mac_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* new_part; - MacPartitionData* new_mac_data; -diff --git a/libparted/labels/pc98.c b/libparted/labels/pc98.c -index f392bea..7fe23ab 100644 ---- a/libparted/labels/pc98.c -+++ b/libparted/labels/pc98.c -@@ -568,7 +568,7 @@ error: - } - - static PedPartition* --pc98_partition_duplicate (const PedPartition* part) -+pc98_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* new_part; - PC98PartitionData* new_pc98_data; -diff --git a/libparted/labels/rdb.c b/libparted/labels/rdb.c -index c39230d..e0bb936 100644 ---- a/libparted/labels/rdb.c -+++ b/libparted/labels/rdb.c -@@ -851,7 +851,7 @@ amiga_partition_new (const PedDisk* disk, PedPartitionType part_type, - } - - static PedPartition* --amiga_partition_duplicate (const PedPartition* part) -+amiga_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition *new_part; - struct PartitionBlock *new_amiga_part; -diff --git a/libparted/labels/sun.c b/libparted/labels/sun.c -index 41580a4..1451252 100644 ---- a/libparted/labels/sun.c -+++ b/libparted/labels/sun.c -@@ -500,7 +500,7 @@ error: - } - - static PedPartition* --sun_partition_duplicate (const PedPartition* part) -+sun_partition_duplicate (const PedPartition* part, PedDisk* disk) - { - PedPartition* new_part; - SunPartitionData* new_sun_data; --- -1.6.0.6 - diff --git a/parted.spec b/parted.spec index 601aec6..36bd54f 100644 --- a/parted.spec +++ b/parted.spec @@ -4,7 +4,7 @@ Summary: The GNU disk partition manipulation program Name: parted Version: 1.9.0 -Release: 19%{?dist} +Release: 20%{?dist} License: GPLv3+ Group: Applications/System URL: http://www.gnu.org/software/parted @@ -17,8 +17,6 @@ Patch4: %{name}-1.9.0-pop-push-error.patch Patch5: %{name}-1.9.0-no-cylinder-align.patch Patch6: %{name}-1.9.0-remove-struct-elem.patch Patch7: %{name}-1.9.0-move-function-declarations.patch -Patch8: %{name}-1.9.0-dasd-duplicate.patch -Patch9: %{name}-1.9.0-new-duplicate.patch Patch10: %{name}-1.9.0-handle-dup-error.patch Patch11: %{name}-1.9.0-swap-flag.patch Patch12: %{name}-1.9.0-volkeysize.patch @@ -28,6 +26,7 @@ Patch15: %{name}-1.9.0-dont-touch-part-nodes.patch Patch16: %{name}-1.9.0-ped_partition_is_busy-no-exception.patch Patch17: %{name}-1.9.0-gpt-big-endian.patch Patch18: %{name}-1.9.0-export-alignment-info.patch +Patch19: %{name}-1.9.0-dasd-fixes.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: e2fsprogs-devel @@ -39,6 +38,7 @@ BuildRequires: texinfo BuildRequires: device-mapper-devel BuildRequires: libselinux-devel BuildRequires: libuuid-devel +BuildRequires: libblkid-devel >= 2.17 Requires(post): /sbin/ldconfig Requires(post): /sbin/install-info @@ -72,8 +72,6 @@ Parted library, you need to install this package. %patch5 -p1 -b .no-cylinder-align %patch6 -p1 -b .remove-struct-elem %patch7 -p1 -b .move-function-declarations -%patch8 -p1 -b .dasd-duplicate -%patch9 -p1 -b .new-duplicate %patch10 -p1 -b .handle-dup-error %patch11 -p1 -b .swap-flag %patch12 -p1 -b .volkeysize @@ -83,6 +81,7 @@ Parted library, you need to install this package. %patch16 -p1 -b .ped_partition_is_busy %patch17 -p1 -b .gpt-big-endian %patch18 -p1 -b .export-align +%patch19 -p1 -b .dasd aclocal --force -I m4 autoconf --force autoheader --force @@ -148,6 +147,11 @@ fi %{_exec_prefix}/%{_lib}/pkgconfig/libparted.pc %changelog +* Tue Nov 3 2009 Hans de Goede 1.9.0-20 +- Fix error when creating a fresh dasd disk (#532425) +- Rewrite dasd disk duplication patches, as the old old ones conflicted + with fixing creating a fresh dasd disk + * Fri Oct 30 2009 Hans de Goede 1.9.0-19 - Fix a segfault introduced by -18 when operating on plain files