diff --git a/.gitignore b/.gitignore index 388f948..bf0e91b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ parted-2.3.tar.xz parted-2.3.tar.xz.sig +clog diff --git a/parted-2.3-mac-logical-sector-size.patch b/parted-2.3-mac-logical-sector-size.patch new file mode 100644 index 0000000..2d42185 --- /dev/null +++ b/parted-2.3-mac-logical-sector-size.patch @@ -0,0 +1,106 @@ +From 325b06dae4dff1751d6c5f28506def0786a1a1c9 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Thu, 16 Dec 2010 15:37:32 -0500 +Subject: [PATCH] Improve support for mac partition tables with logical sector size != 512 + +On mac partition tables which specify a sector size larger than the +physical sector size, we need to reallocate the buffer after we +determine the correct sector size. + +This is a normal condition when CD is used with Apple partitions (for +example, the USB rescue stick for the MacBookAir3,1), and then an image +(analogous to an .iso image) is created, so also don't raise an exception in +_disk_analyse_block_size() when we find that. + +Also simplify the code in _disk_analyse_block_size() a bit since there's no +reason to ever do the byteswapping more than once or convert everything to +512-byte multiples since we neither load nor store it that way. +--- + libparted/labels/mac.c | 44 ++++++++++++++++++++++++++------------------ + 1 files changed, 26 insertions(+), 18 deletions(-) + +diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c +index 49a236e..418343e 100644 +--- a/libparted/labels/mac.c ++++ b/libparted/labels/mac.c +@@ -643,35 +643,22 @@ _rawpart_get_partmap_size (MacRawPartition* raw_part, PedDisk* disk) + static int + _disk_analyse_block_size (PedDisk* disk, MacRawDisk* raw_disk) + { +- PedSector block_size; ++ PedSector block_size = PED_BE16_TO_CPU(raw_disk->block_size); + +- if (PED_BE16_TO_CPU (raw_disk->block_size) % 512) { ++ if (block_size % 512) { + #ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Weird block size on device descriptor: %d bytes is " + "not divisible by 512."), +- (int) PED_BE16_TO_CPU (raw_disk->block_size)); ++ (int) block_size); + #endif + goto error; + } + +- block_size = PED_BE16_TO_CPU (raw_disk->block_size) / 512; +- if (block_size != disk->dev->sector_size / 512) { +-#ifndef DISCOVER_ONLY +- if (ped_exception_throw ( +- PED_EXCEPTION_WARNING, +- PED_EXCEPTION_IGNORE_CANCEL, +- _("The driver descriptor says the physical block size " +- "is %d bytes, but Linux says it is %d bytes."), +- (int) block_size * 512, +- (int) disk->dev->sector_size) +- != PED_EXCEPTION_IGNORE) +- goto error; +-#endif +- disk->dev->sector_size = block_size * 512; +- } ++ if (block_size != disk->dev->sector_size) ++ disk->dev->sector_size = block_size; + + return 1; + +@@ -729,6 +716,7 @@ mac_read (PedDisk* disk) + PedPartition* part; + int num; + PedSector ghost_size; ++ PedSector sector_size; + PedConstraint* constraint_exact; + int last_part_entry_num = 0; + +@@ -746,8 +734,28 @@ mac_read (PedDisk* disk) + if (!_check_signature (raw_disk)) + goto error; + ++ sector_size = disk->dev->sector_size; + if (!_disk_analyse_block_size (disk, raw_disk)) + goto error; ++ ++ /* If dev->sector_size changed when we did ptt_read_sector(), ++ then the buffer size is wrong and we'll take a segfault ++ down the line unless we re-allocate it here. */ ++ if (disk->dev->sector_size != sector_size) { ++ free(buf); ++ buf = 0; ++ if (!ptt_read_sector(disk->dev, 0, &buf)) ++ return 0; ++ ++ MacRawDisk *raw_disk = (MacRawDisk *) buf; ++ ++ if (!_check_signature (raw_disk)) ++ goto error; ++ ++ if (!_disk_analyse_block_size (disk, raw_disk)) ++ goto error; ++ } ++ + if (!_disk_analyse_ghost_size (disk)) + goto error; + ghost_size = mac_disk_data->ghost_size; +-- +1.7.3.1 + diff --git a/parted.spec b/parted.spec index cb21b9c..9674f81 100644 --- a/parted.spec +++ b/parted.spec @@ -4,7 +4,7 @@ Summary: The GNU disk partition manipulation program Name: parted Version: 2.3 -Release: 3%{?dist} +Release: 4%{?dist} License: GPLv3+ Group: Applications/System URL: http://www.gnu.org/software/parted @@ -18,6 +18,8 @@ Source2: pubkey.jim.meyering Patch0: parted-2.2-hi-major-sd-rh611691.patch # Report partitions changes when using blkext major numbers Patch1: parted-2.3-lpn.patch +# Handle mac labels with differing physical/logical sector sizes better +Patch2: parted-2.3-mac-logical-sector-size.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: e2fsprogs-devel @@ -70,7 +72,6 @@ git am %{patches} iconv -f ISO-8859-1 -t UTF8 AUTHORS > tmp; touch -r AUTHORS tmp; mv tmp AUTHORS git commit -a -m "run iconv" - %build %configure --enable-selinux --disable-static # Don't use rpath! @@ -143,6 +144,9 @@ fi %changelog +* Fri Dec 17 2010 Peter Jones - 2.3-4 +- Handle mac labels with differing physical/logical sector sizes better + * Wed Sep 29 2010 jkeating - 2.3-3 - Rebuilt for gcc bug 634757