File parted-mac.patch of Package parted

Index: parted-2.4/libparted/disk.c
===================================================================
--- parted-2.4.orig/libparted/disk.c
+++ parted-2.4/libparted/disk.c
@@ -1179,6 +1179,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-2.4/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
         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)
 {
@@ -1589,6 +1619,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,
 
@@ -1599,7 +1631,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-2.4/include/parted/disk.h
===================================================================
--- 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
         }
         }
 
+	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);
+	}
         return res;
 }
 
openSUSE Build Service is sponsored by