forked from pool/parted
- changes in parted-3.1: * Changes in behavior - Floppy drives are no longer scanned on linux: they cannot be partitioned anyhow, and some users have a misconfigured BIOS that claims to have a floppy when they don't, and scanning gets hung up. - parted: the mkpart command has changed semantics with regard to specifying the end of the partition. If the end is specified using units of MiB, GiB, etc., parted subtracts one sector from the specified value. With this change, it is now possible to create partitions like 1MiB-2MiB, 2MiB-3MiB and so on. * Many bugfixes (see changelog) - changes in parted-3.0: * Changes in behavior - Remove all FS-related (file system-related) sub-commands; these commands are no longer recognized because they were all dependent on parted "knowing" too much about file system: mkpartfs, mkfs, cp, move, check. - 'resize' command changed semantics: it no longer resizes the filesystem, but only moves end sector of the partition - libparted-devel contains libparted-fs-resize library - add ability to change size of the partition (ignoring contained filesystem) with 'resize' command; this command has different semantics than the former 'resize' command which upstream decided to drop - parted-resize-command.patch (fate#316110) - when using syncmbr on POWER, make the first partition type 0x41 OBS-URL: https://build.opensuse.org/package/show/Base:System/parted?expand=0&rev=79
178 lines
6.1 KiB
Diff
178 lines
6.1 KiB
Diff
---
|
|
include/parted/disk.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.1/include/parted/disk.h
|
|
===================================================================
|
|
--- parted-3.1.orig/include/parted/disk.h
|
|
+++ parted-3.1/include/parted/disk.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);
|
|
@@ -362,7 +365,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
|
|
@@ -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-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;
|
|
}
|
|
|