[Parted-maintainers] Bug#491797: libparted: trashes iPod Nano firmware partition
Ben Hutchings
ben at decadent.org.uk
Sun Oct 5 23:36:46 BST 2008
Here's a patch for this. I constructed a table with two FAT partitions
on a memory card, hid one partition by changing its type code, and then
verified that fatresize would destroy the hidden partition but would
leave it intact once I applied this patch to libparted.
I am not going to NMU because I'm unsure whether it's generally a good
idea to leave hidden partitions untouched. If it is, please apply this.
Ben.
#! /bin/sh /usr/share/dpatch/dpatch-run
## preserve-hidden-parts.dpatch by Ben Hutchings <ben at decadent.org.uk>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: This is an attempt to fix bug #491797. It changes the partition
## DP: rewriting code to set only the type code in entries for empty or
## DP: hidden partitions, so that hidden partitions should be preserved
## DP: so long as we don't resize another partition over them.
@DPATCH@
diff -urNad parted-1.8.8.git.2008.03.24~/libparted/labels/dos.c parted-1.8.8.git.2008.03.24/libparted/labels/dos.c
--- parted-1.8.8.git.2008.03.24~/libparted/labels/dos.c 2008-10-05 22:24:07.000000000 +0100
+++ parted-1.8.8.git.2008.03.24/libparted/labels/dos.c 2008-10-05 22:43:43.000000000 +0100
@@ -1148,13 +1148,17 @@
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) {
+ table.partitions [i - 1].type = PARTITION_EMPTY;
continue;
+ }
if (!fill_raw_part (&table.partitions [i - 1], part, 0))
return 0;
--- END ---
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.alioth.debian.org/pipermail/parted-maintainers/attachments/20081005/82da1a43/attachment.pgp
More information about the Parted-maintainers
mailing list