parted/parted-mac.patch
Arvin Schnell 839b5cc0ae Accepting request 1143217 from home:aschnell:parted
- update to version 3.6:
  - Support GPT partition attribute bit 63 as no_automount flag
  - Add type commands to set type-id on MS-DOS and type-uuid on GPT
  - Add swap flag support to the dasd disklabel
  - Add display of GPT disk and partition UUIDs in JSON output
  refreshed patches:
  - parted-mac.patch
  - libparted-dasd-implicit-partition-disk-flag.patch
  - tests-disable.patch
  removed patches:
  - direct-handling-of-partition-type-id-and-uuid.patch
  - type-command.patch
  - libparted-dasd-improve-lvm-raid-flag-handling.patch
  - libparted-dasd-add-swap-flag-handling-for-DASD-CDL.patch

OBS-URL: https://build.opensuse.org/request/show/1143217
OBS-URL: https://build.opensuse.org/package/show/Base:System/parted?expand=0&rev=157
2024-02-01 10:17:23 +00:00

180 lines
5.9 KiB
Diff

From: Petr Uzel <petr.uzel@suse.cz>
Subject: parted: mac: Print the system name
Patch-mainline: no, custom SUSE patch
---
include/parted/disk.in.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.3/include/parted/disk.in.h
===================================================================
--- parted-3.3.orig/include/parted/disk.in.h
+++ parted-3.3/include/parted/disk.in.h
@@ -101,10 +101,11 @@
PED_DISK_TYPE_PARTITION_TYPE_UUID=8, /**< supports partition type-uuids */
PED_DISK_TYPE_DISK_UUID=16, /**< supports disk uuids */
PED_DISK_TYPE_PARTITION_UUID=32, /**< supports partition uuids */
+ PED_DISK_TYPE_SYSTEM_NAME=64 /**< supports system names */
};
// NOTE: DO NOT define using enums
#define PED_DISK_TYPE_FIRST_FEATURE 1 // PED_DISK_TYPE_EXTENDED
-#define PED_DISK_TYPE_LAST_FEATURE 32 // PED_DISK_TYPE_PARTITION_UUID
+#define PED_DISK_TYPE_LAST_FEATURE 64 // PED_DISK_TYPE_SYSTEM_NAME
struct _PedDisk;
struct _PedPartition;
@@ -274,6 +275,8 @@
/* 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);
@@ -369,6 +372,9 @@
extern int ped_partition_set_name (PedPartition* part, const char* name);
extern const char* ped_partition_get_name (const PedPartition* part);
+extern int ped_partition_set_system_name (PedPartition* part, const char* name);
+extern const char* ped_partition_get_system_name (const PedPartition* part);
+
extern int ped_partition_set_type_id (PedPartition* part, uint8_t id);
extern uint8_t ped_partition_get_type_id (const PedPartition* part);
Index: parted-3.3/libparted/disk.c
===================================================================
--- parted-3.3.orig/libparted/disk.c
+++ parted-3.3/libparted/disk.c
@@ -1185,6 +1185,39 @@ _disk_pop_update_mode (PedDisk* disk)
* @{
*/
+const char*
+ped_partition_get_system_name (const PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!ped_disk_type_check_feature (
+ part->disk->type, PED_DISK_TYPE_SYSTEM_NAME))
+ return NULL; /* silent skip */
+
+ PED_ASSERT (part->disk->type->ops->partition_get_system_name != NULL);
+ return part->disk->type->ops->partition_get_system_name (part);
+}
+
+int
+ped_partition_set_system_name (PedPartition* part, const char* name)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+ PED_ASSERT (name != NULL);
+
+ if (!ped_disk_type_check_feature (
+ part->disk->type, PED_DISK_TYPE_SYSTEM_NAME))
+ return 0; /* silent skip */
+
+ PED_ASSERT (part->disk->type->ops->partition_set_system_name != NULL);
+ part->disk->type->ops->partition_set_system_name (part, name);
+ return 1;
+}
+
+
PedPartition*
_ped_partition_alloc (const PedDisk* disk, PedPartitionType type,
const PedFileSystemType* fs_type,
Index: parted-3.3/libparted/labels/mac.c
===================================================================
--- parted-3.3.orig/libparted/labels/mac.c
+++ parted-3.3/libparted/labels/mac.c
@@ -1396,6 +1396,36 @@ mac_get_partition_alignment(const PedDis
return ped_alignment_new(0, 1);
}
+/* we do not really want to call this ... yet */
+static void
+mac_partition_set_system_name (PedPartition* part, const char* name)
+{
+ MacPartitionData* mac_data;
+ int i;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ mac_data = part->disk_specific;
+
+ strncpy (mac_data->system_name, name, 32);
+ mac_data->system_name [32] = 0;
+ for (i = strlen (mac_data->system_name) - 1;
+ mac_data->system_name[i] == ' '; i--)
+ mac_data->system_name [i] = 0;
+}
+
+static const char*
+mac_partition_get_system_name (const PedPartition* part)
+{
+ MacPartitionData* mac_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ mac_data = part->disk_specific;
+
+ return mac_data->system_name;
+}
+
static PedConstraint*
_primary_constraint (PedDisk* disk)
{
@@ -1596,6 +1626,8 @@ static PedDiskOps mac_disk_ops = {
partition_set_name: mac_partition_set_name,
partition_get_name: mac_partition_get_name,
+ partition_set_system_name: mac_partition_set_system_name,
+ partition_get_system_name: mac_partition_get_system_name,
get_partition_alignment: mac_get_partition_alignment,
@@ -1606,7 +1638,7 @@ static PedDiskType mac_disk_type = {
next: NULL,
name: "mac",
ops: &mac_disk_ops,
- features: PED_DISK_TYPE_PARTITION_NAME
+ features: PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_SYSTEM_NAME
};
void
Index: parted-3.3/parted/parted.c
===================================================================
--- parted-3.3.orig/parted/parted.c
+++ parted-3.3/parted/parted.c
@@ -946,6 +946,7 @@
static char*
partition_print_flags (PedPartition const *part)
{
+ const char* sysname;
char *res = xstrdup ("");
if (!part)
return res;
@@ -967,6 +968,17 @@
}
}
+ sysname = ped_partition_get_system_name( part );
+ if (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;
}