File parted-type.patch of Package parted

Index: parted-1.9.0/libparted/disk.c
===================================================================
--- parted-1.9.0.orig/libparted/disk.c	2009-07-30 14:59:14.000000000 +0200
+++ parted-1.9.0/libparted/disk.c	2009-07-30 14:59:21.000000000 +0200
@@ -2240,6 +2240,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-1.9.0/libparted/labels/dos.c
===================================================================
--- parted-1.9.0.orig/libparted/labels/dos.c	2009-07-30 14:59:14.000000000 +0200
+++ parted-1.9.0/libparted/labels/dos.c	2009-07-30 14:59:21.000000000 +0200
@@ -1346,6 +1346,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 (
@@ -1443,6 +1447,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;
 
@@ -1464,6 +1471,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:
 		return 1;
Index: parted-1.9.0/parted/ui.c
===================================================================
--- parted-1.9.0.orig/parted/ui.c	2009-07-30 14:59:14.000000000 +0200
+++ parted-1.9.0/parted/ui.c	2009-07-30 14:59:21.000000000 +0200
@@ -908,6 +908,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-1.9.0/include/parted/disk.h
===================================================================
--- parted-1.9.0.orig/include/parted/disk.h	2009-07-30 14:59:14.000000000 +0200
+++ parted-1.9.0/include/parted/disk.h	2009-07-30 14:59:21.000000000 +0200
@@ -51,9 +51,10 @@ enum _PedPartitionFlag {
         PED_PARTITION_LBA=7,
         PED_PARTITION_HPSERVICE=8,
         PED_PARTITION_PALO=9,
-        PED_PARTITION_PREP=10,
-        PED_PARTITION_MSFT_RESERVED=11,
-        PED_PARTITION_BIOS_GRUB=12
+		PED_PARTITION_TYPE=10,
+        PED_PARTITION_PREP=11,
+        PED_PARTITION_MSFT_RESERVED=12,
+        PED_PARTITION_BIOS_GRUB=13
 };
 #define PED_PARTITION_FIRST_FLAG        PED_PARTITION_BOOT
 #define PED_PARTITION_LAST_FLAG         PED_PARTITION_BIOS_GRUB
Index: parted-1.9.0/parted/parted.c
===================================================================
--- parted-1.9.0.orig/parted/parted.c	2009-07-30 14:59:20.000000000 +0200
+++ parted-1.9.0/parted/parted.c	2009-07-30 15:13:40.000000000 +0200
@@ -1164,13 +1164,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 {
@@ -1180,7 +1181,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
@@ -1189,6 +1199,7 @@ partition_print_flags (PedPartition* par
                         strncat (res, name, 21);
                 }
         }
+        }
 
         return res;
 }
@@ -1940,12 +1951,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;
openSUSE Build Service is sponsored by