diff options
author | Jim Meyering <meyering@redhat.com> | 2008-07-21 15:36:18 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-07-24 15:04:41 +0200 |
commit | f45e33fb9f01029e23e9264945fa6e686d52ca5b (patch) | |
tree | 508dca5c60e346a3c86605660354879afc1a53ae /libparted/labels/mac.c | |
parent | 8002e26eff48ce9189c7c61151dee89125d93de5 (diff) | |
download | parted-f45e33fb9f01029e23e9264945fa6e686d52ca5b.tar.gz |
make "mac" partition table support pass the 512-byte ./label tests
* libparted/labels/mac.c (mac_probe, mac_clobber): FIX!
Diffstat (limited to 'libparted/labels/mac.c')
-rw-r--r-- | libparted/labels/mac.c | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c index bb9595c..4f62ff7 100644 --- a/libparted/labels/mac.c +++ b/libparted/labels/mac.c @@ -209,7 +209,7 @@ mac_probe (const PedDevice * dev) if (!ptt_read_sector (dev, 0, &label)) return 0; - int valid = _check_signature ((MacRawDisk *) &label); + int valid = _check_signature (label); free (label); return valid; @@ -351,31 +351,47 @@ mac_free (PedDisk* disk) static int _clobber_part_map (PedDevice* dev) { - MacRawPartition raw_part; - PedSector sector; + void *buf = ped_malloc (dev->sector_size); + if (!buf) + return 0; + int ok = 1; + PedSector sector; for (sector=1; 1; sector++) { - if (!ped_device_read (dev, &raw_part, sector, 1)) - return 0; - if (!_rawpart_check_signature (&raw_part)) - return 1; - memset (&raw_part, 0, 512); - if (!ped_device_write (dev, &raw_part, sector, 1)) - return 0; + if (!ped_device_read (dev, buf, sector, 1)) { + ok = 0; + break; + } + if (!_rawpart_check_signature (buf)) { + ok = 1; + break; + } + memset (buf, 0, dev->sector_size); + if (!ped_device_write (dev, buf, sector, 1)) { + ok = 0; + break; + } } + free (buf); + return ok; } static int mac_clobber (PedDevice* dev) { - MacRawDisk raw_disk; - - if (!ped_device_read (dev, &raw_disk, 0, 1)) + void *buf; + if (!ptt_read_sector (dev, 0, &buf)) return 0; - if (!_check_signature (&raw_disk)) + + if (!_check_signature (buf)) { + free (buf); return 0; - memset (&raw_disk, 0, 512); - if (!ped_device_write (dev, &raw_disk, 0, 1)) + } + + memset (buf, 0, dev->sector_size); + bool ok = ped_device_write (dev, buf, 0, 1); + free (buf); + if (!ok) return 0; return _clobber_part_map (dev); @@ -1082,11 +1098,11 @@ mac_write (PedDisk* disk) goto error; memset (mac_driverdata, 0, sizeof(MacDiskData)); - part_map = (MacRawPartition*) - ped_malloc (mac_disk_data->part_map_entry_count * 512); + size_t pmap_bytes = (mac_disk_data->part_map_entry_count + * disk->dev->sector_size); + part_map = (MacRawPartition*) ped_calloc (pmap_bytes); if (!part_map) goto error_free_driverdata; - memset (part_map, 0, mac_disk_data->part_map_entry_count * 512); /* write (to memory) the "real" partitions */ for (part = ped_disk_next_partition (disk, NULL); part; |