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

Reply via email to