OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/parted?expand=0&rev=105
178 lines
6.1 KiB
Diff
178 lines
6.1 KiB
Diff
---
|
|
include/parted/disk.in.h | 9 +++++++--
|
|
libparted/disk.c | 33 +++++++++++++++++++++++++++++++++
|
|
libparted/labels/mac.c | 34 +++++++++++++++++++++++++++++++++-
|
|
parted/parted.c | 12 ++++++++++++
|
|
5 files changed, 92 insertions(+), 5 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
|
|
@@ -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);
|
|
@@ -334,7 +337,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
|
|
@@ -1180,6 +1180,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.1/libparted/labels/mac.c
|
|
===================================================================
|
|
--- 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);
|
|
}
|
|
|
|
+/* 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)
|
|
{
|
|
@@ -1598,6 +1628,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,
|
|
|
|
@@ -1608,7 +1640,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.1/parted/parted.c
|
|
===================================================================
|
|
--- 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) {
|
|
+ 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;
|
|
}
|
|
|