From: Petr Uzel 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; }