summaryrefslogtreecommitdiff
path: root/libparted/labels/mac.c
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2008-07-21 22:15:02 +0200
committerJim Meyering <meyering@redhat.com>2009-07-24 15:04:42 +0200
commit8c25d66b88dab495ac662e281fbb4c69d40e68ff (patch)
tree11401803dc5079f3d1d419801f48bc96bd5e11bf /libparted/labels/mac.c
parent9e62f1fe6b88c064694814915fa546eeb4b0b964 (diff)
downloadparted-8c25d66b88dab495ac662e281fbb4c69d40e68ff.tar.gz
mac.c (_disk_analyse_ghost_size): allow >512-byte sector size
* libparted/labels/mac.c (_disk_analyse_ghost_size):
Diffstat (limited to 'libparted/labels/mac.c')
-rw-r--r--libparted/labels/mac.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
index ee91fb3..559cbf9 100644
--- a/libparted/labels/mac.c
+++ b/libparted/labels/mac.c
@@ -737,28 +737,34 @@ static int
_disk_analyse_ghost_size (PedDisk* disk)
{
MacDiskData* mac_disk_data = disk->disk_specific;
- MacRawPartition raw_part;
- int i;
+ void *buf = ped_malloc (disk->dev->sector_size);
+ if (!buf)
+ return 0;
+
+ int i;
+ int found = 0;
for (i = 1; i < 64; i *= 2) {
- if (!ped_device_read (disk->dev, &raw_part, i, 1))
- return 0;
- if (_rawpart_check_signature (&raw_part)
- && !_rawpart_is_void (&raw_part)) {
+ if (!ped_device_read (disk->dev, buf, i, 1))
+ break;
+ if (_rawpart_check_signature (buf)
+ && !_rawpart_is_void (buf)) {
mac_disk_data->ghost_size = i;
- PED_ASSERT (i <= disk->dev->sector_size / 512,
- return 0);
- return 1;
+ PED_ASSERT (i <= disk->dev->sector_size / 512, break);
+ found = 1;
+ break;
}
}
+ free (buf);
#ifndef DISCOVER_ONLY
- ped_exception_throw (
- PED_EXCEPTION_ERROR,
- PED_EXCEPTION_CANCEL,
- _("No valid partition map found."));
+ if (!found)
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("No valid partition map found."));
#endif
- return 0;
+ return found;
}
static int