On Sat, Jun 25, 2011 at 11:08:44PM -0700, ben wrote: > Using libparted is there a way to set the system ID of the partition, for > instance 0x83 for linux, without using libparted to actualy write a > filesystem > to the partition?
As far as I know, this is not possible with vanilla parted. However, you finally forced me to post here our SUSE patch that 'abuses' partition flags in (lib)parted for setting partition types. Attaching version that applies to parted-2.4. ------ # parted -s /dev/sdb set 1 type 0x83 # parted -s /dev/sdb print Model: Linux scsi_debug (scsi) Disk /dev/sdb: 8389kB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 32.8kB 5014kB 4981kB primary type=83 ------ Jim, if I clean (at least the testsuite has to be adapted) the patch, would you be willing to accept it? Thanks, Petr -- Petr Uzel IRC: ptr_uzl @ freenode
---
include/parted/disk.h | 9 +++++----
libparted/disk.c | 2 ++
libparted/labels/dos.c | 8 ++++++++
parted/parted.c | 24 +++++++++++++++++++++---
parted/ui.c | 3 +++
5 files changed, 39 insertions(+), 7 deletions(-)
Index: parted-2.4/libparted/disk.c
===================================================================
--- parted-2.4.orig/libparted/disk.c
+++ parted-2.4/libparted/disk.c
@@ -2425,6 +2425,8 @@ ped_partition_flag_get_name (PedPartitio
return N_("lba");
case PED_PARTITION_HPSERVICE:
return N_("hp-service");
+ case PED_PARTITION_TYPE:
+ return N_("type");
case PED_PARTITION_PALO:
return N_("palo");
case PED_PARTITION_PREP:
Index: parted-2.4/libparted/labels/dos.c
===================================================================
--- parted-2.4.orig/libparted/labels/dos.c
+++ parted-2.4/libparted/labels/dos.c
@@ -1496,6 +1496,10 @@ msdos_partition_set_flag (PedPartition*
disk = part->disk;
switch (flag) {
+ case PED_PARTITION_TYPE:
+ dos_data->system = state;
+ return 1;
+
case PED_PARTITION_HIDDEN:
if (part->type == PED_PARTITION_EXTENDED) {
ped_exception_throw (
@@ -1591,6 +1595,9 @@ msdos_partition_get_flag (const PedParti
case PED_PARTITION_LBA:
return dos_data->lba;
+ case PED_PARTITION_TYPE:
+ return dos_data->system;
+
case PED_PARTITION_PALO:
return dos_data->palo;
@@ -1617,6 +1624,7 @@ msdos_partition_is_flag_available (const
case PED_PARTITION_RAID:
case PED_PARTITION_LVM:
case PED_PARTITION_LBA:
+ case PED_PARTITION_TYPE:
case PED_PARTITION_PALO:
case PED_PARTITION_PREP:
case PED_PARTITION_DIAG:
Index: parted-2.4/parted/ui.c
===================================================================
--- parted-2.4.orig/parted/ui.c
+++ parted-2.4/parted/ui.c
@@ -917,6 +917,9 @@ command_line_get_integer (const char* pr
NULL, 1);
if (!input)
return 0;
+ if (strstr(input, "0x") == input)
+ valid = sscanf (input, "%x", value);
+ else
valid = sscanf (input, "%d", value);
free (input);
return valid;
Index: parted-2.4/include/parted/disk.h
===================================================================
--- parted-2.4.orig/include/parted/disk.h
+++ parted-2.4/include/parted/disk.h
@@ -70,10 +70,11 @@ enum _PedPartitionFlag {
PED_PARTITION_BIOS_GRUB=12,
PED_PARTITION_APPLE_TV_RECOVERY=13,
PED_PARTITION_DIAG=14,
- PED_PARTITION_LEGACY_BOOT=15
+ PED_PARTITION_LEGACY_BOOT=15,
+ PED_PARTITION_TYPE=16
};
#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_LEGACY_BOOT
+#define PED_PARTITION_LAST_FLAG PED_PARTITION_TYPE
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
Index: parted-2.4/parted/parted.c
===================================================================
--- parted-2.4.orig/parted/parted.c
+++ parted-2.4/parted/parted.c
@@ -1291,13 +1291,14 @@ partition_print_flags (PedPartition* par
const char* name;
char* res = ped_malloc(1);
void* _res = res;
+ int xtype;
*res = '\0';
first_flag = 1;
for (flag = ped_partition_flag_next (0); flag;
flag = ped_partition_flag_next (flag)) {
- if (ped_partition_get_flag (part, flag)) {
+ if (xtype = ped_partition_get_flag (part, flag)) {
if (first_flag)
first_flag = 0;
else {
@@ -1306,7 +1307,16 @@ partition_print_flags (PedPartition* par
res = _res;
strncat (res, ", ", 2);
}
-
+ if (flag == PED_PARTITION_TYPE) {
+ char tmpstr[21];
+ int len = snprintf(tmpstr,sizeof(tmpstr)-1,"type=%02x",xtype);
+ _res = res;
+ ped_realloc (&_res, strlen (res) + 1 +
+ ((len>sizeof(tmpstr))?sizeof(tmpstr):len) );
+ res = _res;
+ strncat (res, tmpstr, 21);
+ }
+ else {
name = _(ped_partition_flag_get_name (flag));
_res = res;
ped_realloc (&_res, strlen (res) + 1 + strlen (name));
@@ -1314,6 +1324,7 @@ partition_print_flags (PedPartition* par
strcat(res, name);
}
}
+ }
return res;
}
@@ -2156,12 +2167,19 @@ do_set (PedDevice** dev)
goto error_destroy_disk;
if (!command_line_get_part_flag (_("Flag to Invert?"), part, &flag))
goto error_destroy_disk;
+ if( flag == PED_PARTITION_TYPE )
+ state = ped_partition_get_flag (part, flag);
+ else
state = (ped_partition_get_flag (part, flag) == 0 ? 1 : 0);
- if (!is_toggle_mode) {
+ if (!is_toggle_mode && flag != PED_PARTITION_TYPE ) {
if (!command_line_get_state (_("New state?"), &state))
goto error_destroy_disk;
}
+ else if( flag == PED_PARTITION_TYPE ) {
+ if (!command_line_get_integer (_("New type?"), &state))
+ goto error_destroy_disk;
+ }
if (!ped_partition_set_flag (part, flag, state))
goto error_destroy_disk;
pgpm4reeT8exf.pgp
Description: PGP signature
_______________________________________________ parted-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/parted-devel

