parted/parted-type.patch
Petr Uzel 5a2cd49a44 Accepting request 303792 from home:puzel:branches:Base:System
- Update to parted-3.2; Notable changes:
  - Added new partition type flag, esp, to set the type to 0xEF on
    MS-DOS.  Also aliased to boot on GPT to set the UEFI ESP GUID.
  - You can now choose to ignore errors about partitions that
    overlap, or are longer than the disk.  This allows you to use
    parted to repair the problem.
  - When attempting to manipulate a mounted partition, parted now
    issues a warning that you can choose to ignore, instead of an
    error.
  - When creating a loop label, it automatically comes with a
    partition using the whole disk.
  - parted -l no longer lists device-mapper devices other than
    dmraid whole disks.
  - Added new Linux-specific partition GUID type code
    (0FC63DAF-8483-4772-8E79-3D69D8477DE4) for Linux filesystem
    data on GPT disks.  This type code is now assigned as the
    default partition type code for new partitions holding Linux
    filesystems.
  - Added new "msftdata" flag to identify partitions holding NTFS
    or FAT filesystems on GPT disks.  This flag corresponds to a
    GPT type code of EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
    ("Microsoft Basic Data").  Since Linux filesystem partitions
    formerly used this type code, this flag may optionally be set
    on Linux partitions to make the partition table type codes
    match former configurations in case the new Linux filesystem
    type code causes problems with some utility.  Note that this
    flag cannot be removed from NTFS or FAT partitions within
    parted except by setting a competing flag, such as "boot"
    (which sets the type code used by EFI System partitions) or
    "msftres" (which sets the "Microsoft Reserved" type code).

OBS-URL: https://build.opensuse.org/request/show/303792
OBS-URL: https://build.opensuse.org/package/show/Base:System/parted?expand=0&rev=109
2015-04-24 15:49:30 +00:00

173 lines
6.1 KiB
Diff

---
include/parted/disk.in.h | 5 ++-
libparted/disk.c | 2 +
libparted/labels/dos.c | 8 ++++++
parted/parted.c | 61 ++++++++++++++++++++++++++++++-----------------
parted/ui.c | 3 ++
5 files changed, 56 insertions(+), 23 deletions(-)
Index: parted-3.2/include/parted/disk.in.h
===================================================================
--- parted-3.2.orig/include/parted/disk.in.h
+++ parted-3.2/include/parted/disk.in.h
@@ -75,10 +75,11 @@ enum _PedPartitionFlag {
PED_PARTITION_LEGACY_BOOT=15,
PED_PARTITION_MSFT_DATA=16,
PED_PARTITION_IRST=17,
- PED_PARTITION_ESP=18
+ PED_PARTITION_ESP=18,
+ PED_PARTITION_TYPE=19
};
#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_ESP
+#define PED_PARTITION_LAST_FLAG PED_PARTITION_TYPE
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
Index: parted-3.2/libparted/disk.c
===================================================================
--- parted-3.2.orig/libparted/disk.c
+++ parted-3.2/libparted/disk.c
@@ -2388,6 +2388,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.2/libparted/labels/dos.c
===================================================================
--- parted-3.2.orig/libparted/labels/dos.c
+++ parted-3.2/libparted/labels/dos.c
@@ -1550,6 +1550,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 (
@@ -1657,6 +1661,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;
@@ -1689,6 +1696,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_IRST:
Index: parted-3.2/parted/parted.c
===================================================================
--- parted-3.2.orig/parted/parted.c
+++ parted-3.2/parted/parted.c
@@ -887,28 +887,40 @@ error:
static char*
partition_print_flags (PedPartition const *part)
{
- 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))
- {
- 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 = ", ";
+ }
+ }
}
- }
- return res;
+ return res;
}
static int
@@ -1726,12 +1738,19 @@ do_set (PedDevice** dev, PedDisk **diskp
goto error;
if (!command_line_get_part_flag (_("Flag to Invert?"), part, &flag))
goto error;
- state = (ped_partition_get_flag (part, flag) == 0 ? 1 : 0);
+ 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) {
+ if (!is_toggle_mode && flag != PED_PARTITION_TYPE ) {
if (!command_line_get_state (_("New state?"), &state))
goto error;
}
+ else if( flag == PED_PARTITION_TYPE ) {
+ if (!command_line_get_integer (_("New type?"), &state))
+ goto error;
+ }
if (!ped_partition_set_flag (part, flag, state))
goto error;
Index: parted-3.2/parted/ui.c
===================================================================
--- parted-3.2.orig/parted/ui.c
+++ parted-3.2/parted/ui.c
@@ -913,6 +913,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;