From 98510fcf3976feaf2cf23eee228fdcb09a1119c5 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 19 Apr 2010 12:03:29 +0000 Subject: [PATCH] - Add a flag for detecting diagnostics / recovery partitions (#583626) --- parted-2.2-add-diag-flag-rh583626.patch | 213 ++++++++++++++++++++++++ parted.spec | 8 +- 2 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 parted-2.2-add-diag-flag-rh583626.patch diff --git a/parted-2.2-add-diag-flag-rh583626.patch b/parted-2.2-add-diag-flag-rh583626.patch new file mode 100644 index 0000000..c3534f6 --- /dev/null +++ b/parted-2.2-add-diag-flag-rh583626.patch @@ -0,0 +1,213 @@ +From 0b5140a3400e41b91c5279ab9432cff86bcb2a86 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 19 Apr 2010 13:45:45 +0200 +Subject: [PATCH parted 1/2] dos: Add a partition flag for diagnostics / recovery partitions + +msdos partition tables can contain diagnostics partitions (often used +now a days as system recovery partitions). For some users of libparted +(ie anaconda) it is usefull to know if a dos partition is a regular partition +or a diagnostic partition (see rh bug 534066). + +* include/parted/disk.h(_PedPartitionFlag): Add PED_PARTITION_DIAG +* libparted/disk.c(ped_partition_flag_get_name): Add PED_PARTITION_DIAG +* libparted/labels/dos.c: Add support for PED_PARTITION_DIAG flag +--- + include/parted/disk.h | 5 +++-- + libparted/disk.c | 2 ++ + libparted/labels/dos.c | 33 +++++++++++++++++++++++++++++++++ + 4 files changed, 41 insertions(+), 2 deletions(-) + +diff --git a/include/parted/disk.h b/include/parted/disk.h +index dea4d19..f11e393 100644 +--- a/include/parted/disk.h ++++ b/include/parted/disk.h +@@ -68,10 +68,11 @@ enum _PedPartitionFlag { + PED_PARTITION_PREP=10, + PED_PARTITION_MSFT_RESERVED=11, + PED_PARTITION_BIOS_GRUB=12, +- PED_PARTITION_APPLE_TV_RECOVERY=13 ++ PED_PARTITION_APPLE_TV_RECOVERY=13, ++ PED_PARTITION_DIAG=14 + }; + #define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT +-#define PED_PARTITION_LAST_FLAG PED_PARTITION_APPLE_TV_RECOVERY ++#define PED_PARTITION_LAST_FLAG PED_PARTITION_DIAG + + enum _PedDiskTypeFeature { + PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */ +diff --git a/libparted/disk.c b/libparted/disk.c +index f4c0d74..7a60a09 100644 +--- a/libparted/disk.c ++++ b/libparted/disk.c +@@ -2441,6 +2441,8 @@ ped_partition_flag_get_name (PedPartitionFlag flag) + return N_("msftres"); + case PED_PARTITION_APPLE_TV_RECOVERY: + return N_("atvrecv"); ++ case PED_PARTITION_DIAG: ++ return N_("diag"); + + default: + ped_exception_throw ( +diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c +index 6fb4aef..17209da 100644 +--- a/libparted/labels/dos.c ++++ b/libparted/labels/dos.c +@@ -157,6 +157,7 @@ typedef struct { + int lba; + int palo; + int prep; ++ int diag; + OrigState* orig; /* used for CHS stuff */ + } DosPartitionData; + +@@ -835,6 +836,8 @@ raw_part_parse (const PedDisk* disk, const DosRawPartition* raw_part, + dos_data->lba = raw_part_is_lba (raw_part); + dos_data->palo = raw_part->type == PARTITION_PALO; + dos_data->prep = raw_part->type == PARTITION_PREP; ++ dos_data->diag = raw_part->type == PARTITION_COMPAQ_DIAG || ++ raw_part->type == PARTITION_DELL_DIAG; + dos_data->orig = ped_malloc (sizeof (OrigState)); + if (!dos_data->orig) { + ped_partition_destroy (part); +@@ -1236,6 +1239,7 @@ msdos_partition_new (const PedDisk* disk, PedPartitionType part_type, + dos_data->lba = 0; + dos_data->palo = 0; + dos_data->prep = 0; ++ dos_data->diag = 0; + } else { + part->disk_specific = NULL; + } +@@ -1270,6 +1274,7 @@ msdos_partition_duplicate (const PedPartition* part) + new_dos_data->lba = old_dos_data->lba; + new_dos_data->palo = old_dos_data->palo; + new_dos_data->prep = old_dos_data->prep; ++ new_dos_data->diag = old_dos_data->diag; + + if (old_dos_data->orig) { + new_dos_data->orig = ped_malloc (sizeof (OrigState)); +@@ -1317,6 +1322,7 @@ msdos_partition_set_system (PedPartition* part, + dos_data->lvm = 0; + dos_data->palo = 0; + dos_data->prep = 0; ++ dos_data->diag = 0; + if (dos_data->lba) + dos_data->system = PARTITION_EXT_LBA; + else +@@ -1340,6 +1346,14 @@ msdos_partition_set_system (PedPartition* part, + dos_data->system = PARTITION_PREP; + return 1; + } ++ if (dos_data->diag) { ++ /* Don't change the system if it already is a diag type, ++ otherwise use Compaq as almost all vendors use that. */ ++ if (dos_data->system != PARTITION_COMPAQ_DIAG && ++ dos_data->system != PARTITION_DELL_DIAG) ++ dos_data->system = PARTITION_COMPAQ_DIAG; ++ return 1; ++ } + + if (!fs_type) + dos_data->system = PARTITION_LINUX; +@@ -1415,6 +1429,7 @@ msdos_partition_set_flag (PedPartition* part, + dos_data->lvm = 0; + dos_data->palo = 0; + dos_data->prep = 0; ++ dos_data->diag = 0; + } + dos_data->raid = state; + return ped_partition_set_system (part, part->fs_type); +@@ -1425,6 +1440,7 @@ msdos_partition_set_flag (PedPartition* part, + dos_data->raid = 0; + dos_data->palo = 0; + dos_data->prep = 0; ++ dos_data->diag = 0; + } + dos_data->lvm = state; + return ped_partition_set_system (part, part->fs_type); +@@ -1438,6 +1454,7 @@ msdos_partition_set_flag (PedPartition* part, + dos_data->hidden = 0; + dos_data->raid = 0; + dos_data->lvm = 0; ++ dos_data->diag = 0; + } + dos_data->palo = state; + return ped_partition_set_system (part, part->fs_type); +@@ -1447,10 +1464,22 @@ msdos_partition_set_flag (PedPartition* part, + dos_data->hidden = 0; + dos_data->raid = 0; + dos_data->lvm = 0; ++ dos_data->diag = 0; + } + dos_data->prep = state; + return ped_partition_set_system (part, part->fs_type); + ++ case PED_PARTITION_DIAG: ++ if (state) { ++ dos_data->hidden = 0; ++ dos_data->raid = 0; ++ dos_data->lvm = 0; ++ dos_data->palo = 0; ++ dos_data->prep = 0; ++ } ++ dos_data->diag = state; ++ return ped_partition_set_system (part, part->fs_type); ++ + default: + return 0; + } +@@ -1490,6 +1519,9 @@ msdos_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) + case PED_PARTITION_PREP: + return dos_data->prep; + ++ case PED_PARTITION_DIAG: ++ return dos_data->diag; ++ + default: + return 0; + } +@@ -1512,6 +1544,7 @@ msdos_partition_is_flag_available (const PedPartition* part, + case PED_PARTITION_LBA: + case PED_PARTITION_PALO: + case PED_PARTITION_PREP: ++ case PED_PARTITION_DIAG: + return 1; + + default: +-- +1.7.0.1 + +From f6def89ad61f2c13d344763137e551adf6a23526 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 19 Apr 2010 13:51:27 +0200 +Subject: [PATCH parted 2/2] dos: Fix prep / palo flag handling + +Setting the prep flag was not clearing the palo flag and vica versa +* libparted/labels/dos.c(msdos_partition_set_flag): Fix prep / palo +flag handling. +--- + libparted/labels/dos.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c +index 17209da..c0190a1 100644 +--- a/libparted/labels/dos.c ++++ b/libparted/labels/dos.c +@@ -1454,6 +1454,7 @@ msdos_partition_set_flag (PedPartition* part, + dos_data->hidden = 0; + dos_data->raid = 0; + dos_data->lvm = 0; ++ dos_data->prep = 0; + dos_data->diag = 0; + } + dos_data->palo = state; +@@ -1464,6 +1465,7 @@ msdos_partition_set_flag (PedPartition* part, + dos_data->hidden = 0; + dos_data->raid = 0; + dos_data->lvm = 0; ++ dos_data->palo = 0; + dos_data->diag = 0; + } + dos_data->prep = state; +-- +1.7.0.1 + diff --git a/parted.spec b/parted.spec index 10481ca..f604547 100644 --- a/parted.spec +++ b/parted.spec @@ -4,7 +4,7 @@ Summary: The GNU disk partition manipulation program Name: parted Version: 2.2 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv3+ Group: Applications/System URL: http://www.gnu.org/software/parted @@ -15,6 +15,8 @@ Source0: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz # Don't cache the resolving of /dev/mapper/... symlinks, they may point # to a different /dev/dm-# by the time we use the cached result. Patch0: parted-dev-mapper-symlink-rh577824.patch +# Add a partition flag for detecting diagnostics / recovery partitions +Patch1: parted-2.2-add-diag-flag-rh583626.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: e2fsprogs-devel @@ -55,6 +57,7 @@ Parted library, you need to install this package. %prep %setup -q %patch0 -p1 +%patch1 -p1 iconv -f ISO-8859-1 -t UTF8 AUTHORS > tmp; touch -r AUTHORS tmp; mv tmp AUTHORS @@ -130,6 +133,9 @@ fi %changelog +* Mon Apr 19 2010 Hans de Goede 2.2-3 +- Add a flag for detecting diagnostics / recovery partitions (#583626) + * Tue Apr 6 2010 Hans de Goede 2.2-2 - Parted should not canonicalize symlinks under /dev/mapper (#577824)