summaryrefslogtreecommitdiffstats
path: root/debian/patches/preserve-hidden-parts.patch
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/patches/preserve-hidden-parts.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/debian/patches/preserve-hidden-parts.patch b/debian/patches/preserve-hidden-parts.patch
new file mode 100644
index 0000000..e70378b
--- /dev/null
+++ b/debian/patches/preserve-hidden-parts.patch
@@ -0,0 +1,45 @@
+From 028c790ccdd95ef57a0b53404a32606d2e6a84ba Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 28 Mar 2014 17:09:40 +0000
+Subject: Avoid overwriting empty or hidden partitions
+
+It changes the DOS partition rewriting code to avoid overwriting empty
+or hidden primary partitions so long as their entries aren't reused.
+This makes fatresize and similar front-ends safe to use in the presence
+of hidden partitions.
+
+Forwarded: http://lists.gnu.org/archive/html/bug-parted/2008-10/msg00005.html
+Bug-Debian: http://bugs.debian.org/491797
+Last-Update: 2010-02-02
+
+Patch-Name: preserve-hidden-parts.patch
+---
+ libparted/labels/dos.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
+index e6a01059..256f365d 100644
+--- a/libparted/labels/dos.c
++++ b/libparted/labels/dos.c
+@@ -1452,13 +1452,18 @@ msdos_write (const PedDisk* disk)
+ if (!table->mbr_signature)
+ table->mbr_signature = generate_random_uint32 ();
+
+- memset (table->partitions, 0, sizeof (table->partitions));
+- table->magic = PED_CPU_TO_LE16 (MSDOS_MAGIC);
++ if (table->magic != PED_CPU_TO_LE16 (MSDOS_MAGIC)) {
++ memset (table->partitions, 0, sizeof (table->partitions));
++ table->magic = PED_CPU_TO_LE16 (MSDOS_MAGIC);
++ }
+
+ for (i=1; i<=DOS_N_PRI_PARTITIONS; i++) {
+ part = ped_disk_get_partition (disk, i);
+- if (!part)
++ if (!part) {
++ if (table->partitions [i - 1].type != PARTITION_EMPTY)
++ memset (&table->partitions [i - 1], 0, sizeof (DosRawPartition));
+ continue;
++ }
+
+ if (!fill_raw_part (&table->partitions [i - 1], part, 0))
+ goto write_fail;