Petr Uzel wrote: > Hi, > attached patch seems to fix the problem for me. I'd appreciate any > feedback. > > Thanks! > > --- > libparted/labels/dos.c | 6 ++++-- > 1 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c > index cb7e45e..a300a87 100644 > --- a/libparted/labels/dos.c > +++ b/libparted/labels/dos.c > @@ -1059,7 +1059,8 @@ write_ext_table (const PedDisk* disk, > > lba_offset = ped_disk_extended_partition (disk)->geom.start; > > - memset (&table, 0, sizeof (DosRawTable)); > + ped_device_read (disk->dev, &table, sector, 1); > + memset (&(table.partitions), 0, 4 * sizeof(DosRawPartition)); > table.magic = PED_CPU_TO_LE16 (MSDOS_MAGIC); > > if (!fill_raw_part (&table.partitions[0], logical, sector)) > @@ -1093,7 +1094,8 @@ write_empty_table (const PedDisk* disk, PedSector > sector) > > PED_ASSERT (disk != NULL, return 0); > > - memset (&table, 0, sizeof (DosRawTable)); > + ped_device_read (disk->dev, &table, sector, 1); > + memset (&(table.partitions), 0, 4 * sizeof(DosRawPartition)); > table.magic = PED_CPU_TO_LE16 (MSDOS_MAGIC); > > return ped_device_write (disk->dev, (void*) &table, sector, 1);
I thought that valid boot sectors have a checksum or some kind of signature bytes. It might be worth verifying that it is a valid boot sector before blindly using it. If it is not a valid boot sector, one might as well fill it with zeros. _______________________________________________ parted-devel mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/parted-devel

