diff options
author | Jim Meyering <meyering@redhat.com> | 2008-07-21 22:15:02 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-07-24 15:04:42 +0200 |
commit | 8c25d66b88dab495ac662e281fbb4c69d40e68ff (patch) | |
tree | 11401803dc5079f3d1d419801f48bc96bd5e11bf /libparted/labels/mac.c | |
parent | 9e62f1fe6b88c064694814915fa546eeb4b0b964 (diff) | |
download | parted-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.c | 34 |
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 |