summaryrefslogtreecommitdiff
path: root/libparted/labels/mac.c
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2008-07-21 15:36:18 +0200
committerJim Meyering <meyering@redhat.com>2009-07-24 15:04:41 +0200
commitf45e33fb9f01029e23e9264945fa6e686d52ca5b (patch)
tree508dca5c60e346a3c86605660354879afc1a53ae /libparted/labels/mac.c
parent8002e26eff48ce9189c7c61151dee89125d93de5 (diff)
downloadparted-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.c54
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;