bug-parted
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH parted] Handle swap flag in msdos type labels


From: Hans de Goede
Subject: [PATCH parted] Handle swap flag in msdos type labels
Date: Sat, 10 Oct 2009 15:28:33 +0200

From: David Cantrell <address@hidden>

Original patch by David Cantrell <address@hidden>, I
(Hans de Goede <address@hidden>) made the following changes:
-msdos_partition_is_flag_available() should return 1 for swap flag
-Only change the partition type to 82 when setting the swap flag
 on dos labels, not when resetting it
---
 libparted/labels/dos.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
index cc9e0e3..c3b4932 100644
--- a/libparted/labels/dos.c
+++ b/libparted/labels/dos.c
@@ -151,6 +151,7 @@ typedef struct {
        int             lba;
        int             palo;
        int             prep;
+       int             swap;
        OrigState*      orig;                   /* used for CHS stuff */
 } DosPartitionData;
 
@@ -799,6 +800,7 @@ raw_part_parse (const PedDisk* disk, const DosRawPartition* 
raw_part,
        dos_data->lba = raw_part_is_lba (raw_part);
        dos_data->palo = raw_part->type == PARTITION_PALO;
        dos_data->prep = raw_part->type == PARTITION_PREP;
+       dos_data->swap = raw_part->type == PARTITION_LINUX_SWAP;
        dos_data->orig = ped_malloc (sizeof (OrigState));
        if (!dos_data->orig) {
                ped_partition_destroy (part);
@@ -1199,6 +1201,7 @@ msdos_partition_new (const PedDisk* disk, 
PedPartitionType part_type,
                dos_data->lba = 0;
                dos_data->palo = 0;
                dos_data->prep = 0;
+               dos_data->swap = 0;
        } else {
                part->disk_specific = NULL;
        }
@@ -1234,6 +1237,7 @@ msdos_partition_duplicate (const PedPartition* part)
        new_dos_data->lba = old_dos_data->lba;
        new_dos_data->palo = old_dos_data->palo;
        new_dos_data->prep = old_dos_data->prep;
+       new_dos_data->swap = old_dos_data->swap;
 
        if (old_dos_data->orig) {
                new_dos_data->orig = ped_malloc (sizeof (OrigState));
@@ -1281,6 +1285,7 @@ msdos_partition_set_system (PedPartition* part,
                dos_data->lvm = 0;
                dos_data->palo = 0;
                dos_data->prep = 0;
+               dos_data->swap = 0;
                if (dos_data->lba)
                        dos_data->system = PARTITION_EXT_LBA;
                else
@@ -1304,6 +1309,10 @@ msdos_partition_set_system (PedPartition* part,
                dos_data->system = PARTITION_PREP;
                return 1;
        }
+       if (dos_data->swap) {
+               dos_data->system = PARTITION_LINUX_SWAP;
+               return 1;
+       }
 
        if (!fs_type)
                dos_data->system = PARTITION_LINUX;
@@ -1376,6 +1385,7 @@ msdos_partition_set_flag (PedPartition* part,
                        dos_data->lvm = 0;
                        dos_data->palo = 0;
                        dos_data->prep = 0;
+                       dos_data->swap = 0;
                }
                dos_data->raid = state;
                return ped_partition_set_system (part, part->fs_type);
@@ -1386,6 +1396,7 @@ msdos_partition_set_flag (PedPartition* part,
                        dos_data->raid = 0;
                        dos_data->palo = 0;
                        dos_data->prep = 0;
+                       dos_data->swap = 0;
                }
                dos_data->lvm = state;
                return ped_partition_set_system (part, part->fs_type);
@@ -1399,6 +1410,7 @@ msdos_partition_set_flag (PedPartition* part,
                        dos_data->hidden = 0;
                        dos_data->raid = 0;
                        dos_data->lvm = 0;
+                       dos_data->swap = 0;
                }
                dos_data->palo = state;
                return ped_partition_set_system (part, part->fs_type);
@@ -1408,10 +1420,23 @@ msdos_partition_set_flag (PedPartition* part,
                        dos_data->hidden = 0;
                        dos_data->raid = 0;
                        dos_data->lvm = 0;
+                       dos_data->swap = 0;
+                       dos_data->palo = 0;
                }
                dos_data->prep = state;
                return ped_partition_set_system (part, part->fs_type);
 
+       case PED_PARTITION_SWAP:
+               if (state) {
+                       dos_data->hidden = 0;
+                       dos_data->raid = 0;
+                       dos_data->lvm = 0;
+                       dos_data->palo = 0;
+                       dos_data->prep = 0;
+               }
+               dos_data->swap = state;
+               return ped_partition_set_system (part, part->fs_type);
+
        default:
                return 0;
        }
@@ -1448,6 +1473,9 @@ msdos_partition_get_flag (const PedPartition* part, 
PedPartitionFlag flag)
        case PED_PARTITION_PREP:
                return dos_data->prep;
 
+       case PED_PARTITION_SWAP:
+               return dos_data->swap;
+
        default:
                return 0;
        }
@@ -1465,6 +1493,7 @@ msdos_partition_is_flag_available (const PedPartition* 
part,
        case PED_PARTITION_LBA:
        case PED_PARTITION_PALO:
        case PED_PARTITION_PREP:
+       case PED_PARTITION_SWAP:
                return 1;
 
        default:
-- 
1.6.5.rc2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]