I applied a slightly different patch from the one I previously posted to
this bug report.  My first patch changed the behaviour when rewriting
the partition table to write only the type field of empty/hidden
partitions.  This would effectively *create* hidden partitions when
partitions are removed, which is not what we want.  The patch I have
actually applied makes a smaller change, which is to leave partition
entries unchanged if they are not used and they were already marked
empty/hidden.

Ben.

diff -u parted-1.8.8.git.2008.03.24/debian/changelog 
parted-1.8.8.git.2008.03.24/debian/changelog
--- parted-1.8.8.git.2008.03.24/debian/changelog
+++ parted-1.8.8.git.2008.03.24/debian/changelog
@@ -1,3 +1,11 @@
+parted (1.8.8.git.2008.03.24-11.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Preserve hidden partitions in DOS-format partition tables if they are not
+    explicitly replaced. Closes: #491797
+
+ -- Ben Hutchings <[EMAIL PROTECTED]>  Mon, 24 Nov 2008 01:28:08 +0000
+
 parted (1.8.8.git.2008.03.24-11) unstable; urgency=low
 
   * Add patch to avoid using partition names for loop devices. Thanks to
diff -u parted-1.8.8.git.2008.03.24/debian/patches/00list 
parted-1.8.8.git.2008.03.24/debian/patches/00list
--- parted-1.8.8.git.2008.03.24/debian/patches/00list
+++ parted-1.8.8.git.2008.03.24/debian/patches/00list
@@ -7,6 +7,7 @@
 #kfreebsd-gnu
 parted-dmraid
 unpartitioned-disks
+preserve-hidden-parts
 
 # Will also stay debian specific, but depends on some of the above :/
 sparc-fix-raid
only in patch2:
unchanged:
--- parted-1.8.8.git.2008.03.24.orig/debian/patches/preserve-hidden-parts.dpatch
+++ parted-1.8.8.git.2008.03.24/debian/patches/preserve-hidden-parts.dpatch
@@ -0,0 +1,35 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## preserve-hidden-parts.dpatch by Ben Hutchings <[EMAIL PROTECTED]>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This is a fix for bug #491797.  It changes the DOS partition
+## DP: rewriting code to avoid overwriting empty or hidden primary
+## DP: partitions so long as their entries aren't reused.  This makes
+## DP: fatresize and similar front-ends safe to use in the presence of
+## DP: hidden partitions.
+
[EMAIL PROTECTED]@
+--- a/libparted/labels/dos.c
++++ b/libparted/labels/dos.c
+@@ -1148,13 +1148,18 @@
+       if (!table.mbr_signature)
+               table.mbr_signature = generate_random_id();
+ 
+-      memset (table.partitions, 0, sizeof (DosRawPartition) * 4);
+-      table.magic = PED_CPU_TO_LE16 (MSDOS_MAGIC);
++      if (table.magic != PED_CPU_TO_LE16 (MSDOS_MAGIC)) {
++              memset (table.partitions, 0, sizeof (DosRawPartition) * 4);
++              table.magic = PED_CPU_TO_LE16 (MSDOS_MAGIC);
++      }
+ 
+       for (i=1; i<=4; 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))
+                       return 0;

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to