Accepting request 213416 from Base:System

- update to parted-3.1 (fate#316110)
- changes in parted-3.1:
  * Changes in behavior
    - Floppy drives are no longer scanned on linux: they cannot be
      partitioned anyhow, and some users have a misconfigured BIOS
      that claims to have a floppy when they don't, and scanning
      gets hung up.
    - parted: the mkpart command has changed semantics with regard
      to specifying the end of the partition.  If the end is
      specified using units of MiB, GiB, etc., parted subtracts one
      sector from the specified value.  With this change, it is now
      possible to create partitions like 1MiB-2MiB, 2MiB-3MiB and
      so on.
  * Many bugfixes (see changelog)
- changes in parted-3.0:
  * Changes in behavior
    - Remove all FS-related (file system-related) sub-commands;
      these commands are no longer recognized because they were all
      dependent on parted "knowing" too much about file system:
      mkpartfs, mkfs, cp, move, check.
    - 'resize' command changed semantics:
      it no longer resizes the filesystem, but only moves end
      sector of the partition
- libparted-devel contains libparted-fs-resize library 
- add ability to change size of the partition (ignoring contained
  filesystem) with 'resize' command; this command has different
  semantics than the former 'resize' command which upstream
  decided to drop
  - parted-resize-command.patch (fate#316110)
- when using syncmbr on POWER, make the first partition type 0x41

OBS-URL: https://build.opensuse.org/request/show/213416
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/parted?expand=0&rev=89
This commit is contained in:
Stephan Kulow 2014-01-17 10:06:10 +00:00 committed by Git OBS Bridge
commit e0404514bf
32 changed files with 1346 additions and 1081 deletions

View File

@ -1,67 +0,0 @@
---
parted/parted.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
Index: parted/parted.c
===================================================================
--- parted/parted.c.orig 2010-05-28 17:09:04.000000000 +0200
+++ parted/parted.c 2010-07-08 13:26:06.000000000 +0200
@@ -1917,7 +1917,7 @@ do_resize (PedDevice** dev)
issue_fs_op_warning ("resize");
PedDisk *disk;
PedPartition *part = NULL;
- PedFileSystem *fs;
+ PedFileSystem *fs = NULL;
PedConstraint *constraint;
PedSector start, end;
PedGeometry *range_start = NULL, *range_end = NULL;
@@ -1959,22 +1959,39 @@ do_resize (PedDevice** dev)
goto error_destroy_constraint;
ped_partition_set_system (part, NULL);
} else {
+ int always_resize = getenv( "YAST_IS_RUNNING" ) != NULL;
+ const char* fsname = "";
+ if( always_resize )
+ {
+ PedFileSystemType* fst = ped_file_system_probe( &part->geom );
+ if( fst )
+ fsname = fst->name;
+ }
fs = ped_file_system_open (&part->geom);
- if (!fs)
+ if (!fs && (!always_resize || strncmp(fsname,"fat",3)==0) )
goto error_destroy_disk;
+ if (fs)
constraint = constraint_intersect_and_destroy (
ped_file_system_get_resize_constraint (fs),
constraint_from_start_end (
*dev, range_start, range_end));
+ else
+ {
+ new_geom.start = part->geom.start;
+ constraint = ped_constraint_exact(&new_geom);
+ }
if (!ped_disk_set_partition_geom (disk, part, constraint,
new_geom.start, new_geom.end))
goto error_close_fs;
- if (!ped_file_system_resize (fs, &part->geom, g_timer))
+ if(fs && (!always_resize || strncmp(fsname,"fat",3)==0))
+ {
+ if (!ped_file_system_resize (fs, &part->geom, g_timer) && !always_resize )
goto error_close_fs;
/* may have changed... eg fat16 -> fat32 */
ped_partition_set_system (part, fs->type);
ped_file_system_close (fs);
}
+ }
ped_disk_commit (disk);
ped_constraint_destroy (constraint);
@@ -1990,6 +2007,7 @@ do_resize (PedDevice** dev)
return 1;
error_close_fs:
+ if (fs)
ped_file_system_close (fs);
error_destroy_constraint:
ped_constraint_destroy (constraint);

View File

@ -1,7 +1,11 @@
Index: parted-2.4/libparted/arch/linux.c
---
libparted/arch/linux.c | 45 ++++++++++++++++++++++++++++-----------------
1 file changed, 28 insertions(+), 17 deletions(-)
Index: parted-3.1/libparted/arch/linux.c
===================================================================
--- parted-2.4.orig/libparted/arch/linux.c
+++ parted-2.4/libparted/arch/linux.c
--- parted-3.1.orig/libparted/arch/linux.c
+++ parted-3.1/libparted/arch/linux.c
@@ -33,6 +33,7 @@
#include <stdio.h>
#include <syscall.h>
@ -10,7 +14,7 @@ Index: parted-2.4/libparted/arch/linux.c
#include <stdbool.h>
#include <dirent.h>
#include <sys/ioctl.h>
@@ -2770,29 +2771,39 @@ err:
@@ -2858,29 +2859,39 @@ err:
static int
_dm_reread_part_table (PedDisk* disk)
{

View File

@ -1,10 +1,14 @@
Index: parted-2.4/libparted/arch/linux.c
---
libparted/arch/linux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: parted-3.1/libparted/arch/linux.c
===================================================================
--- parted-2.4.orig/libparted/arch/linux.c
+++ parted-2.4/libparted/arch/linux.c
@@ -2225,7 +2225,7 @@ _device_get_part_path (PedDevice *dev, i
--- parted-3.1.orig/libparted/arch/linux.c
+++ parted-3.1/libparted/arch/linux.c
@@ -2243,7 +2243,7 @@ _device_get_part_path (PedDevice *dev, i
|| dev->type == PED_DEVICE_CPQARRAY
|| dev->type == PED_DEVICE_ATARAID
|| dev->type == PED_DEVICE_DM
|| isdigit (dev->path[path_len - 1])
- ? "p" : "");
+ ? "_part" : "");

View File

@ -2,11 +2,11 @@
libparted/arch/linux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: parted-2.4/libparted/arch/linux.c
Index: parted-3.1/libparted/arch/linux.c
===================================================================
--- parted-2.4.orig/libparted/arch/linux.c
+++ parted-2.4/libparted/arch/linux.c
@@ -2376,7 +2376,7 @@ _blkpg_add_partition (PedDisk* disk, con
--- parted-3.1.orig/libparted/arch/linux.c
+++ parted-3.1/libparted/arch/linux.c
@@ -2370,7 +2370,7 @@ _blkpg_add_partition (PedDisk* disk, con
linux_part.start = part->geom.start * disk->dev->sector_size;
/* see fs/partitions/msdos.c:msdos_partition(): "leave room for LILO" */
if (part->type & PED_PARTITION_EXTENDED)

View File

@ -1,13 +0,0 @@
Index: libparted/fs/reiserfs/reiserfs.c
===================================================================
--- libparted/fs/reiserfs/reiserfs.c.orig 2010-07-08 13:33:05.000000000 +0200
+++ libparted/fs/reiserfs/reiserfs.c 2010-07-08 13:33:10.000000000 +0200
@@ -86,7 +86,7 @@ FCLASS int (FPTR libreiserfs_exception_t
FCLASS int (FPTR libreiserfs_exception_option) (reiserfs_exception_t *);
FCLASS char *(FPTR libreiserfs_exception_message) (reiserfs_exception_t *);
FCLASS void (FPTR libreiserfs_exception_set_handler)
- (int(FPTR)(reiserfs_exception_t *));
+ (int(*)(reiserfs_exception_t *));
FCLASS void (FPTR dal_realize) (dal_t *);
FCLASS size_t (FPTR dal_block_size) (dal_t *);

View File

@ -1,38 +0,0 @@
From 2147402b83b27a35011cad032d0519c4a0672280 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering@redhat.com>
Date: Sat, 25 Jun 2011 08:49:58 +0200
Subject: [PATCH] libparted: fix a bug in the nilfs2 probe function
* libparted/fs/nilfs2/nilfs2.c (nilfs2_probe): Reject this partition
if we get a negative sb2 offset. Passing a negative offset to
ped_geometry_read_alloc would evoke a failed assertion.
Bug introduced by 2010-07-09 commit d463e7de.
* NEWS: (Bug fixes): Mention it.
Reported by Daniel Fandrich in
http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10466/focus=10472
---
NEWS | 3 +++
libparted/fs/nilfs2/nilfs2.c | 5 +++--
2 files changed, 6 insertions(+), 2 deletions(-)
Index: parted-2.4/libparted/fs/nilfs2/nilfs2.c
===================================================================
--- parted-2.4.orig/libparted/fs/nilfs2/nilfs2.c
+++ parted-2.4/libparted/fs/nilfs2/nilfs2.c
@@ -108,13 +108,14 @@ nilfs2_probe (PedGeometry* geom)
struct nilfs2_super_block *sb = NULL;
struct nilfs2_super_block *sb2 = NULL;
PedSector length = geom->length;
- PedSector sb2off;
/* ignore if sector size is not 512bytes for now */
if (geom->dev->sector_size != PED_SECTOR_SIZE_DEFAULT)
return NULL;
- sb2off = NILFS_SB2_OFFSET(length);
+ PedSector sb2off = NILFS_SB2_OFFSET(length);
+ if (sb2off <= 2)
+ return NULL;
if (ped_geometry_read_alloc(geom, &sb_v, 2, 1))
sb = sb_v;

View File

@ -1,8 +1,12 @@
Index: parted-2.3/libparted/labels/mac.c
---
libparted/labels/mac.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
Index: parted-3.1/libparted/labels/mac.c
===================================================================
--- parted-2.3.orig/libparted/labels/mac.c 2010-07-08 13:29:24.000000000 +0200
+++ parted-2.3/libparted/labels/mac.c 2010-07-08 13:29:25.000000000 +0200
@@ -469,7 +469,7 @@ _rawpart_is_void (MacRawPartition* raw_p
--- parted-3.1.orig/libparted/labels/mac.c
+++ parted-3.1/libparted/labels/mac.c
@@ -468,7 +468,7 @@ _rawpart_is_void (MacRawPartition* raw_p
return _rawpart_cmp_type (raw_part, "Apple_Void");
}
@ -11,7 +15,7 @@ Index: parted-2.3/libparted/labels/mac.c
* doesn't represent a partition at all. NOTE: some people make Apple_Free
* partitions with MacOS, because they can't select another type. So, if the
* name is anything other than "Extra" or "", it is treated as a "real"
@@ -534,6 +534,13 @@ _rawpart_analyse (MacRawPartition* raw_p
@@ -533,6 +533,13 @@ _rawpart_analyse (MacRawPartition* raw_p
if (!part)
goto error;

View File

@ -2,11 +2,11 @@
libparted/arch/linux.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Index: parted-2.4/libparted/arch/linux.c
Index: parted-3.1/libparted/arch/linux.c
===================================================================
--- parted-2.4.orig/libparted/arch/linux.c
+++ parted-2.4/libparted/arch/linux.c
@@ -2227,7 +2227,8 @@ _device_get_part_path (PedDevice *dev, i
--- parted-3.1.orig/libparted/arch/linux.c
+++ parted-3.1/libparted/arch/linux.c
@@ -2240,7 +2240,8 @@ _device_get_part_path (PedDevice *dev, i
(int) (path_len - 5), dev->path, num);
} else {
const char *p;

View File

@ -0,0 +1,18 @@
---
libparted/labels/gpt.c | 3 +++
1 file changed, 3 insertions(+)
Index: parted-3.1/libparted/labels/gpt.c
===================================================================
--- parted-3.1.orig/libparted/labels/gpt.c
+++ parted-3.1/libparted/labels/gpt.c
@@ -1181,6 +1181,9 @@ _part_to_ostype (PedPartition* part)
if (strncmp (part->fs_type->name, "hfs", 3) == 0) return 0xaf;
if (strstr (part->fs_type->name, "swap")) return 0x82;
}
+#ifdef __PPC__
+ if (part->num == 1) return 0x41; /* PARTITION_PREP */
+#endif
return 0x83; // Everything else is Linux
}

View File

@ -10,13 +10,14 @@
# 3. call 'udevadm settle' before doing BLKPG_DEL_PARTITION ioctl()
---
libparted/arch/linux.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
parted/parted.c | 28 +++++++++++++++++++++++++++-
2 files changed, 30 insertions(+), 2 deletions(-)
Index: parted-2.3/libparted/arch/linux.c
Index: parted-3.1/libparted/arch/linux.c
===================================================================
--- parted-2.3.orig/libparted/arch/linux.c
+++ parted-2.3/libparted/arch/linux.c
@@ -2460,10 +2460,12 @@ _disk_sync_part_table (PedDisk* disk)
--- parted-3.1.orig/libparted/arch/linux.c
+++ parted-3.1/libparted/arch/linux.c
@@ -2585,10 +2585,12 @@ _disk_sync_part_table (PedDisk* disk)
if (!errnums)
goto cleanup;
@ -30,11 +31,11 @@ Index: parted-2.3/libparted/arch/linux.c
unsigned int n_sleep = (max_sleep_seconds
* 1000000 / sleep_microseconds);
int i;
Index: parted-2.3/parted/parted.c
Index: parted-3.1/parted/parted.c
===================================================================
--- parted-2.3.orig/parted/parted.c
+++ parted-2.3/parted/parted.c
@@ -272,6 +272,32 @@ _disk_warn_loss (PedDisk* disk)
--- parted-3.1.orig/parted/parted.c
+++ parted-3.1/parted/parted.c
@@ -258,6 +258,32 @@ _disk_warn_loss (PedDisk* disk)
disk->dev->path) == PED_EXCEPTION_YES;
}
@ -67,7 +68,7 @@ Index: parted-2.3/parted/parted.c
/* This function changes "sector" to "new_sector" if the new value lies
* within the required range.
*/
@@ -2200,7 +2226,7 @@ do_set (PedDevice** dev)
@@ -1643,7 +1669,7 @@ do_set (PedDevice** dev)
if (!ped_partition_set_flag (part, flag, state))
goto error_destroy_disk;

View File

@ -1,6 +1,12 @@
--- configure.ac.orig
+++ configure.ac
@@ -178,7 +178,8 @@ AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
---
configure.ac | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Index: parted-3.1/configure.ac
===================================================================
--- parted-3.1.orig/configure.ac
+++ parted-3.1/configure.ac
@@ -164,7 +164,8 @@ AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
dnl Check for programs.
AC_ISC_POSIX
@ -10,7 +16,7 @@
AC_PROG_GCC_TRADITIONAL
AM_PROG_CC_C_O
@@ -384,7 +385,7 @@ dnl Check for termcap
@@ -371,7 +372,7 @@ dnl Check for termcap
if test "$with_readline" = yes; then
OLD_LIBS="$LIBS"
LIBS=""

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:965e5a661d3cb721c0aafc64f440c6c88699c8ec44bae09b7d3dc816df00ab14
size 3177408

View File

@ -1,17 +0,0 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQIcBAABCAAGBQJN0/ZsAAoJEH/Z/MsAC+7uOTAQAKniexcRs0Qh3j454i3HI6O+
aVbcfKfb3BmPLNK97dL1gXoslagO/NEjTmV1SdMtyHp7wqQBnXmM88WudS7aHK85
YKEDlkknUtttEG8WornCJCG40VX2Z4dvEYLekVxr7bR8ZM1KzTVKioihm71/9oYe
eP3JsVREGQ8w62ovZeOx5aVcCXGUxMe6KPebf3XUWtxGj52hVf2Jpc3tA7B4+2IR
mM514AUIMT5yrk2djcoAEmaRvwtQ5F94HPrYwz80META5DZ3ABRmCt5feAqdTgUU
4YM11KiN2fFf4TWalN+ol8LyUyNOTcT7zScVeIw8Pt5L/7vnFmgwlh2mVUFtLz5b
wKSIn02LD8d5az+dZGjJFU16CvvwimIxdLRdMIIer5gLdPPVPQcmxA88sinu7VAn
8VywCCz8EF64Y+KsPDfRKV4Tx/8k+MVF33u/3yV9x2xEEKv3+4lX3w9JCCgZzKdv
KwX6XpNYClRGoc6IeeNoyJvOnV8eh/2wBMywbXY9GQiqeLryLJ2r0JIHrVYtVqje
dfoSMIKnl1cYi+kWdprdSfBzLoVxNGRly5zq2LGPl9NPIR5SCzd9iOw8ValBY7X4
lqY5umyvGL09VHGRPJ5c70ygMvYg+hvRz7jbCzjtlx9bxu4ukXQtrHp7WeYG4OY0
0NW0+mn/FTrphvKCs1Ri
=mleT
-----END PGP SIGNATURE-----

3
parted-3.1.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5e9cc1f91eaf016e5033d85b9b893fd6d3ffaca532a48de1082df9b94225ca15
size 1524344

17
parted-3.1.tar.xz.sig Normal file
View File

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iQIcBAABCAAGBQJPUQeUAAoJEH/Z/MsAC+7uwS0P/iplXKYgLCZ7PXhAy2QWSEgC
yEDNUN2hdK5RqXPzmyzTEObflRRkVQV8nWLBg9r5jCXKBKl0OEiBDSd9jwbdUSwI
6ueSsbrLLpwnQkqBsh7F9zwIJ2xDsPYmhOqxTbXpITn8fv9MAMPFm0+pGYgIPC4o
JITcP+8ufjjQpdecv/EmiM+3rrcMxgVi7/F158uj+ih4mxl7L4APG2hIib+Xdd8x
lqzVogAQoW6n5uoQo/F2zcGv/NPMH7LqwH435VEzc3FTEKQ4ArZ6o/hYasMALW2F
iXyjxQKDPBmiXOkKwmhRCBQtFVk1rpy6JSw07ljL2sZlScnKvq3AA9ufomdlgtIR
vBDRjkJeB1W12sk75eQRiP1RS3+TT1rpo9kvE4a1iZkMWrHPvaCDKM48MdN/Nvb6
nLafTM2FsHPEZ9HJCmEY4LRH0zmTJQy8KW5XSHFJgEhk22Jk5S951uTkM1sEbvHL
RRZHIGs/RZwetIUvFFEE87hZJ6OWO0XVStUnA+ik255XgN8Ik5o4K50hI3qU0/e3
3faMq6MpBYfQn5z1SO99/TE70hjyi8Q5E+SpuF3qn4cfhYi3zn8e6OaGNLVOXcWU
5/9WI5v9a5br/74RmIElsieetnMvlpbe9feAvsziQooNPe584qlQq7SXVegcXGNu
MUrTB6SjxheBtLqH0PlX
=0NA7
-----END PGP SIGNATURE-----

View File

@ -15,9 +15,11 @@ This adds support for the irst partition type flag. Sets the type to
libparted/labels/gpt.c | 37 +++++++++++++++++++++++++++++++++++++
5 files changed, 64 insertions(+), 3 deletions(-)
--- parted-2.4.orig/doc/C/parted.8
+++ parted-2.4/doc/C/parted.8
@@ -132,7 +132,7 @@ or an LVM logical volume if necessary.
Index: parted-3.1/doc/C/parted.8
===================================================================
--- parted-3.1.orig/doc/C/parted.8
+++ parted-3.1/doc/C/parted.8
@@ -104,7 +104,7 @@ or an LVM logical volume if necessary.
.B set \fIpartition\fP \fIflag\fP \fIstate\fP
Change the state of the \fIflag\fP on \fIpartition\fP to \fIstate\fP.
Supported flags are: "boot", "root", "swap", "hidden", "raid", "lvm", "lba",
@ -26,9 +28,29 @@ This adds support for the irst partition type flag. Sets the type to
\fIstate\fP should be either "on" or "off".
.TP
.B unit \fIunit\fP
--- parted-2.4.orig/libparted/disk.c
+++ parted-2.4/libparted/disk.c
@@ -2472,6 +2472,8 @@ ped_partition_flag_get_name (PedPartitio
Index: parted-3.1/include/parted/disk.h
===================================================================
--- parted-3.1.orig/include/parted/disk.h
+++ parted-3.1/include/parted/disk.h
@@ -73,10 +73,11 @@ enum _PedPartitionFlag {
PED_PARTITION_APPLE_TV_RECOVERY=13,
PED_PARTITION_DIAG=14,
PED_PARTITION_LEGACY_BOOT=15,
- PED_PARTITION_TYPE=16
+ PED_PARTITION_TYPE=16,
+ PED_PARTITION_IRST=17
};
#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_TYPE
+#define PED_PARTITION_LAST_FLAG PED_PARTITION_IRST
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
Index: parted-3.1/libparted/disk.c
===================================================================
--- parted-3.1.orig/libparted/disk.c
+++ parted-3.1/libparted/disk.c
@@ -2473,6 +2473,8 @@ ped_partition_flag_get_name (PedPartitio
return N_("diag");
case PED_PARTITION_LEGACY_BOOT:
return N_("legacy_boot");
@ -37,8 +59,10 @@ This adds support for the irst partition type flag. Sets the type to
default:
ped_exception_throw (
--- parted-2.4.orig/libparted/labels/dos.c
+++ parted-2.4/libparted/labels/dos.c
Index: parted-3.1/libparted/labels/dos.c
===================================================================
--- parted-3.1.orig/libparted/labels/dos.c
+++ parted-3.1/libparted/labels/dos.c
@@ -85,6 +85,7 @@ static const char MBR_BOOT_CODE[] = {
#define PARTITION_LDM 0x42
#define PARTITION_LINUX_SWAP 0x82
@ -137,8 +161,10 @@ This adds support for the irst partition type flag. Sets the type to
case PED_PARTITION_DIAG:
return 1;
--- parted-2.4.orig/libparted/labels/gpt.c
+++ parted-2.4/libparted/labels/gpt.c
Index: parted-3.1/libparted/labels/gpt.c
===================================================================
--- parted-3.1.orig/libparted/labels/gpt.c
+++ parted-3.1/libparted/labels/gpt.c
@@ -142,6 +142,10 @@ typedef struct
((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \
PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \
@ -158,7 +184,7 @@ This adds support for the irst partition type flag. Sets the type to
} GPTPartitionData;
static PedDiskType gpt_disk_type;
@@ -879,6 +884,7 @@ _parse_part_entry (PedDisk *disk, GuidPa
@@ -883,6 +888,7 @@ _parse_part_entry (PedDisk *disk, GuidPa
= gpt_part_data->hidden = gpt_part_data->msftres
= gpt_part_data->msftrecv
= gpt_part_data->legacy_boot
@ -166,7 +192,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0;
if (pte->Attributes.RequiredToFunction & 0x1)
@@ -902,6 +908,8 @@ _parse_part_entry (PedDisk *disk, GuidPa
@@ -906,6 +912,8 @@ _parse_part_entry (PedDisk *disk, GuidPa
gpt_part_data->msftrecv = 1;
else if (!guid_cmp (gpt_part_data->type, PARTITION_APPLE_TV_RECOVERY_GUID))
gpt_part_data->atvrecv = 1;
@ -175,7 +201,7 @@ This adds support for the irst partition type flag. Sets the type to
return part;
}
@@ -1509,6 +1517,7 @@ gpt_partition_new (const PedDisk *disk,
@@ -1518,6 +1526,7 @@ gpt_partition_new (const PedDisk *disk,
gpt_part_data->msftrecv = 0;
gpt_part_data->atvrecv = 0;
gpt_part_data->legacy_boot = 0;
@ -183,7 +209,7 @@ This adds support for the irst partition type flag. Sets the type to
uuid_generate ((unsigned char *) &gpt_part_data->uuid);
swap_uuid_and_efi_guid ((unsigned char *) (&gpt_part_data->uuid));
memset (gpt_part_data->name, 0, sizeof gpt_part_data->name);
@@ -1614,6 +1623,11 @@ gpt_partition_set_system (PedPartition *
@@ -1621,6 +1630,11 @@ gpt_partition_set_system (PedPartition *
gpt_part_data->type = PARTITION_APPLE_TV_RECOVERY_GUID;
return 1;
}
@ -195,7 +221,7 @@ This adds support for the irst partition type flag. Sets the type to
if (fs_type)
{
@@ -1714,6 +1728,7 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1721,6 +1735,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
@ -203,7 +229,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_BIOS_GRUB:
@@ -1725,6 +1740,7 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1732,6 +1747,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
@ -211,7 +237,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_RAID:
@@ -1736,6 +1752,7 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1743,6 +1759,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
@ -219,7 +245,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_LVM:
@@ -1747,6 +1764,7 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1754,6 +1771,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
@ -227,7 +253,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_HPSERVICE:
@@ -1758,6 +1776,7 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1765,6 +1783,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->msftres
= gpt_part_data->msftrecv
@ -235,7 +261,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_MSFT_RESERVED:
@@ -1769,6 +1788,7 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1776,6 +1795,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->hp_service
= gpt_part_data->msftrecv
@ -243,7 +269,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_DIAG:
@@ -1780,6 +1800,7 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1787,6 +1807,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->hp_service
= gpt_part_data->msftres
@ -251,7 +277,7 @@ This adds support for the irst partition type flag. Sets the type to
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_APPLE_TV_RECOVERY:
@@ -1791,8 +1812,21 @@ gpt_partition_set_flag (PedPartition *pa
@@ -1798,8 +1819,21 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->hp_service
= gpt_part_data->msftres
@ -273,7 +299,7 @@ This adds support for the irst partition type flag. Sets the type to
case PED_PARTITION_HIDDEN:
gpt_part_data->hidden = state;
return 1;
@@ -1837,6 +1871,8 @@ gpt_partition_get_flag (const PedPartiti
@@ -1844,6 +1878,8 @@ gpt_partition_get_flag (const PedPartiti
return gpt_part_data->hidden;
case PED_PARTITION_LEGACY_BOOT:
return gpt_part_data->legacy_boot;
@ -282,7 +308,7 @@ This adds support for the irst partition type flag. Sets the type to
case PED_PARTITION_SWAP:
case PED_PARTITION_LBA:
case PED_PARTITION_ROOT:
@@ -1862,6 +1898,7 @@ gpt_partition_is_flag_available (const P
@@ -1869,6 +1905,7 @@ gpt_partition_is_flag_available (const P
case PED_PARTITION_APPLE_TV_RECOVERY:
case PED_PARTITION_HIDDEN:
case PED_PARTITION_LEGACY_BOOT:
@ -290,19 +316,3 @@ This adds support for the irst partition type flag. Sets the type to
return 1;
case PED_PARTITION_SWAP:
case PED_PARTITION_ROOT:
--- parted-2.4.orig/include/parted/disk.h
+++ parted-2.4/include/parted/disk.h
@@ -71,10 +71,11 @@ enum _PedPartitionFlag {
PED_PARTITION_APPLE_TV_RECOVERY=13,
PED_PARTITION_DIAG=14,
PED_PARTITION_LEGACY_BOOT=15,
- PED_PARTITION_TYPE=16
+ PED_PARTITION_TYPE=16,
+ PED_PARTITION_IRST=17
};
#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_TYPE
+#define PED_PARTITION_LAST_FLAG PED_PARTITION_IRST
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */

View File

@ -0,0 +1,211 @@
From d151cc20af79c89383ffacc89c1f646f831fc3e6 Mon Sep 17 00:00:00 2001
From: Daniel Battaiola Kreling <dbkreling@br.ibm.com>
Date: Mon, 7 Oct 2013 11:51:50 +0530
Subject: [PATCH] GPT: add support for PReP GUID
PReP (PowerPC Reference Platform) boot partition is the first partition used in
PowerPC platform for containing the bootable kernel or bootloader. The firmware
searches for this partition and jumps to it for booting. So far no GUID was
specified for this partition type and hence booting from GPT disk was not
supported on this platform. A new GUID 9e1a2d38-c612-4316-aa26-8b49521e5a8b for
PReP partition is proposed to be included in GPT.
---
NEWS | 7 +++++++
doc/parted.texi | 2 +-
libparted/labels/gpt.c | 38 ++++++++++++++++++++++++++++++++++++++
3 files changed, 46 insertions(+), 1 deletion(-)
Index: parted-3.1/NEWS
===================================================================
--- parted-3.1.orig/NEWS
+++ parted-3.1/NEWS
@@ -1,5 +1,12 @@
GNU parted NEWS -*- outline -*-
+* Noteworthy changes post release 3.1
+
+** New features
+
+ Add support for prep flag to GPT to select PowerPC Reference Platform
+ boot partition type.
+
* Noteworthy changes in release 3.1 (2012-03-02) [stable]
** New features
Index: parted-3.1/doc/parted.texi
===================================================================
--- parted-3.1.orig/doc/parted.texi
+++ parted-3.1/doc/parted.texi
@@ -822,7 +822,7 @@ physical volume.
by the Linux/PA-RISC boot loader, palo.
@item PREP
-(MS-DOS) - this flag can be enabled so that the partition can be used
+(MS-DOS, GPT) - this flag can be enabled so that the partition can be used
as a PReP boot partition on PowerPC PReP or IBM RS6K/CHRP hardware.
@item DIAG
Index: parted-3.1/libparted/labels/gpt.c
===================================================================
--- parted-3.1.orig/libparted/labels/gpt.c
+++ parted-3.1/libparted/labels/gpt.c
@@ -142,6 +142,10 @@ typedef struct
((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \
PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \
{ 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }})
+#define PARTITION_PREP_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x9e1a2d38), PED_CPU_TO_LE16 (0xc612), \
+ PED_CPU_TO_LE16 (0x4316), 0xaa, 0x26, \
+ { 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b }})
#define PARTITION_IRST_GUID \
((efi_guid_t) { PED_CPU_TO_LE32 (0xD3BFE2DE), PED_CPU_TO_LE16 (0x3DAF), \
PED_CPU_TO_LE16 (0x11DF), 0xba, 0x40, \
@@ -286,6 +290,7 @@ typedef struct _GPTPartitionData
int atvrecv;
int msftrecv;
int legacy_boot;
+ int prep;
int irst;
} GPTPartitionData;
@@ -888,6 +893,7 @@ _parse_part_entry (PedDisk *disk, GuidPa
= gpt_part_data->hidden = gpt_part_data->msftres
= gpt_part_data->msftrecv
= gpt_part_data->legacy_boot
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0;
@@ -912,6 +918,8 @@ _parse_part_entry (PedDisk *disk, GuidPa
gpt_part_data->msftrecv = 1;
else if (!guid_cmp (gpt_part_data->type, PARTITION_APPLE_TV_RECOVERY_GUID))
gpt_part_data->atvrecv = 1;
+ else if (!guid_cmp (gpt_part_data->type, PARTITION_PREP_GUID))
+ gpt_part_data->prep = 1;
else if (!guid_cmp (gpt_part_data->type, PARTITION_IRST_GUID))
gpt_part_data->irst = 1;
@@ -1526,6 +1534,7 @@ gpt_partition_new (const PedDisk *disk,
gpt_part_data->msftrecv = 0;
gpt_part_data->atvrecv = 0;
gpt_part_data->legacy_boot = 0;
+ gpt_part_data->prep = 0;
gpt_part_data->irst = 0;
uuid_generate ((unsigned char *) &gpt_part_data->uuid);
swap_uuid_and_efi_guid ((unsigned char *) (&gpt_part_data->uuid));
@@ -1600,6 +1609,11 @@ gpt_partition_set_system (PedPartition *
gpt_part_data->type = PARTITION_RAID_GUID;
return 1;
}
+ if (gpt_part_data->prep)
+ {
+ gpt_part_data->type = PARTITION_PREP_GUID;
+ return 1;
+ }
if (gpt_part_data->boot)
{
gpt_part_data->type = PARTITION_SYSTEM_GUID;
@@ -1735,6 +1749,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
@@ -1747,6 +1762,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
@@ -1759,6 +1775,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
@@ -1771,6 +1788,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
@@ -1783,6 +1801,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->msftres
= gpt_part_data->msftrecv
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
@@ -1795,6 +1814,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->hp_service
= gpt_part_data->msftrecv
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
@@ -1807,6 +1827,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->hp_service
= gpt_part_data->msftres
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
@@ -1819,9 +1840,22 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->bios_grub
= gpt_part_data->hp_service
= gpt_part_data->msftres
+ = gpt_part_data->prep
= gpt_part_data->irst
= gpt_part_data->msftrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
+ case PED_PARTITION_PREP:
+ gpt_part_data->prep = state;
+ if (state)
+ gpt_part_data->boot
+ = gpt_part_data->raid
+ = gpt_part_data->lvm
+ = gpt_part_data->bios_grub
+ = gpt_part_data->hp_service
+ = gpt_part_data->msftres
+ = gpt_part_data->msftrecv
+ = gpt_part_data->atvrecv = 0;
+ return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_IRST:
gpt_part_data->irst = state;
if (state)
@@ -1832,6 +1866,7 @@ gpt_partition_set_flag (PedPartition *pa
= gpt_part_data->hp_service
= gpt_part_data->msftres
= gpt_part_data->msftrecv
+ = gpt_part_data->prep
= gpt_part_data->atvrecv = 0;
return gpt_partition_set_system (part, part->fs_type);
case PED_PARTITION_HIDDEN:
@@ -1878,6 +1913,8 @@ gpt_partition_get_flag (const PedPartiti
return gpt_part_data->hidden;
case PED_PARTITION_LEGACY_BOOT:
return gpt_part_data->legacy_boot;
+ case PED_PARTITION_PREP:
+ return gpt_part_data->prep;
case PED_PARTITION_IRST:
return gpt_part_data->irst;
case PED_PARTITION_SWAP:
@@ -1906,6 +1943,7 @@ gpt_partition_is_flag_available (const P
case PED_PARTITION_HIDDEN:
case PED_PARTITION_LEGACY_BOOT:
case PED_PARTITION_IRST:
+ case PED_PARTITION_PREP:
return 1;
case PED_PARTITION_SWAP:
case PED_PARTITION_ROOT:

View File

@ -11,62 +11,28 @@ Date: Thu Feb 12 15:15:30 2009 +0100
Signed-off-by: Luca Bruno <lucab@debian.org>
---
configure.ac | 4 -
libparted/fs/Makefile.am | 3 -
libparted/fs/btrfs/Makefile.am | 8 ++
libparted/fs/btrfs/btrfs.c | 110 +++++++++++++++++++++++++++++++++++++++++
libparted/libparted.c | 4 +
5 files changed, 126 insertions(+), 3 deletions(-)
libparted/fs/Makefile.am | 1
libparted/fs/btrfs/btrfs.c | 96 ++
libparted/libparted.c | 4
4 files changed, 1933 insertions(+)
Index: parted-2.4/configure.ac
Index: parted-3.1/libparted/fs/Makefile.am
===================================================================
@@ -626,6 +625,7 @@ libparted/Makefile
libparted/labels/Makefile
libparted/fs/Makefile
libparted/fs/amiga/Makefile
+libparted/fs/btrfs/Makefile
libparted/fs/ext2/Makefile
libparted/fs/fat/Makefile
libparted/fs/hfs/Makefile
Index: parted-2.4/libparted/fs/Makefile.am
===================================================================
--- parted-2.4.orig/libparted/fs/Makefile.am
+++ parted-2.4/libparted/fs/Makefile.am
@@ -4,7 +4,7 @@
# This file may be modified and/or distributed without restriction.
SUBDIRS = amiga ext2 ufs fat ntfs hfs linux_swap xfs jfs reiserfs \
- nilfs2 # bfs
+ nilfs2 btrfs # bfs
partedincludedir = -I$(top_srcdir)/include
noinst_LTLIBRARIES = libfs.la
@@ -25,6 +25,7 @@ libfs_la_LIBADD = $(UUID_LIBS) \
xfs/libxfs.la \
jfs/libjfs.la \
reiserfs/libreiserfs.la \
+ btrfs/libbtrfs.la \
nilfs2/libnilfs2.la
# bfs/libbfs.la
Index: parted-2.4/libparted/fs/btrfs/Makefile.am
--- parted-3.1.orig/libparted/fs/Makefile.am
+++ parted-3.1/libparted/fs/Makefile.am
@@ -25,6 +25,7 @@ libfs_la_SOURCES = \
amiga/asfs.c \
amiga/asfs.h \
amiga/a-interface.c \
+ btrfs/btrfs.c \
ext2/ext2.h \
ext2/ext2_fs.h \
ext2/interface.c \
Index: parted-3.1/libparted/fs/btrfs/btrfs.c
===================================================================
--- /dev/null
+++ parted-2.4/libparted/fs/btrfs/Makefile.am
@@ -0,0 +1,8 @@
+partedincludedir = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libbtrfs.la
+libbtrfs_la_SOURCES = btrfs.c
+
+INCLUDES = $(partedincludedir) $(INTLINCS)
+
+MAINTAINERCLEANFILES = Makefile.in
Index: parted-2.4/libparted/fs/btrfs/btrfs.c
===================================================================
--- /dev/null
+++ parted-2.4/libparted/fs/btrfs/btrfs.c
@@ -0,0 +1,110 @@
+++ parted-3.1/libparted/fs/btrfs/btrfs.c
@@ -0,0 +1,96 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2009 Free Software Foundation, Inc.
@ -141,20 +107,6 @@ Index: parted-2.4/libparted/fs/btrfs/btrfs.c
+
+static PedFileSystemOps btrfs_ops = {
+ probe: btrfs_probe,
+#ifndef DISCOVER_ONLY
+ clobber: btrfs_clobber,
+#else
+ clobber: NULL,
+#endif
+ open: NULL,
+ create: NULL,
+ close: NULL,
+ check: NULL,
+ copy: NULL,
+ resize: NULL,
+ get_create_constraint: NULL,
+ get_resize_constraint: NULL,
+ get_copy_constraint: NULL
+};
+
+static PedFileSystemType btrfs_type = {
@ -177,11 +129,11 @@ Index: parted-2.4/libparted/fs/btrfs/btrfs.c
+}
+
+
Index: parted-2.4/libparted/libparted.c
Index: parted-3.1/libparted/libparted.c
===================================================================
--- parted-2.4.orig/libparted/libparted.c
+++ parted-2.4/libparted/libparted.c
@@ -110,6 +110,7 @@ extern void ped_file_system_hfs_init (vo
--- parted-3.1.orig/libparted/libparted.c
+++ parted-3.1/libparted/libparted.c
@@ -109,6 +109,7 @@ extern void ped_file_system_hfs_init (vo
extern void ped_file_system_fat_init (void);
extern void ped_file_system_ext2_init (void);
extern void ped_file_system_nilfs2_init (void);
@ -189,15 +141,15 @@ Index: parted-2.4/libparted/libparted.c
static void
init_file_system_types ()
@@ -125,6 +126,7 @@ init_file_system_types ()
@@ -124,6 +125,7 @@ init_file_system_types ()
ped_file_system_fat_init ();
ped_file_system_ext2_init ();
ped_file_system_nilfs2_init ();
+ ped_file_system_btrfs_init ();
}
#endif /* ENABLE_FS */
@@ -191,6 +193,7 @@ extern void ped_file_system_ntfs_done (v
extern void ped_disk_aix_done ();
@@ -185,6 +187,7 @@ extern void ped_file_system_ntfs_done (v
extern void ped_file_system_reiserfs_done (void);
extern void ped_file_system_ufs_done (void);
extern void ped_file_system_xfs_done (void);
@ -205,11 +157,11 @@ Index: parted-2.4/libparted/libparted.c
extern void ped_file_system_amiga_done (void);
static void
@@ -206,6 +209,7 @@ done_file_system_types ()
@@ -200,6 +203,7 @@ done_file_system_types ()
ped_file_system_reiserfs_done ();
ped_file_system_ufs_done ();
ped_file_system_xfs_done ();
+ ped_file_system_btrfs_done ();
ped_file_system_amiga_done ();
}
#endif /* ENABLE_FS */

View File

@ -1,8 +1,12 @@
Index: parted-2.4/libparted/arch/linux.c
---
libparted/arch/linux.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
Index: parted-3.1/libparted/arch/linux.c
===================================================================
--- parted-2.4.orig/libparted/arch/linux.c
+++ parted-2.4/libparted/arch/linux.c
@@ -2226,8 +2226,11 @@ _device_get_part_path (PedDevice *dev, i
--- parted-3.1.orig/libparted/arch/linux.c
+++ parted-3.1/libparted/arch/linux.c
@@ -2239,8 +2239,11 @@ _device_get_part_path (PedDevice *dev, i
result = zasprintf ("%.*s/part%d",
(int) (path_len - 5), dev->path, num);
} else {
@ -14,5 +18,5 @@ Index: parted-2.4/libparted/arch/linux.c
+ else
+ p = (dev->type == PED_DEVICE_DAC960
|| dev->type == PED_DEVICE_ATARAID
|| dev->type == PED_DEVICE_DM
|| isdigit (dev->path[path_len - 1])
? "_part" : "");

View File

@ -1,33 +0,0 @@
---
libparted/labels/gpt.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Index: parted-2.4/libparted/labels/gpt.c
===================================================================
--- parted-2.4.orig/libparted/labels/gpt.c
+++ parted-2.4/libparted/labels/gpt.c
@@ -1256,9 +1256,9 @@ _write_pmbr (const PedDisk *disk)
pmbr->PartitionRecord[pmbr_id].EndSector = 0xFF;
pmbr->PartitionRecord[pmbr_id].EndTrack = 0xFF;
pmbr->PartitionRecord[pmbr_id].StartingLBA = PED_CPU_TO_LE32(1);
- pmbr->PartitionRecord[pmbr_id].SizeInLBA = 1;
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (1);
if (esp)
- pmbr->PartitionRecord[pmbr_id].SizeInLBA = esp->geom.end - 1;
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (esp->geom.end - 1);
/* sync the first 3 GPT entries to MBR primary partitions */
for (i=first_entry; i < last_entry; i++) {
@@ -1284,10 +1284,10 @@ _write_pmbr (const PedDisk *disk)
pmbr->PartitionRecord[i].EndHead = 0xFE;
pmbr->PartitionRecord[i].EndSector = 0xFF;
pmbr->PartitionRecord[i].EndTrack = 0xFF;
- pmbr->PartitionRecord[i].StartingLBA = _part_32bitmax(part->geom.start);
+ pmbr->PartitionRecord[i].StartingLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.start));
if(((GPTPartitionData*)part->disk_specific)->boot)
pmbr->PartitionRecord[i].BootIndicator = 0x80;
- pmbr->PartitionRecord[i].SizeInLBA = _part_32bitmax(part->geom.end - part->geom.start + 1);
+ pmbr->PartitionRecord[i].SizeInLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.end - part->geom.start + 1));
}
}
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,

View File

@ -1,29 +1,142 @@
---
libparted/labels/gpt.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 107 insertions(+), 2 deletions(-)
libparted/labels/gpt.c | 239 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 235 insertions(+), 4 deletions(-)
Index: libparted/labels/gpt.c
Index: parted-3.1/libparted/labels/gpt.c
===================================================================
--- libparted/labels/gpt.c.orig
+++ libparted/labels/gpt.c
@@ -51,6 +51,11 @@
# define _(String) (String)
#endif /* ENABLE_NLS */
--- parted-3.1.orig/libparted/labels/gpt.c
+++ parted-3.1/libparted/labels/gpt.c
@@ -285,6 +285,7 @@ typedef struct _GPTPartitionData
} GPTPartitionData;
+/* IA64 always has a properly working EFI implementation */
+#ifndef __ia64__
+#define GPT_SYNC_MBR
+#endif
static PedDiskType gpt_disk_type;
+static PedDiskType gpt_sync_mbr_disk_type;
static inline uint32_t
pth_get_size (const PedDevice *dev)
@@ -453,8 +454,50 @@ _pmbr_is_valid (const LegacyMBR_t *mbr)
return 0;
}
+/* checks if device has a hybrid protective MBR partition table
+ *
+ * If the 1st partition has type 0xEE that spans the entire
+ * size of the disk from sector 1 to the last sector
+ * (or 2 TiB, whichever is smaller), we consider it 'normal' GPT.
+ * Otherwise it is synced GPT with hybridized pMBR.
+ */
+static inline int
+_has_hybrid_pmbr (const PedDevice *dev)
+{
+ int has_hybrid_pmbr = 1;
+
#define EFI_PMBR_OSTYPE_EFI 0xEE
#define MSDOS_MBR_SIGNATURE 0xaa55
+ PED_ASSERT (dev != NULL);
+
+ void *label;
+ if (!ptt_read_sector (dev, 0, &label))
+ return 0;
+
+ LegacyMBR_t mbr;
+ memcpy(&mbr, label, sizeof(mbr));
+
+ if (mbr.Signature != PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE)) {
+ free(label);
+ return 0;
+ }
+
+ uint32_t efi_gpt_expected_size;
+ if ((dev->length - 1ULL) > 0xFFFFFFFFULL)
+ efi_gpt_expected_size = 0xFFFFFFFF;
+ else
+ efi_gpt_expected_size = dev->length - 1UL;
+
+ if ((mbr.PartitionRecord[0].OSType == EFI_PMBR_OSTYPE_EFI) &&
+ (mbr.PartitionRecord[0].StartingLBA == PED_CPU_TO_LE32(1)) &&
+ (mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(efi_gpt_expected_size)))
+ /* pMBR is not hybrid */
+ has_hybrid_pmbr = 0;
+
+ free(label);
+ return has_hybrid_pmbr;
+}
+
static int
-gpt_probe (const PedDevice *dev)
+_gpt_probe_generic(const PedDevice *dev)
{
GuidPartitionTableHeader_t *gpt = NULL;
int gpt_sig_found = 0;
@@ -507,6 +550,19 @@ gpt_probe (const PedDevice *dev)
return ok;
}
@@ -1072,11 +1077,60 @@ error:
+static int
+gpt_probe (const PedDevice *dev)
+{
+ return _gpt_probe_generic(dev) && !_has_hybrid_pmbr(dev);
+}
+
+
+static int
+gpt_sync_mbr_probe (const PedDevice *dev)
+{
+ return _gpt_probe_generic(dev) && _has_hybrid_pmbr(dev);
+}
+
static PedDisk *
gpt_alloc (const PedDevice *dev)
{
@@ -544,6 +600,36 @@ error:
}
static PedDisk *
+gpt_sync_mbr_alloc (const PedDevice *dev)
+{
+ PedDisk *disk;
+ GPTDiskData *gpt_disk_data;
+ PedSector data_start, data_end;
+
+ disk = _ped_disk_alloc ((PedDevice *) dev, &gpt_sync_mbr_disk_type);
+ if (!disk)
+ goto error;
+ disk->disk_specific = gpt_disk_data = ped_malloc (sizeof (GPTDiskData));
+ if (!disk->disk_specific)
+ goto error_free_disk;
+
+ data_start = 2 + GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
+ data_end = dev->length - 2
+ - GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
+ ped_geometry_init (&gpt_disk_data->data_area, dev, data_start,
+ data_end - data_start + 1);
+ gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES;
+ uuid_generate ((unsigned char *) &gpt_disk_data->uuid);
+ swap_uuid_and_efi_guid ((unsigned char *) (&gpt_disk_data->uuid));
+ return disk;
+
+error_free_disk:
+ free (disk);
+error:
+ return NULL;
+}
+
+static PedDisk *
gpt_duplicate (const PedDisk *disk)
{
PedDisk *new_disk;
@@ -920,7 +1006,7 @@ gpt_read (PedDisk *disk)
/* motivation: let the user decide about the pmbr... during
ped_disk_probe(), they probably didn't get a choice... */
- if (!gpt_probe (disk->dev))
+ if (!gpt_probe (disk->dev) && !gpt_sync_mbr_probe(disk->dev))
goto error;
GuidPartitionTableHeader_t *gpt = NULL;
@@ -1077,11 +1163,59 @@ error:
return 0;
}
+
+#ifdef GPT_SYNC_MBR
+static inline unsigned char
+_part_to_ostype (PedPartition* part)
+{
@ -61,7 +174,6 @@ Index: libparted/labels/gpt.c
+ else
+ return (uint32_t)in;
+}
+#endif
+
+
#ifndef DISCOVER_ONLY
@ -72,33 +184,29 @@ Index: libparted/labels/gpt.c
{
+ PedDevice * dev = disk->dev;
+
+#ifdef GPT_SYNC_MBR
+ /* need sync GPT -> hybrid pMBR ? */
+ int sync_pmbr = !strcmp(disk->type->name, "gpt_sync_mbr") ? 1 : 0;
+
+ int i, pmbr_id, first_entry = 0, last_entry = 3;
+ PedPartition *part = NULL, *esp;
+#endif
+
/* The UEFI spec is not clear about what to do with the following
elements of the Protective MBR (pmbr): BootCode (0-440B),
UniqueMBRSignature (440B-444B) and Unknown (444B-446B).
@@ -1086,10 +1140,13 @@ _write_pmbr (PedDevice *dev)
return 0;
LegacyMBR_t *pmbr = s0;
+#ifndef GPT_SYNC_MBR
/* Zero out the legacy partitions. */
@@ -1095,6 +1229,8 @@ _write_pmbr (PedDevice *dev)
memset (pmbr->PartitionRecord, 0, sizeof pmbr->PartitionRecord);
+#endif
pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE);
+#ifndef GPT_SYNC_MBR
+
+ if (!sync_pmbr) {
pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI;
pmbr->PartitionRecord[0].StartSector = 1;
pmbr->PartitionRecord[0].EndHead = 0xFE;
@@ -1100,6 +1157,53 @@ _write_pmbr (PedDevice *dev)
@@ -1105,7 +1241,60 @@ _write_pmbr (PedDevice *dev)
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF);
else
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL);
+#else
+ } else {
+ /* Search for an EFI System Partition */
+ esp = _find_first_part(disk);
+ if (!esp || !esp->fs_type || strncmp (esp->fs_type->name, "fat", 3) != 0)
@ -118,9 +226,9 @@ Index: libparted/labels/gpt.c
+ pmbr->PartitionRecord[pmbr_id].EndSector = 0xFF;
+ pmbr->PartitionRecord[pmbr_id].EndTrack = 0xFF;
+ pmbr->PartitionRecord[pmbr_id].StartingLBA = PED_CPU_TO_LE32(1);
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = 1;
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (1);
+ if (esp)
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = esp->geom.end - 1;
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (esp->geom.end - 1);
+
+ /* sync the first 3 GPT entries to MBR primary partitions */
+ for (i=first_entry; i < last_entry; i++) {
@ -132,6 +240,13 @@ Index: libparted/labels/gpt.c
+ i--;
+ continue;
+ }
+
+ /* partition can not be represented by dos label - don't sync it */
+ if (part->geom.start > 0xFFFFFFFF ||
+ (part->geom.end - part->geom.start + 1) > 0xFFFFFFFF) {
+ continue;
+ }
+ pmbr->PartitionRecord[i].OSType = _part_to_ostype(part);
+ pmbr->PartitionRecord[i].StartHead = 0xFE;
+ pmbr->PartitionRecord[i].StartSector = 0xFF;
@ -139,17 +254,17 @@ Index: libparted/labels/gpt.c
+ pmbr->PartitionRecord[i].EndHead = 0xFE;
+ pmbr->PartitionRecord[i].EndSector = 0xFF;
+ pmbr->PartitionRecord[i].EndTrack = 0xFF;
+ pmbr->PartitionRecord[i].StartingLBA = _part_32bitmax(part->geom.start);
+ pmbr->PartitionRecord[i].StartingLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.start));
+ if(((GPTPartitionData*)part->disk_specific)->boot)
+ pmbr->PartitionRecord[i].BootIndicator = 0x80;
+ pmbr->PartitionRecord[i].SizeInLBA = _part_32bitmax(part->geom.end - part->geom.start + 1);
+ pmbr->PartitionRecord[i].SizeInLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.end - part->geom.start + 1));
+ }
+ }
+#endif
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
GPT_PMBR_SECTORS);
@@ -1216,7 +1320,7 @@ gpt_write (const PedDisk *disk)
ptes_crc = efi_crc32 (ptes, ptes_size);
free (s0);
@@ -1225,7 +1414,7 @@ gpt_write (const PedDisk *disk)
ptes_crc = efi_crc32 (ptes, ptes_bytes);
/* Write protective MBR */
- if (!_write_pmbr (disk->dev))
@ -157,3 +272,69 @@ Index: libparted/labels/gpt.c
goto error_free_ptes;
/* Write PTH and PTEs */
@@ -1802,6 +1991,38 @@ static PedDiskOps gpt_disk_ops =
PT_op_function_initializers (gpt)
};
+static PedDiskOps gpt_sync_mbr_disk_ops =
+{
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (gpt_write),
+
+ partition_set_name: gpt_partition_set_name,
+ partition_get_name: gpt_partition_get_name,
+
+ /* probe function redefined */
+ probe: gpt_sync_mbr_probe,
+ /* alloc function redefined */
+ alloc: gpt_sync_mbr_alloc,
+ duplicate: gpt_duplicate,
+ free: gpt_free,
+ read: gpt_read,
+ partition_new: gpt_partition_new,
+ partition_duplicate: gpt_partition_duplicate,
+ partition_set_flag: gpt_partition_set_flag,
+ partition_get_flag: gpt_partition_get_flag,
+ partition_set_system: gpt_partition_set_system,
+ partition_is_flag_available: gpt_partition_is_flag_available,
+ partition_align: gpt_partition_align,
+ partition_destroy: gpt_partition_destroy,
+ partition_enumerate: gpt_partition_enumerate,
+ alloc_metadata: gpt_alloc_metadata,
+ get_max_primary_partition_count: gpt_get_max_primary_partition_count,
+ get_max_supported_partition_count: gpt_get_max_supported_partition_count,
+ partition_check: gpt_partition_check,
+ max_length: gpt_partition_max_length,
+ max_start_sector: gpt_partition_max_start_sector
+};
+
static PedDiskType gpt_disk_type =
{
next: NULL,
@@ -1810,16 +2031,26 @@ static PedDiskType gpt_disk_type =
features: PED_DISK_TYPE_PARTITION_NAME
};
+static PedDiskType gpt_sync_mbr_disk_type =
+{
+ next: NULL,
+ name: "gpt_sync_mbr",
+ ops: &gpt_sync_mbr_disk_ops,
+ features: PED_DISK_TYPE_PARTITION_NAME
+};
+
void
ped_disk_gpt_init ()
{
ped_disk_type_register (&gpt_disk_type);
+ ped_disk_type_register (&gpt_sync_mbr_disk_type);
}
void
ped_disk_gpt_done ()
{
ped_disk_type_unregister (&gpt_disk_type);
+ ped_disk_type_unregister (&gpt_sync_mbr_disk_type);
}
verify (sizeof (GuidPartitionEntryAttributes_t) == 8);

View File

@ -1,287 +0,0 @@
Index: parted-2.4/libparted/labels/gpt.c
===================================================================
--- parted-2.4.orig/libparted/labels/gpt.c
+++ parted-2.4/libparted/labels/gpt.c
@@ -51,11 +51,6 @@
# define _(String) (String)
#endif /* ENABLE_NLS */
-/* IA64 always has a properly working EFI implementation */
-#ifndef __ia64__
-#define GPT_SYNC_MBR
-#endif
-
#define EFI_PMBR_OSTYPE_EFI 0xEE
#define MSDOS_MBR_SIGNATURE 0xaa55
@@ -290,6 +285,7 @@ typedef struct _GPTPartitionData
} GPTPartitionData;
static PedDiskType gpt_disk_type;
+static PedDiskType gpt_sync_mbr_disk_type;
static inline uint32_t
pth_get_size (const PedDevice *dev)
@@ -458,8 +454,50 @@ _pmbr_is_valid (const LegacyMBR_t *mbr)
return 0;
}
+/* checks if device has a hybrid protective MBR partition table
+ *
+ * If the 1st partition has type 0xEE that spans the entire
+ * size of the disk from sector 1 to the last sector
+ * (or 2 TiB, whichever is smaller), we consider it 'normal' GPT.
+ * Otherwise it is synced GPT with hybridized pMBR.
+ */
+static inline int
+_has_hybrid_pmbr (const PedDevice *dev)
+{
+ int has_hybrid_pmbr = 1;
+
+ PED_ASSERT (dev != NULL);
+
+ void *label;
+ if (!ptt_read_sector (dev, 0, &label))
+ return 0;
+
+ LegacyMBR_t mbr;
+ memcpy(&mbr, label, sizeof(mbr));
+
+ if (mbr.Signature != PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE)) {
+ free(label);
+ return 0;
+ }
+
+ uint32_t efi_gpt_expected_size;
+ if ((dev->length - 1ULL) > 0xFFFFFFFFULL)
+ efi_gpt_expected_size = 0xFFFFFFFF;
+ else
+ efi_gpt_expected_size = dev->length - 1UL;
+
+ if ((mbr.PartitionRecord[0].OSType == EFI_PMBR_OSTYPE_EFI) &&
+ (mbr.PartitionRecord[0].StartingLBA == PED_CPU_TO_LE32(1)) &&
+ (mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(efi_gpt_expected_size)))
+ /* pMBR is not hybrid */
+ has_hybrid_pmbr = 0;
+
+ free(label);
+ return has_hybrid_pmbr;
+}
+
static int
-gpt_probe (const PedDevice *dev)
+_gpt_probe_generic(const PedDevice *dev)
{
GuidPartitionTableHeader_t *gpt = NULL;
int gpt_sig_found = 0;
@@ -512,6 +550,19 @@ gpt_probe (const PedDevice *dev)
return ok;
}
+static int
+gpt_probe (const PedDevice *dev)
+{
+ return _gpt_probe_generic(dev) && !_has_hybrid_pmbr(dev);
+}
+
+
+static int
+gpt_sync_mbr_probe (const PedDevice *dev)
+{
+ return _gpt_probe_generic(dev) && _has_hybrid_pmbr(dev);
+}
+
static PedDisk *
gpt_alloc (const PedDevice *dev)
{
@@ -543,6 +594,36 @@ error:
}
static PedDisk *
+gpt_sync_mbr_alloc (const PedDevice *dev)
+{
+ PedDisk *disk;
+ GPTDiskData *gpt_disk_data;
+ PedSector data_start, data_end;
+
+ disk = _ped_disk_alloc ((PedDevice *) dev, &gpt_sync_mbr_disk_type);
+ if (!disk)
+ goto error;
+ disk->disk_specific = gpt_disk_data = ped_malloc (sizeof (GPTDiskData));
+ if (!disk->disk_specific)
+ goto error_free_disk;
+
+ data_start = 2 + GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
+ data_end = dev->length - 2
+ - GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
+ ped_geometry_init (&gpt_disk_data->data_area, dev, data_start,
+ data_end - data_start + 1);
+ gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES;
+ uuid_generate ((unsigned char *) &gpt_disk_data->uuid);
+ swap_uuid_and_efi_guid ((unsigned char *) (&gpt_disk_data->uuid));
+ return disk;
+
+error_free_disk:
+ free (disk);
+error:
+ return NULL;
+}
+
+static PedDisk *
gpt_duplicate (const PedDisk *disk)
{
PedDisk *new_disk;
@@ -920,7 +1001,7 @@ gpt_read (PedDisk *disk)
/* motivation: let the user decide about the pmbr... during
ped_disk_probe(), they probably didn't get a choice... */
- if (!gpt_probe (disk->dev))
+ if (!gpt_probe (disk->dev) && !gpt_sync_mbr_probe(disk->dev))
goto error;
GuidPartitionTableHeader_t *gpt = NULL;
@@ -1078,7 +1159,6 @@ error:
}
-#ifdef GPT_SYNC_MBR
static inline unsigned char
_part_to_ostype (PedPartition* part)
{
@@ -1116,7 +1196,6 @@ _part_32bitmax (uint64_t in)
else
return (uint32_t)in;
}
-#endif
#ifndef DISCOVER_ONLY
@@ -1126,10 +1205,11 @@ _write_pmbr (const PedDisk *disk)
{
PedDevice * dev = disk->dev;
-#ifdef GPT_SYNC_MBR
+ /* need sync GPT -> hybrid pMBR ? */
+ int sync_pmbr = !strcmp(disk->type->name, "gpt_sync_mbr") ? 1 : 0;
+
int i, pmbr_id, first_entry = 0, last_entry = 3;
PedPartition *part = NULL, *esp;
-#endif
/* The UEFI spec is not clear about what to do with the following
elements of the Protective MBR (pmbr): BootCode (0-440B),
@@ -1140,13 +1220,12 @@ _write_pmbr (const PedDisk *disk)
return 0;
LegacyMBR_t *pmbr = s0;
-#ifndef GPT_SYNC_MBR
/* Zero out the legacy partitions. */
memset (pmbr->PartitionRecord, 0, sizeof pmbr->PartitionRecord);
-#endif
pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE);
-#ifndef GPT_SYNC_MBR
+
+ if (!sync_pmbr) {
pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI;
pmbr->PartitionRecord[0].StartSector = 1;
pmbr->PartitionRecord[0].EndHead = 0xFE;
@@ -1157,7 +1236,7 @@ _write_pmbr (const PedDisk *disk)
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF);
else
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL);
-#else
+ } else {
/* Search for an EFI System Partition */
esp = _find_first_part(disk);
if (!esp || !esp->fs_type || strncmp (esp->fs_type->name, "fat", 3) != 0)
@@ -1191,6 +1270,13 @@ _write_pmbr (const PedDisk *disk)
i--;
continue;
}
+
+ /* partition can not be represented by dos label - don't sync it */
+ if (part->geom.start > 0xFFFFFFFF ||
+ (part->geom.end - part->geom.start + 1) > 0xFFFFFFFF) {
+ continue;
+ }
+
pmbr->PartitionRecord[i].OSType = _part_to_ostype(part);
pmbr->PartitionRecord[i].StartHead = 0xFE;
pmbr->PartitionRecord[i].StartSector = 0xFF;
@@ -1203,8 +1289,7 @@ _write_pmbr (const PedDisk *disk)
pmbr->PartitionRecord[i].BootIndicator = 0x80;
pmbr->PartitionRecord[i].SizeInLBA = _part_32bitmax(part->geom.end - part->geom.start + 1);
}
-#endif
-
+ }
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
GPT_PMBR_SECTORS);
free (s0);
@@ -1902,6 +1987,38 @@ static PedDiskOps gpt_disk_ops =
PT_op_function_initializers (gpt)
};
+static PedDiskOps gpt_sync_mbr_disk_ops =
+{
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (gpt_write),
+
+ partition_set_name: gpt_partition_set_name,
+ partition_get_name: gpt_partition_get_name,
+
+ /* probe function redefined */
+ probe: gpt_sync_mbr_probe,
+ /* alloc function redefined */
+ alloc: gpt_sync_mbr_alloc,
+ duplicate: gpt_duplicate,
+ free: gpt_free,
+ read: gpt_read,
+ partition_new: gpt_partition_new,
+ partition_duplicate: gpt_partition_duplicate,
+ partition_set_flag: gpt_partition_set_flag,
+ partition_get_flag: gpt_partition_get_flag,
+ partition_set_system: gpt_partition_set_system,
+ partition_is_flag_available: gpt_partition_is_flag_available,
+ partition_align: gpt_partition_align,
+ partition_destroy: gpt_partition_destroy,
+ partition_enumerate: gpt_partition_enumerate,
+ alloc_metadata: gpt_alloc_metadata,
+ get_max_primary_partition_count: gpt_get_max_primary_partition_count,
+ get_max_supported_partition_count: gpt_get_max_supported_partition_count,
+ partition_check: gpt_partition_check,
+ max_length: gpt_partition_max_length,
+ max_start_sector: gpt_partition_max_start_sector
+};
+
static PedDiskType gpt_disk_type =
{
next: NULL,
@@ -1910,16 +2027,26 @@ static PedDiskType gpt_disk_type =
features: PED_DISK_TYPE_PARTITION_NAME
};
+static PedDiskType gpt_sync_mbr_disk_type =
+{
+ next: NULL,
+ name: "gpt_sync_mbr",
+ ops: &gpt_sync_mbr_disk_ops,
+ features: PED_DISK_TYPE_PARTITION_NAME
+};
+
void
ped_disk_gpt_init ()
{
ped_disk_type_register (&gpt_disk_type);
+ ped_disk_type_register (&gpt_sync_mbr_disk_type);
}
void
ped_disk_gpt_done ()
{
ped_disk_type_unregister (&gpt_disk_type);
+ ped_disk_type_unregister (&gpt_sync_mbr_disk_type);
}
verify (sizeof (GuidPartitionEntryAttributes_t) == 8);

View File

@ -1,157 +0,0 @@
Index: parted-2.4/NEWS
===================================================================
--- parted-2.4.orig/NEWS
+++ parted-2.4/NEWS
@@ -2,6 +2,10 @@ GNU parted NEWS
* Noteworthy changes in release 2.4 (2011-05-18) [stable]
+** New features
+
+ parted has improved support for partitionable loopback devices
+
** Bug fixes
parted no longer allows the modification of certain in-use partitions.
Index: parted-2.4/include/parted/device.h
===================================================================
--- parted-2.4.orig/include/parted/device.h
+++ parted-2.4/include/parted/device.h
@@ -48,7 +48,8 @@ typedef enum {
PED_DEVICE_SDMMC = 14,
PED_DEVICE_VIRTBLK = 15,
PED_DEVICE_AOE = 16,
- PED_DEVICE_MD = 17
+ PED_DEVICE_MD = 17,
+ PED_DEVICE_LOOP = 18
} PedDeviceType;
typedef struct _PedDevice PedDevice;
Index: parted-2.4/libparted/arch/linux.c
===================================================================
--- parted-2.4.orig/libparted/arch/linux.c
+++ parted-2.4/libparted/arch/linux.c
@@ -586,7 +586,7 @@ _device_probe_type (PedDevice* dev)
} else if (_is_virtblk_major(dev_major)) {
dev->type = PED_DEVICE_VIRTBLK;
} else if (dev_major == LOOP_MAJOR) {
- dev->type = PED_DEVICE_FILE;
+ dev->type = PED_DEVICE_LOOP;
} else if (dev_major == MD_MAJOR) {
dev->type = PED_DEVICE_MD;
} else {
@@ -1376,6 +1376,11 @@ linux_new (const char* path)
goto error_free_arch_specific;
break;
+ case PED_DEVICE_LOOP:
+ if (!init_generic (dev, _("Loopback device")))
+ goto error_free_arch_specific;
+ break;
+
case PED_DEVICE_DM:
{
char* type;
@@ -2411,6 +2416,61 @@ _blkpg_remove_partition (PedDisk* disk,
BLKPG_DEL_PARTITION);
}
+/* Read the integer from /sys/block/DEV_BASE/ENTRY and set *VAL
+ to that value, where DEV_BASE is the last component of DEV->path.
+ Upon success, return true. Otherwise, return false. */
+static bool
+_sysfs_int_entry_from_dev(PedDevice const* dev, const char *entry, int *val)
+{
+ char path[128];
+ int r = snprintf(path, sizeof(path), "/sys/block/%s/%s",
+ last_component(dev->path), entry);
+ if (r < 0 || r >= sizeof(path))
+ return false;
+
+ FILE *fp = fopen(path, "r");
+ if (!fp)
+ return false;
+
+ bool ok = fscanf(fp, "%d", val) == 1;
+ fclose(fp);
+
+ return ok;
+}
+
+/* Return the maximum number of partitions that the loopback device can hold.
+ First, check the loop-module-exported max_part parameter (since linux-3.0).
+ If that is not available, fall back to checking ext_range, which seems to
+ have (for some reason) different semantics compared to other devices;
+ specifically, ext_range <= 1 means that the loopback device does
+ not support partitions. */
+static unsigned int
+_loop_get_partition_range(PedDevice const* dev)
+{
+ int max_part;
+ bool ok = false;
+
+ /* max_part module param is exported since kernel 3.0 */
+ FILE *fp = fopen("/sys/module/loop/parameters/max_part", "r");
+ if (fp) {
+ ok = fscanf(fp, "%d", &max_part) == 1;
+ fclose(fp);
+ }
+
+ if (ok)
+ return max_part > 0 ? max_part : 0;
+
+ /*
+ * max_part is not exported - check ext_range;
+ * device supports partitions if ext_range > 1
+ */
+ int range;
+ ok = _sysfs_int_entry_from_dev(dev, "range", &range);
+
+ return ok && range > 1 ? range : 0;
+}
+
+
/*
* The number of partitions that a device can have depends on the kernel.
* If we don't find this value in /sys/block/DEV/ext_range, we will use our own
@@ -2419,22 +2479,12 @@ _blkpg_remove_partition (PedDisk* disk,
static unsigned int
_device_get_partition_range(PedDevice* dev)
{
- int range, r;
- char path[128];
- FILE* fp;
- bool ok;
-
- r = snprintf(path, sizeof(path), "/sys/block/%s/ext_range",
- last_component(dev->path));
- if (r < 0 || r >= sizeof(path))
- return MAX_NUM_PARTS;
+ /* loop handling is special */
+ if (dev->type == PED_DEVICE_LOOP)
+ return _loop_get_partition_range(dev);
- fp = fopen(path, "r");
- if (!fp)
- return MAX_NUM_PARTS;
-
- ok = fscanf(fp, "%d", &range) == 1;
- fclose(fp);
+ int range;
+ bool ok = _sysfs_int_entry_from_dev(dev, "ext_range", &range);
/* (range <= 0) is none sense.*/
return ok && range > 0 ? range : MAX_NUM_PARTS;
Index: parted-2.4/parted/parted.c
===================================================================
--- parted-2.4.orig/parted/parted.c
+++ parted-2.4/parted/parted.c
@@ -1464,7 +1464,7 @@ _print_disk_info (const PedDevice *dev,
"cpqarray", "file", "ataraid", "i2o",
"ubd", "dasd", "viodasd", "sx8", "dm",
"xvd", "sd/mmc", "virtblk", "aoe",
- "md"};
+ "md", "loopback"};
char* start = ped_unit_format (dev, 0);
PedUnit default_unit = ped_unit_get_default ();

View File

@ -1,7 +1,51 @@
Index: parted-2.4/libparted/disk.c
---
include/parted/disk.h | 9 +++++++--
libparted/disk.c | 33 +++++++++++++++++++++++++++++++++
libparted/labels/mac.c | 34 +++++++++++++++++++++++++++++++++-
parted/parted.c | 12 ++++++++++++
4 files changed, 85 insertions(+), 3 deletions(-)
Index: parted-3.1/include/parted/disk.h
===================================================================
--- parted-2.4.orig/libparted/disk.c
+++ parted-2.4/libparted/disk.c
--- parted-3.1.orig/include/parted/disk.h
+++ parted-3.1/include/parted/disk.h
@@ -80,10 +80,11 @@ enum _PedPartitionFlag {
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
- PED_DISK_TYPE_PARTITION_NAME=2 /**< supports partition names */
+ PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
+ PED_DISK_TYPE_SYSTEM_NAME=4 /**< supports system names */
};
#define PED_DISK_TYPE_FIRST_FEATURE PED_DISK_TYPE_EXTENDED
-#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_PARTITION_NAME
+#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_SYSTEM_NAME
struct _PedDisk;
struct _PedPartition;
@@ -243,6 +244,8 @@ struct _PedDiskOps {
/* other */
int (*alloc_metadata) (PedDisk* disk);
int (*get_max_primary_partition_count) (const PedDisk* disk);
+ void (*partition_set_system_name) (PedPartition* part, const char* name);
+ const char* (*partition_get_system_name) (const PedPartition* part);
bool (*get_max_supported_partition_count) (const PedDisk* disk,
int* supported);
PedAlignment *(*get_partition_alignment)(const PedDisk *disk);
@@ -362,7 +365,9 @@ extern int ped_partition_is_flag_availab
extern int ped_partition_set_system (PedPartition* part,
const PedFileSystemType* fs_type);
extern int ped_partition_set_name (PedPartition* part, const char* name);
+extern int ped_partition_set_system_name (PedPartition* part, const char* name);
extern const char* ped_partition_get_name (const PedPartition* part);
+extern const char* ped_partition_get_system_name (const PedPartition* part);
extern int ped_partition_is_busy (const PedPartition* part);
extern char* ped_partition_get_path (const PedPartition* part);
Index: parted-3.1/libparted/disk.c
===================================================================
--- parted-3.1.orig/libparted/disk.c
+++ parted-3.1/libparted/disk.c
@@ -1179,6 +1179,39 @@ _disk_pop_update_mode (PedDisk* disk)
* @{
*/
@ -42,11 +86,11 @@ Index: parted-2.4/libparted/disk.c
PedPartition*
_ped_partition_alloc (const PedDisk* disk, PedPartitionType type,
const PedFileSystemType* fs_type,
Index: parted-2.4/libparted/labels/mac.c
Index: parted-3.1/libparted/labels/mac.c
===================================================================
--- parted-2.4.orig/libparted/labels/mac.c
+++ parted-2.4/libparted/labels/mac.c
@@ -1386,6 +1386,36 @@ mac_get_partition_alignment(const PedDis
--- parted-3.1.orig/libparted/labels/mac.c
+++ parted-3.1/libparted/labels/mac.c
@@ -1395,6 +1395,36 @@ mac_get_partition_alignment(const PedDis
return ped_alignment_new(0, sector_size);
}
@ -83,7 +127,7 @@ Index: parted-2.4/libparted/labels/mac.c
static PedConstraint*
_primary_constraint (PedDisk* disk)
{
@@ -1589,6 +1619,8 @@ static PedDiskOps mac_disk_ops = {
@@ -1598,6 +1628,8 @@ static PedDiskOps mac_disk_ops = {
partition_set_name: mac_partition_set_name,
partition_get_name: mac_partition_get_name,
@ -92,7 +136,7 @@ Index: parted-2.4/libparted/labels/mac.c
get_partition_alignment: mac_get_partition_alignment,
@@ -1599,7 +1631,7 @@ static PedDiskType mac_disk_type = {
@@ -1608,7 +1640,7 @@ static PedDiskType mac_disk_type = {
next: NULL,
name: "mac",
ops: &mac_disk_ops,
@ -101,76 +145,33 @@ Index: parted-2.4/libparted/labels/mac.c
};
void
Index: parted-2.4/include/parted/disk.h
Index: parted-3.1/parted/parted.c
===================================================================
--- parted-2.4.orig/include/parted/disk.h
+++ parted-2.4/include/parted/disk.h
@@ -78,10 +78,11 @@ enum _PedPartitionFlag {
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
- PED_DISK_TYPE_PARTITION_NAME=2 /**< supports partition names */
+ PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
+ PED_DISK_TYPE_SYSTEM_NAME=4 /**< supports system names */
};
#define PED_DISK_TYPE_FIRST_FEATURE PED_DISK_TYPE_EXTENDED
-#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_PARTITION_NAME
+#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_SYSTEM_NAME
struct _PedDisk;
struct _PedPartition;
@@ -241,6 +242,8 @@ struct _PedDiskOps {
/* other */
int (*alloc_metadata) (PedDisk* disk);
int (*get_max_primary_partition_count) (const PedDisk* disk);
+ void (*partition_set_system_name) (PedPartition* part, const char* name);
+ const char* (*partition_get_system_name) (const PedPartition* part);
bool (*get_max_supported_partition_count) (const PedDisk* disk,
int* supported);
PedAlignment *(*get_partition_alignment)(const PedDisk *disk);
@@ -327,7 +330,9 @@ extern int ped_partition_is_flag_availab
extern int ped_partition_set_system (PedPartition* part,
const PedFileSystemType* fs_type);
extern int ped_partition_set_name (PedPartition* part, const char* name);
+extern int ped_partition_set_system_name (PedPartition* part, const char* name);
extern const char* ped_partition_get_name (const PedPartition* part);
+extern const char* ped_partition_get_system_name (const PedPartition* part);
extern int ped_partition_is_busy (const PedPartition* part);
extern char* ped_partition_get_path (const PedPartition* part);
Index: parted-2.4/parted/parted.c
===================================================================
--- parted-2.4.orig/parted/parted.c
+++ parted-2.4/parted/parted.c
@@ -1292,6 +1292,7 @@ partition_print_flags (PedPartition* par
char* res = ped_malloc(1);
void* _res = res;
int xtype;
+ const char* sysname;
*res = '\0';
@@ -1326,6 +1327,23 @@ partition_print_flags (PedPartition* par
}
--- parted-3.1.orig/parted/parted.c
+++ parted-3.1/parted/parted.c
@@ -889,6 +889,7 @@ static char*
partition_print_flags (PedPartition const *part)
{
int xtype;
+ const char* sysname;
char *res = xstrdup ("");
if (!part)
return res;
@@ -921,6 +922,17 @@ partition_print_flags (PedPartition cons
}
}
+ sysname = ped_partition_get_system_name( part );
+ if (sysname) {
+ if (first_flag)
+ first_flag = 0;
+ else {
+ _res = res;
+ ped_realloc (&_res, strlen (res)
+ + 1 + 2);
+ res = _res;
+ strncat (res, ", ", 2);
+ }
+ _res = res;
+ ped_realloc (&_res, strlen (res) + 6 + strlen(sysname));
+ res = _res;
+ strcat (res, "type=");
+ strcat (res, sysname);
+ char tmpstr[21];
+ snprintf(tmpstr, sizeof(tmpstr) - 1, "type=%s", sysname);
+ size_t new_len = res_buf_len + strlen(sep) + strlen(tmpstr);
+ res = xrealloc(res, new_len);
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), tmpstr);
+ res_buf_len = new_len;
+ sep = ", ";
+ }
+
return res;
}

122
parted-resize-command.patch Normal file
View File

@ -0,0 +1,122 @@
---
parted/parted.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 86 insertions(+)
Index: parted-3.1/parted/parted.c
===================================================================
--- parted-3.1.orig/parted/parted.c
+++ parted-3.1/parted/parted.c
@@ -152,6 +152,9 @@ static const char* fs_type_msg_start = N
static const char* start_end_msg = N_("START and END are disk locations, such as "
"4GB or 10%. Negative values count from the end of the disk. "
"For example, -1s specifies exactly the last sector.\n");
+static const char* end_msg = N_("END is disk location, such as "
+ "4GB or 10%. Negative value counts from the end of the disk. "
+ "For example, -1s specifies exactly the last sector.\n");
static const char* state_msg = N_("STATE is one of: on, off\n");
static const char* device_msg = N_("DEVICE is usually /dev/hda or /dev/sda\n");
static const char* name_msg = N_("NAME is any word you want\n");
@@ -461,6 +464,21 @@ constraint_from_start_end (PedDevice* de
range_start, range_end, 1, dev->length);
}
+static PedConstraint*
+constraint_from_start_end_fixed_start (PedDevice* dev, PedSector start_sector,
+ PedGeometry* range_end)
+{
+ PedGeometry range_start;
+ range_start.dev = dev;
+ range_start.start = start_sector;
+ range_start.end = start_sector;
+ range_start.length = 1;
+
+ return ped_constraint_new (ped_alignment_any, ped_alignment_any,
+ &range_start, range_end, 1, dev->length);
+}
+
+
void
help_on (char* topic)
{
@@ -1527,6 +1545,66 @@ error:
return 0;
}
+
+static int
+do_resize (PedDevice** dev)
+{
+ PedDisk *disk;
+ PedPartition *part = NULL;
+ PedSector start, end, oldend;
+ PedGeometry *range_end = NULL;
+ PedConstraint* constraint;
+
+ disk = ped_disk_new (*dev);
+ if (!disk)
+ goto error;
+
+ if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT))
+ if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT,
+ alignment == ALIGNMENT_CYLINDER))
+ goto error;
+
+ if (!command_line_get_partition (_("Partition number?"), disk, &part))
+ goto error;
+ if (!_partition_warn_busy (part))
+ goto error;
+
+ start = part->geom.start;
+ end = oldend = part->geom.end;
+ if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, NULL))
+ goto error;
+ /* Do not move start of the partition */
+ constraint = constraint_from_start_end_fixed_start (*dev, start, range_end);
+ if (!ped_disk_set_partition_geom (disk, part, constraint,
+ start, end))
+ goto error_destroy_constraint;
+ /* warn when shrinking partition - might lose data */
+ if (part->geom.end < oldend)
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_YES_NO,
+ _("Shrinking a partition can cause data loss, " \
+ "are you sure you want to continue?")) != PED_EXCEPTION_YES)
+ goto error_destroy_constraint;
+ ped_disk_commit (disk);
+ ped_constraint_destroy (constraint);
+ if (range_end != NULL)
+ ped_geometry_destroy (range_end);
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+
+ return 1;
+
+error_destroy_constraint:
+ ped_constraint_destroy (constraint);
+error:
+ if (range_end != NULL)
+ ped_geometry_destroy (range_end);
+ return 0;
+}
+
+
static int
do_rm (PedDevice** dev)
{
@@ -1899,6 +1977,14 @@ NULL),
str_list_create (_(start_end_msg), NULL), 1));
command_register (commands, command_create (
+ str_list_create_unique ("resize", _("resize"), NULL),
+ do_resize,
+ str_list_create (
+_("resize NUMBER END change end sector of partition NUMBER"),
+NULL),
+ str_list_create (_(number_msg), _(end_msg), NULL), 1));
+
+command_register (commands, command_create (
str_list_create_unique ("rm", _("rm"), NULL),
do_rm,
str_list_create (

View File

@ -1,18 +0,0 @@
Index: parted-2.4/lib/stdio.in.h
===================================================================
--- parted-2.4.orig/lib/stdio.in.h
+++ parted-2.4/lib/stdio.in.h
@@ -731,11 +731,13 @@ _GL_CXXALIAS_RPL (gets, char *, (char *s
_GL_CXXALIAS_SYS (gets, char *, (char *s));
# undef gets
# endif
+# if HAVE_RAW_DECL_GETS
_GL_CXXALIASWARN (gets);
/* It is very rare that the developer ever has full control of stdin,
so any use of gets warrants an unconditional warning. Assume it is
always declared, since it is required by C89. */
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+# endif
#endif

View File

@ -1,76 +1,16 @@
---
include/parted/disk.h | 9 +++++----
libparted/disk.c | 2 ++
libparted/labels/dos.c | 8 ++++++++
parted/parted.c | 24 +++++++++++++++++++++---
parted/ui.c | 3 +++
5 files changed, 39 insertions(+), 7 deletions(-)
include/parted/disk.h | 5 ++--
libparted/disk.c | 2 +
libparted/labels/dos.c | 8 ++++++
parted/parted.c | 59 ++++++++++++++++++++++++++++++++-----------------
parted/ui.c | 3 ++
5 files changed, 55 insertions(+), 22 deletions(-)
Index: parted-2.4/libparted/disk.c
Index: parted-3.1/include/parted/disk.h
===================================================================
--- parted-2.4.orig/libparted/disk.c
+++ parted-2.4/libparted/disk.c
@@ -2425,6 +2425,8 @@ ped_partition_flag_get_name (PedPartitio
return N_("lba");
case PED_PARTITION_HPSERVICE:
return N_("hp-service");
+ case PED_PARTITION_TYPE:
+ return N_("type");
case PED_PARTITION_PALO:
return N_("palo");
case PED_PARTITION_PREP:
Index: parted-2.4/libparted/labels/dos.c
===================================================================
--- parted-2.4.orig/libparted/labels/dos.c
+++ parted-2.4/libparted/labels/dos.c
@@ -1496,6 +1496,10 @@ msdos_partition_set_flag (PedPartition*
disk = part->disk;
switch (flag) {
+ case PED_PARTITION_TYPE:
+ dos_data->system = state;
+ return 1;
+
case PED_PARTITION_HIDDEN:
if (part->type == PED_PARTITION_EXTENDED) {
ped_exception_throw (
@@ -1591,6 +1595,9 @@ msdos_partition_get_flag (const PedParti
case PED_PARTITION_LBA:
return dos_data->lba;
+ case PED_PARTITION_TYPE:
+ return dos_data->system;
+
case PED_PARTITION_PALO:
return dos_data->palo;
@@ -1617,6 +1624,7 @@ msdos_partition_is_flag_available (const
case PED_PARTITION_RAID:
case PED_PARTITION_LVM:
case PED_PARTITION_LBA:
+ case PED_PARTITION_TYPE:
case PED_PARTITION_PALO:
case PED_PARTITION_PREP:
case PED_PARTITION_DIAG:
Index: parted-2.4/parted/ui.c
===================================================================
--- parted-2.4.orig/parted/ui.c
+++ parted-2.4/parted/ui.c
@@ -917,6 +917,9 @@ command_line_get_integer (const char* pr
NULL, 1);
if (!input)
return 0;
+ if (strstr(input, "0x") == input)
+ valid = sscanf (input, "%x", value);
+ else
valid = sscanf (input, "%d", value);
free (input);
return valid;
Index: parted-2.4/include/parted/disk.h
===================================================================
--- parted-2.4.orig/include/parted/disk.h
+++ parted-2.4/include/parted/disk.h
@@ -70,10 +70,11 @@ enum _PedPartitionFlag {
--- parted-3.1.orig/include/parted/disk.h
+++ parted-3.1/include/parted/disk.h
@@ -72,10 +72,11 @@ enum _PedPartitionFlag {
PED_PARTITION_BIOS_GRUB=12,
PED_PARTITION_APPLE_TV_RECOVERY=13,
PED_PARTITION_DIAG=14,
@ -84,59 +24,123 @@ Index: parted-2.4/include/parted/disk.h
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
Index: parted-2.4/parted/parted.c
Index: parted-3.1/libparted/disk.c
===================================================================
--- parted-2.4.orig/parted/parted.c
+++ parted-2.4/parted/parted.c
@@ -1291,13 +1291,14 @@ partition_print_flags (PedPartition* par
const char* name;
char* res = ped_malloc(1);
void* _res = res;
+ int xtype;
--- parted-3.1.orig/libparted/disk.c
+++ parted-3.1/libparted/disk.c
@@ -2426,6 +2426,8 @@ ped_partition_flag_get_name (PedPartitio
return N_("lba");
case PED_PARTITION_HPSERVICE:
return N_("hp-service");
+ case PED_PARTITION_TYPE:
+ return N_("type");
case PED_PARTITION_PALO:
return N_("palo");
case PED_PARTITION_PREP:
Index: parted-3.1/libparted/labels/dos.c
===================================================================
--- parted-3.1.orig/libparted/labels/dos.c
+++ parted-3.1/libparted/labels/dos.c
@@ -1509,6 +1509,10 @@ msdos_partition_set_flag (PedPartition*
disk = part->disk;
*res = '\0';
switch (flag) {
+ case PED_PARTITION_TYPE:
+ dos_data->system = state;
+ return 1;
+
case PED_PARTITION_HIDDEN:
if (part->type == PED_PARTITION_EXTENDED) {
ped_exception_throw (
@@ -1604,6 +1608,9 @@ msdos_partition_get_flag (const PedParti
case PED_PARTITION_LBA:
return dos_data->lba;
first_flag = 1;
for (flag = ped_partition_flag_next (0); flag;
flag = ped_partition_flag_next (flag)) {
- if (ped_partition_get_flag (part, flag)) {
+ if (xtype = ped_partition_get_flag (part, flag)) {
if (first_flag)
first_flag = 0;
else {
@@ -1306,7 +1307,16 @@ partition_print_flags (PedPartition* par
res = _res;
strncat (res, ", ", 2);
}
+ case PED_PARTITION_TYPE:
+ return dos_data->system;
+
case PED_PARTITION_PALO:
return dos_data->palo;
@@ -1630,6 +1637,7 @@ msdos_partition_is_flag_available (const
case PED_PARTITION_RAID:
case PED_PARTITION_LVM:
case PED_PARTITION_LBA:
+ case PED_PARTITION_TYPE:
case PED_PARTITION_PALO:
case PED_PARTITION_PREP:
case PED_PARTITION_DIAG:
Index: parted-3.1/parted/parted.c
===================================================================
--- parted-3.1.orig/parted/parted.c
+++ parted-3.1/parted/parted.c
@@ -888,28 +888,40 @@ error:
static char*
partition_print_flags (PedPartition const *part)
{
- char *res = xstrdup ("");
- if (!part)
- return res;
-
+ if (flag == PED_PARTITION_TYPE) {
+ char tmpstr[21];
+ int len = snprintf(tmpstr,sizeof(tmpstr)-1,"type=%02x",xtype);
+ _res = res;
+ ped_realloc (&_res, strlen (res) + 1 +
+ ((len>sizeof(tmpstr))?sizeof(tmpstr):len) );
+ res = _res;
+ strncat (res, tmpstr, 21);
- PedPartitionFlag flag;
- size_t res_buf_len = 1;
- char const *sep = "";
- for (flag = ped_partition_flag_next (0); flag;
- flag = ped_partition_flag_next (flag))
- {
- if (ped_partition_get_flag (part, flag))
+ int xtype;
+ char *res = xstrdup ("");
+ if (!part)
+ return res;
+
+ PedPartitionFlag flag;
+ size_t res_buf_len = 1;
+ char const *sep = "";
+ for (flag = ped_partition_flag_next (0); flag;
+ flag = ped_partition_flag_next (flag))
{
- const char *name = _(ped_partition_flag_get_name (flag));
- size_t new_len = res_buf_len + strlen (sep) + strlen (name);
- res = xrealloc (res, new_len);
- stpcpy (stpcpy (res + res_buf_len - 1, sep), name);
- res_buf_len = new_len;
- sep = ", ";
+ if (xtype = ped_partition_get_flag (part, flag))
+ {
+ if (flag == PED_PARTITION_TYPE) {
+ char tmpstr[21];
+ int len = snprintf(tmpstr, sizeof(tmpstr) - 1, "type=%02x", xtype);
+ size_t new_len = res_buf_len + strlen(sep) + strlen(tmpstr);
+ res = xrealloc(res, new_len);
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), tmpstr);
+ res_buf_len = new_len;
+ sep = ", ";
+ }
+ else {
+ const char *name = _(ped_partition_flag_get_name (flag));
+ size_t new_len = res_buf_len + strlen (sep) + strlen (name);
+ res = xrealloc (res, new_len);
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), name);
+ res_buf_len = new_len;
+ sep = ", ";
+ }
+ }
+ else {
name = _(ped_partition_flag_get_name (flag));
_res = res;
ped_realloc (&_res, strlen (res) + 1 + strlen (name));
@@ -1314,6 +1324,7 @@ partition_print_flags (PedPartition* par
strcat(res, name);
}
}
+ }
- }
return res;
- return res;
+ return res;
}
@@ -2156,12 +2167,19 @@ do_set (PedDevice** dev)
static int
@@ -1623,12 +1635,19 @@ do_set (PedDevice** dev)
goto error_destroy_disk;
if (!command_line_get_part_flag (_("Flag to Invert?"), part, &flag))
goto error_destroy_disk;
+ if( flag == PED_PARTITION_TYPE )
+ state = ped_partition_get_flag (part, flag);
+ else
+ if( flag == PED_PARTITION_TYPE )
+ state = ped_partition_get_flag (part, flag);
+ else
state = (ped_partition_get_flag (part, flag) == 0 ? 1 : 0);
- if (!is_toggle_mode) {
@ -144,10 +148,24 @@ Index: parted-2.4/parted/parted.c
if (!command_line_get_state (_("New state?"), &state))
goto error_destroy_disk;
}
+ else if( flag == PED_PARTITION_TYPE ) {
+ if (!command_line_get_integer (_("New type?"), &state))
+ goto error_destroy_disk;
+ }
+ else if( flag == PED_PARTITION_TYPE ) {
+ if (!command_line_get_integer (_("New type?"), &state))
+ goto error_destroy_disk;
+ }
if (!ped_partition_set_flag (part, flag, state))
goto error_destroy_disk;
Index: parted-3.1/parted/ui.c
===================================================================
--- parted-3.1.orig/parted/ui.c
+++ parted-3.1/parted/ui.c
@@ -917,6 +917,9 @@ command_line_get_integer (const char* pr
NULL, 1);
if (!input)
return 0;
+ if (strstr(input, "0x") == input)
+ valid = sscanf (input, "%x", value);
+ else
valid = sscanf (input, "%d", value);
free (input);
return valid;

View File

@ -1,22 +0,0 @@
Index: parted-2.4/libparted/arch/linux.c
===================================================================
--- parted-2.4.orig/libparted/arch/linux.c
+++ parted-2.4/libparted/arch/linux.c
@@ -2413,7 +2413,7 @@ _blkpg_remove_partition (PedDisk* disk,
/*
* The number of partitions that a device can have depends on the kernel.
- * If we don't find this value in /sys/block/DEV/range, we will use our own
+ * If we don't find this value in /sys/block/DEV/ext_range, we will use our own
* value.
*/
static unsigned int
@@ -2424,7 +2424,7 @@ _device_get_partition_range(PedDevice* d
FILE* fp;
bool ok;
- r = snprintf(path, sizeof(path), "/sys/block/%s/range",
+ r = snprintf(path, sizeof(path), "/sys/block/%s/ext_range",
last_component(dev->path));
if (r < 0 || r >= sizeof(path))
return MAX_NUM_PARTS;

View File

@ -1,8 +1,12 @@
Index: parted-2.3/libparted/labels/dos.c
---
libparted/labels/dos.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
Index: parted-3.1/libparted/labels/dos.c
===================================================================
--- parted-2.3.orig/libparted/labels/dos.c 2010-07-08 13:28:03.000000000 +0200
+++ parted-2.3/libparted/labels/dos.c 2010-07-08 13:28:13.000000000 +0200
@@ -1176,7 +1176,13 @@ msdos_write (const PedDisk* disk)
--- parted-3.1.orig/libparted/labels/dos.c
+++ parted-3.1/libparted/labels/dos.c
@@ -1260,7 +1260,13 @@ msdos_write (const PedDisk* disk)
return 0;
DosRawTable *table = (DosRawTable *) s0;

View File

@ -1,3 +1,52 @@
-------------------------------------------------------------------
Wed Jan 8 15:32:34 UTC 2014 - puzel@suse.com
- update to parted-3.1 (fate#316110)
- changes in parted-3.1:
* Changes in behavior
- Floppy drives are no longer scanned on linux: they cannot be
partitioned anyhow, and some users have a misconfigured BIOS
that claims to have a floppy when they don't, and scanning
gets hung up.
- parted: the mkpart command has changed semantics with regard
to specifying the end of the partition. If the end is
specified using units of MiB, GiB, etc., parted subtracts one
sector from the specified value. With this change, it is now
possible to create partitions like 1MiB-2MiB, 2MiB-3MiB and
so on.
* Many bugfixes (see changelog)
- changes in parted-3.0:
* Changes in behavior
- Remove all FS-related (file system-related) sub-commands;
these commands are no longer recognized because they were all
dependent on parted "knowing" too much about file system:
mkpartfs, mkfs, cp, move, check.
- 'resize' command changed semantics:
it no longer resizes the filesystem, but only moves end
sector of the partition
- libparted-devel contains libparted-fs-resize library
- add ability to change size of the partition (ignoring contained
filesystem) with 'resize' command; this command has different
semantics than the former 'resize' command which upstream
decided to drop
- parted-resize-command.patch (fate#316110)
- when using syncmbr on POWER, make the first partition type 0x41
(PReP boot) (bnc#797485)
- add libparted-ppc-prepboot-in-syncmbr.patch
- support for PReP GUID (bnc#797485)
- parted-GPT-add-support-for-PReP-GUID.patch
- Build requires makeinfo
- drop fix-function-def.patch (not needed)
- drop parted-stdio.h.patch (not needed)
- drop parted-use-ext-range.patch (upstream)
- drop fix-nilfs2-probe-function.patch (upstream)
- drop parted-improve-loop-support.patch (upstream)
- drop always-resize-part.dif (FS support removed)
- merged following hybrid pMBR patches:
parted-gpt-mbr-sync.patch,
parted-gpt-sync-mbr-label.patch,
parted-fix-gpt-sync-on-BE-systems.patch
-------------------------------------------------------------------
Mon Dec 30 09:15:06 UTC 2013 - puzel@suse.com

View File

@ -1,7 +1,7 @@
#
# spec file for package parted
#
# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -17,43 +17,44 @@
Name: parted
Version: 2.4
Version: 3.1
Release: 0
Summary: GNU partitioner
License: GPL-3.0+
Group: System/Filesystems
Url: http://www.gnu.org/software/parted/
Source0: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.gz
Source1: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.gz.sig
Source0: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.xz
Source1: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.xz.sig
Source2: parted.keyring
Source3: baselibs.conf
Patch0: always-resize-part.dif
Patch1: parted-type.patch
Patch2: parted-mac.patch
Patch3: parted-wipeaix.patch
Patch5: hfs_fix.dif
Patch7: fix-function-def.patch
Patch8: parted-gpt-mbr-sync.patch
#PATCH-FEATURE-OPENSUSE fix-dm-partition-name.patch bnc471440,447591 petr.uzel@suse.cz
Patch10: fix-dm-partition-name.patch
#PATCH-FEATURE-OPENSUSE do-not-create-dm-nodes.patch bnc#501773 petr.uzel@suse.cz
Patch11: do-not-create-dm-nodes.patch
#PATCH-FEATURE-OPENSUSE more-reliable-informing-the-kernel.patch bnc#657360 petr.uzel@suse.cz
Patch12: more-reliable-informing-the-kernel.patch
Patch13: parted-2.4-ncursesw6.patch
Patch14: parted-gpt-sync-mbr-label.patch
Patch15: parted-use-ext-range.patch
Patch16: parted-improve-loop-support.patch
Patch17: fix-nilfs2-probe-function.patch
Patch18: parted-fix-cciss-partition-naming.patch
Patch19: dummy-bootcode-only-for-x86.patch
Patch20: parted-stdio.h.patch
# Build patches
Patch1: parted-2.4-ncursesw6.patch
# Other patches
Patch10: hfs_fix.dif
Patch11: parted-wipeaix.patch
Patch12: fix-error-informing-the-kernel.patch
#PATCH-FEATURE-SUSE fix-dm-partition-name.patch bnc471440,447591 petr.uzel@suse.cz
Patch13: fix-dm-partition-name.patch
Patch14: parted-fix-cciss-partition-naming.patch
Patch15: libparted-fix-mmcblk-partition-name.patch
#PATCH-FEATURE-SUSE do-not-create-dm-nodes.patch bnc#501773 petr.uzel@suse.cz
Patch16: do-not-create-dm-nodes.patch
#PATCH-FEATURE-SUSE more-reliable-informing-the-kernel.patch bnc#657360 petr.uzel@suse.cz
Patch17: more-reliable-informing-the-kernel.patch
#PATCH-FEATURE-SUSE revert-gpt-add-commands-to-manipulate-pMBR-boot-flag.patch
# (clashes with our hybrid pMBR patches)
Patch18: revert-gpt-add-commands-to-manipulate-pMBR-boot-flag.patch
Patch19: parted-gpt-mbr-sync.patch
Patch20: libparted-ppc-prepboot-in-syncmbr.patch
Patch21: parted-workaround-windows7-gpt-implementation.patch
Patch22: fix-error-informing-the-kernel.patch
Patch23: parted-fix-gpt-sync-on-BE-systems.patch
Patch24: parted-btrfs-support.patch
Patch22: dummy-bootcode-only-for-x86.patch
Patch23: parted-type.patch
Patch24: parted-mac.patch
Patch25: parted-Add-Intel-Rapid-Start-Technology-partition.patch
Patch26: libparted-fix-mmcblk-partition-name.patch
Patch26: parted-btrfs-support.patch
Patch27: parted-GPT-add-support-for-PReP-GUID.patch
Patch28: parted-resize-command.patch
Requires: /sbin/udevadm
BuildRequires: check-devel
BuildRequires: device-mapper-devel >= 1.02.33
@ -64,6 +65,7 @@ BuildRequires: libselinux-devel
BuildRequires: libsepol-devel
BuildRequires: libtool
BuildRequires: libuuid-devel
BuildRequires: makeinfo
BuildRequires: pkg-config
BuildRequires: readline-devel
%if %suse_version >= 1230
@ -108,17 +110,11 @@ to develop applications that require these.
%prep
%{?gpg_verify: %gpg_verify %{S:1}}
%setup -q
%patch0
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch5 -p1
%patch7
%patch8
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
@ -132,18 +128,20 @@ to develop applications that require these.
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%build
export CFLAGS="%{optflags} `ncursesw6-config --cflags`"
export LDFLAGS="`ncursesw6-config --libs`"
AUTOPOINT=true autoreconf --force --install
%configure --disable-static \
--with-pic \
%configure --disable-static \
--with-pic \
--enable-device-mapper=yes \
--enable-dynamic-loading=no \
--enable-selinux \
--disable-Werror \
--disable-silent-rules
--disable-Werror \
--disable-silent-rules
make %{?_smp_mflags}
%install

View File

@ -0,0 +1,313 @@
From ff10810537db7b9d1f287bed3c71a7570d395ba2 Mon Sep 17 00:00:00 2001
From: Petr Uzel <petr.uzel@suse.cz>
Date: Wed, 8 Jan 2014 18:01:15 +0100
Subject: [PATCH] Revert "gpt: add commands to manipulate pMBR boot flag"
This reverts commit a73918ea6d9477ac3e8dad11ed62c87aecc49714.
Conflicts:
libparted/labels/gpt.c
---
include/parted/disk.in.h | 4 --
libparted/disk.c | 3 --
libparted/labels/gpt.c | 59 +-----------------------------------------
parted/parted.c | 66 -----------------------------------------------
parted/ui.c | 29 --------------------
parted/ui.h | 3 --
6 files changed, 4 insertions(+), 160 deletions(-)
Index: parted-3.1/include/parted/disk.in.h
===================================================================
--- parted-3.1.orig/include/parted/disk.in.h
+++ parted-3.1/include/parted/disk.in.h
@@ -36,11 +36,9 @@ enum _PedDiskFlag {
This flag is available for msdos and sun disklabels (for sun labels
it only controls the aligning of the end of the partition) */
PED_DISK_CYLINDER_ALIGNMENT=1,
- /* This flag controls whether the boot flag of a GPT PMBR is set */
- PED_DISK_GPT_PMBR_BOOT=2,
};
#define PED_DISK_FIRST_FLAG PED_DISK_CYLINDER_ALIGNMENT
-#define PED_DISK_LAST_FLAG PED_DISK_GPT_PMBR_BOOT
+#define PED_DISK_LAST_FLAG PED_DISK_CYLINDER_ALIGNMENT
/**
* Partition types
Index: parted-3.1/libparted/disk.c
===================================================================
--- parted-3.1.orig/libparted/disk.c
+++ parted-3.1/libparted/disk.c
@@ -836,8 +836,7 @@ ped_disk_flag_get_name(PedDiskFlag flag)
switch (flag) {
case PED_DISK_CYLINDER_ALIGNMENT:
return N_("cylinder_alignment");
- case PED_DISK_GPT_PMBR_BOOT:
- return N_("pmbr_boot");
+
default:
ped_exception_throw (
PED_EXCEPTION_BUG,
Index: parted-3.1/libparted/labels/gpt.c
===================================================================
--- parted-3.1.orig/libparted/labels/gpt.c
+++ parted-3.1/libparted/labels/gpt.c
@@ -264,7 +264,6 @@ struct __attribute__ ((packed)) _GPTDisk
PedGeometry data_area;
int entry_count;
efi_guid_t uuid;
- int pmbr_boot;
};
/* uses libparted's disk_specific field in PedPartition, to store our info */
@@ -536,7 +535,6 @@ gpt_alloc (const PedDevice *dev)
gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES;
uuid_generate ((unsigned char *) &gpt_disk_data->uuid);
swap_uuid_and_efi_guid ((unsigned char *) (&gpt_disk_data->uuid));
- gpt_disk_data->pmbr_boot = 0;
return disk;
error_free_disk:
@@ -845,14 +843,6 @@ gpt_read_headers (PedDisk const *disk,
*backup_gpt = NULL;
PedDevice const *dev = disk->dev;
GPTDiskData *gpt_disk_data = disk->disk_specific;
- LegacyMBR_t *mbr;
-
- if (!ptt_read_sector (dev, 0, (void *)&mbr))
- return 1;
-
- if (mbr->PartitionRecord[0].BootIndicator == 0x80)
- gpt_disk_data->pmbr_boot = 1;
- free (mbr);
void *s1;
if (!ptt_read_sector (dev, 1, &s1))
@@ -1090,7 +1080,7 @@ error:
#ifndef DISCOVER_ONLY
/* Write the protective MBR (to keep DOS happy) */
static int
-_write_pmbr (PedDevice *dev, bool pmbr_boot)
+_write_pmbr (PedDevice *dev)
{
/* The UEFI spec is not clear about what to do with the following
elements of the Protective MBR (pmbr): BootCode (0-440B),
@@ -1115,8 +1105,6 @@ _write_pmbr (PedDevice *dev, bool pmbr_b
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF);
else
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL);
- if (pmbr_boot)
- pmbr->PartitionRecord[0].BootIndicator = 0x80;
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
GPT_PMBR_SECTORS);
@@ -1237,7 +1225,7 @@ gpt_write (const PedDisk *disk)
ptes_crc = efi_crc32 (ptes, ptes_bytes);
/* Write protective MBR */
- if (!_write_pmbr (disk->dev, gpt_disk_data->pmbr_boot))
+ if (!_write_pmbr (disk->dev))
goto error_free_ptes;
/* Write PTH and PTEs */
@@ -1523,46 +1511,6 @@ gpt_partition_enumerate (PedPartition *p
}
static int
-gpt_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state)
-{
- GPTDiskData *gpt_disk_data = disk->disk_specific;
- switch (flag)
- {
- case PED_DISK_GPT_PMBR_BOOT:
- gpt_disk_data->pmbr_boot = state;
- return 1;
- default:
- return 0;
- }
-}
-
-static int
-gpt_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag)
-{
- switch (flag)
- {
- case PED_DISK_GPT_PMBR_BOOT:
- return 1;
- default:
- return 0;
- }
-}
-
-static int
-gpt_disk_get_flag (const PedDisk *disk, PedDiskFlag flag)
-{
- GPTDiskData *gpt_disk_data = disk->disk_specific;
- switch (flag)
- {
- case PED_DISK_GPT_PMBR_BOOT:
- return gpt_disk_data->pmbr_boot;
- break;
- default:
- return 0;
- }
-}
-
-static int
gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
{
GPTPartitionData *gpt_part_data;
@@ -1850,9 +1798,6 @@ static PedDiskOps gpt_disk_ops =
partition_set_name: gpt_partition_set_name,
partition_get_name: gpt_partition_get_name,
- disk_set_flag: gpt_disk_set_flag,
- disk_get_flag: gpt_disk_get_flag,
- disk_is_flag_available: gpt_disk_is_flag_available,
PT_op_function_initializers (gpt)
};
Index: parted-3.1/parted/parted.c
===================================================================
--- parted-3.1.orig/parted/parted.c
+++ parted-3.1/parted/parted.c
@@ -1608,43 +1608,6 @@ error:
}
static int
-do_disk_set (PedDevice** dev)
-{
- PedDisk* disk;
- PedDiskFlag flag;
- int state;
-
- disk = ped_disk_new (*dev);
- if (!disk)
- goto error;
-
- if (!command_line_get_disk_flag (_("Flag to Invert?"), disk, &flag))
- goto error_destroy_disk;
- state = (ped_disk_get_flag (disk, flag) == 0 ? 1 : 0);
-
- if (!is_toggle_mode) {
- if (!command_line_get_state (_("New state?"), &state))
- goto error_destroy_disk;
- }
-
- if (!ped_disk_set_flag (disk, flag, state))
- goto error_destroy_disk;
- if (!ped_disk_commit (disk))
- goto error_destroy_disk;
- ped_disk_destroy (disk);
-
- if ((*dev)->type != PED_DEVICE_FILE)
- disk_is_modified = 1;
-
- return 1;
-
-error_destroy_disk:
- ped_disk_destroy (disk);
-error:
- return 0;
-}
-
-static int
do_set (PedDevice** dev)
{
PedDisk* disk;
@@ -1685,18 +1648,6 @@ error:
}
static int
-do_disk_toggle (PedDevice **dev)
-{
- int result;
-
- is_toggle_mode = 1;
- result = do_disk_set (dev);
- is_toggle_mode = 0;
-
- return result;
-}
-
-static int
do_toggle (PedDevice **dev)
{
int result;
@@ -1933,23 +1884,6 @@ NULL),
str_list_create (_(device_msg), NULL), 1));
command_register (commands, command_create (
- str_list_create_unique ("disk_set", _("disk_set"), NULL),
- do_disk_set,
- str_list_create (
-_("disk_set FLAG STATE change the FLAG on selected device"),
-NULL),
- str_list_create (flag_msg, _(state_msg), NULL), 1));
-
-command_register (commands, command_create (
- str_list_create_unique ("disk_toggle", _("disk_toggle"), NULL),
- do_disk_toggle,
- str_list_create (
-_("disk_toggle [FLAG] toggle the state of FLAG on "
-"selected device"),
-NULL),
- str_list_create (flag_msg, NULL), 1));
-
-command_register (commands, command_create (
str_list_create_unique ("set", _("set"), NULL),
do_set,
str_list_create (
Index: parted-3.1/parted/ui.c
===================================================================
--- parted-3.1.orig/parted/ui.c
+++ parted-3.1/parted/ui.c
@@ -1116,35 +1116,6 @@ command_line_get_disk_type (const char*
}
int
-command_line_get_disk_flag (const char* prompt, const PedDisk* disk,
- PedDiskFlag* flag)
-{
- StrList* opts = NULL;
- PedPartitionFlag walk = 0;
- char* flag_name;
-
- while ( (walk = ped_disk_flag_next (walk)) ) {
- if (ped_disk_is_flag_available (disk, walk)) {
- const char* walk_name;
-
- walk_name = ped_disk_flag_get_name (walk);
- opts = str_list_append (opts, walk_name);
- opts = str_list_append_unique (opts, _(walk_name));
- }
- }
-
- flag_name = command_line_get_word (prompt, NULL, opts, 1);
- str_list_destroy (opts);
-
- if (flag_name) {
- *flag = ped_disk_flag_get_by_name (flag_name);
- free (flag_name);
- return 1;
- } else
- return 0;
-}
-
-int
command_line_get_part_flag (const char* prompt, const PedPartition* part,
PedPartitionFlag* flag)
{
Index: parted-3.1/parted/ui.h
===================================================================
--- parted-3.1.orig/parted/ui.h
+++ parted-3.1/parted/ui.h
@@ -63,9 +63,6 @@ extern int command_line_get_fs_type (con
const PedFileSystemType*(* value));
extern int command_line_get_disk_type (const char* prompt,
const PedDiskType*(* value));
-extern int command_line_get_disk_flag (const char* prompt,
- const PedDisk* disk,
- PedDiskFlag* flag);
extern int command_line_get_part_flag (const char* prompt,
const PedPartition* part,
PedPartitionFlag* flag);