KESHAV P.R. wrote: > I have attached the updated "msftres" patch rebased according to GIT > "master" as on September 18, 2009.
Thank you. I've adjusted your log, mostly to give credit. Then I wrote a test script to cover this and to exercise several other aspects of GPT partition tables. I've just pushed these two changes to master: http://git.debian.org/?p=parted/parted.git;a=summary >From c4cfad405f7141826c0ef4bed1231572c6df810d Mon Sep 17 00:00:00 2001 From: Keshav P R <[email protected]> Date: Fri, 18 Sep 2009 16:37:51 +0530 Subject: [PATCH 1/2] gpt: don't use msftres flag for FAT/NTFS partitions This patch corrects the bug in parted due to which any FAT(12,16,32) or NTFS partition(s) is, by default, incorrectly set as "Microsoft Reserved Partition" type in GPT disks. With this change, parted defaults to setting the FAT/NTFS Partitions partition type to Linux/Windows Basic Data Partition which will make them accessible in Mac OS X and Windows. Reported by [email protected] in <http://bugs.debian.org/441033>, with suggested change by Osamu Aoki <[email protected]>. Keshav P R <[email protected]> wrote the above and prepared this patch. --- libparted/labels/gpt.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c index a4f0117..cc9bcdc 100644 --- a/libparted/labels/gpt.c +++ b/libparted/labels/gpt.c @@ -1286,7 +1286,7 @@ gpt_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) if (fs_type) { if (strncmp (fs_type->name, "fat", 3) == 0 || strcmp (fs_type->name, "ntfs") == 0) { - gpt_part_data->type = PARTITION_MSFT_RESERVED_GUID; + gpt_part_data->type = PARTITION_BASIC_DATA_GUID; return 1; } if (strncmp (fs_type->name, "hfs", 3) == 0) { -- 1.6.5.rc2.177.ga9dd6 >From 82f8b37bbd001d4d9b524b38d27174272c40f00f Mon Sep 17 00:00:00 2001 From: Jim Meyering <[email protected]> Date: Thu, 24 Sep 2009 19:56:37 +0200 Subject: [PATCH 2/2] tests: gpt: exercise creating all partition types; check for msftres bug Ensure that a newly-created partition in a GPT partition table has no 'flag' set, by default. This test also exercises setting the "name" on a partition and creates one partition of each supported type. * tests/t0220-gpt-msftres.sh: New file. * tests/Makefile.am (TESTS): Add that new file. --- tests/Makefile.am | 1 + tests/t0220-gpt-msftres.sh | 85 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 0 deletions(-) create mode 100755 tests/t0220-gpt-msftres.sh diff --git a/tests/Makefile.am b/tests/Makefile.am index 83bc804..74ca8d9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -5,6 +5,7 @@ TESTS = \ t0200-gpt.sh \ t0201-gpt.sh \ t0202-gpt-pmbr.sh \ + t0220-gpt-msftres.sh \ t0250-gpt.sh \ t0300-dos-on-gpt.sh \ t0400-loop-clobber-infloop.sh \ diff --git a/tests/t0220-gpt-msftres.sh b/tests/t0220-gpt-msftres.sh new file mode 100755 index 0000000..5053e0f --- /dev/null +++ b/tests/t0220-gpt-msftres.sh @@ -0,0 +1,85 @@ +#!/bin/sh +# Copyright (C) 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +test_description='gpt default "flag" for a partition must not be msftres' + +: ${srcdir=.} +. $srcdir/test-lib.sh + +ss=$sector_size_ +dev=loop-file + +# FIXME: should be able to use "ufs" here, too, but that doesn't work. +fs_types=' +ext2 +fat16 +fat32 +hfs +hfs+ +hfsx +linux-swap +NTFS +reiserfs +' + +start=200 +part_size=100 +n_types=$(echo "$fs_types"|wc -w) + +# Create a "disk" with enough room for one partition per FS type, +# and the overhead required for a GPT partition table. +# 32 is the number of 512-byte sectors required to accommodate the +# minimum size of the secondary GPT header at the end of the disk. +n_sectors=$(expr $start + $n_types \* $part_size + 1 + 32) + +test_expect_success \ + 'create a test file large enough for one partition per FS type' \ + 'dd if=/dev/null of=$dev bs=$ss seek=$n_sectors' + +test_expect_success \ + 'create a gpt partition table' \ + 'parted -s $dev mklabel gpt > out 2>&1' +test_expect_success 'expect no output' 'compare out /dev/null' + +printf "BYT;\n$dev:${n_sectors}s:file:$ss:$ss:gpt:;\n" > exp +i=1 +fail=0 +rm -f out +for type in $fs_types; do + end=$(expr $start + $part_size - 1) + echo "$i:${start}s:${end}s:${part_size}s::$type:;" >> exp || fail=1 + parted -s $dev mkpart primary $type ${start}s ${end}s >> out 2>&1 || fail=1 + parted -s $dev name $i $type >> out 2>&1 || fail=1 + start=$(expr $end + 1) + i=$(expr $i + 1) +done + +test_expect_success \ + "create $n_types partitions" \ + 'test $fail = 0' +test_expect_success 'expect no output' 'compare out /dev/null' + +rm -f out +test_expect_success \ + 'print partition table' \ + 'parted -m -s $dev u s p > out 2>&1' + +sed "s,.*/$dev:,$dev:," out > k && mv k out && ok=1 || ok=0 +test_expect_success \ + 'match against expected output' \ + 'test $ok = 1 && compare out exp' + +test_done -- 1.6.5.rc2.177.ga9dd6 _______________________________________________ parted-devel mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/parted-devel

