bug-parted
[Top][All Lists]
Advanced

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

[PATCH] msdos symbolic partition types


From: Andreas Dilger
Subject: [PATCH] msdos symbolic partition types
Date: Mon, 4 Feb 2002 23:23:22 -0700
User-agent: Mutt/1.2.5.1i

Andrew,
this patch replaces the usage of numeric partition types in disk_dos.c
with symbolic names.  It doesn't change any functionality, but the code
for setting hidden FAT partitions is simplified a bit.  It assumes that
my previous patch which fixes up the NULL fs_type dereferences in
msdos_partition_set_system() have been applied.

Cheers, Andreas
=================== parted-1.6.0-msdos.diff =============================
--- libparted/disk_dos.c.orig   Thu Jan 24 05:53:06 2002
+++ libparted/disk_dos.c        Mon Feb  4 21:42:10 2002
@@ -51,6 +51,38 @@
 #define MSDOS_MAGIC            0xAA55
 #define PARTITION_MAGIC_MAGIC  0xf6f6
 
+#define PARTITION_EMPTY                0x00
+#define PARTITION_FAT12                0x01
+#define PARTITION_FAT16_SM     0x04
+#define PARTITION_EXT          0x05
+#define PARTITION_FAT16                0x06
+#define PARTITION_NTFS         0x07
+#define PARTITION_HPFS         0x07
+#define PARTITION_FAT32                0x0b
+#define PARTITION_FAT32_LBA    0x0c
+#define PARTITION_FAT16_LBA    0x0e
+#define PARTITION_EXT_LBA      0x0f
+
+#define PART_FLAG_HIDDEN       0x10    /* Valid for FAT/NTFS only */
+#define PARTITION_FAT12_H      (PARTITION_FAT12        | PART_FLAG_HIDDEN)
+#define PARTITION_FAT16_SM_H   (PARTITION_FAT16_SM     | PART_FLAG_HIDDEN)
+#define PARTITION_EXT_H                (PARTITION_EXT          | 
PART_FLAG_HIDDEN)
+#define PARTITION_FAT16_H      (PARTITION_FAT16        | PART_FLAG_HIDDEN)
+#define PARTITION_NTFS_H       (PARTITION_NTFS         | PART_FLAG_HIDDEN)
+#define PARTITION_FAT32_H      (PARTITION_FAT32        | PART_FLAG_HIDDEN)
+#define PARTITION_FAT32_LBA_H  (PARTITION_FAT32_LBA    | PART_FLAG_HIDDEN)
+#define PARTITION_FAT16_LBA_H  (PARTITION_FAT16_LBA    | PART_FLAG_HIDDEN)
+
+#define PARTITION_COMPAQ_DIAG  0x12
+#define PARTITION_LINUX_SWAP   0x82
+#define PARTITION_LINUX                0x83
+#define PARTITION_LINUX_EXT    0x85
+#define PARTITION_LINUX_LVM    0x8e
+#define PARTITION_DELL_DIAG    0xde
+#define PARTITION_GPT          0xee
+#define PARTITION_LINUX_RAID   0xfd
+#define PARTITION_LINUX_LVM_OLD 0xfe
+
 typedef struct _DosRawPartition                DosRawPartition;
 typedef struct _DosRawTable            DosRawTable;
 
@@ -186,9 +224,9 @@
 
        /* If this is a GPT disk, fail here */
        for (i = 0; i < 4; i++) {
-               if (part_table.partitions[i].type == 0xEE)
-                       return 0;
-       }
+               if (part_table.partitions[i].type == PARTITION_GPT)
+                       return 0;
+       }
 
 #ifdef ENABLE_PC98
        pc98_is_zero = 1;
@@ -489,9 +527,9 @@
        PED_ASSERT (raw_part != NULL, return 0);
 
        switch (raw_part->type) {
-       case 0x05:
-       case 0x0f:
-       case 0x85:
+       case PARTITION_EXT:
+       case PARTITION_EXT_LBA:
+       case PARTITION_LINUX_EXT:
                return 1;
 
        default:
@@ -507,12 +545,13 @@
        PED_ASSERT (raw_part != NULL, return 0);
 
        switch (raw_part->type) {
-       case 0x11:
-       case 0x14:
-       case 0x16:
-       case 0x1b:
-       case 0x1c:
-       case 0x1e:
+       case PARTITION_FAT12_H:
+       case PARTITION_FAT16_SM_H:
+       case PARTITION_FAT16_H:
+       case PARTITION_FAT32_H:
+       case PARTITION_NTFS_H:
+       case PARTITION_FAT32_LBA_H:
+       case PARTITION_FAT16_LBA_H:
                return 1;
 
        default:
@@ -528,11 +567,11 @@
        PED_ASSERT (raw_part != NULL, return 0);
 
        switch (raw_part->type) {
-       case 0xc:
-       case 0xe:
-       case 0xf:
-       case 0x1c:
-       case 0x1e:
+       case PARTITION_FAT32_LBA:
+       case PARTITION_FAT16_LBA:
+       case PARTITION_EXT_LBA:
+       case PARTITION_FAT32_LBA_H:
+       case PARTITION_FAT16_LBA_H:
                return 1;
 
        default:
@@ -603,7 +661,7 @@
 
        for (i = 0; i < 4; i++) {
                raw_part = &table.partitions [i];
-               if (raw_part->type == 0x0 || !raw_part->length)
+               if (raw_part->type == PARTITION_EMPTY || !raw_part->length)
                        continue;
 
                /* process nested extended partitions after normal logical
@@ -652,9 +710,9 @@
                dos_data->system = raw_part->type;
                dos_data->boot = raw_part->boot_ind != 0;
                dos_data->hidden = raw_part_is_hidden (raw_part);
-               dos_data->raid = raw_part->type == 0xfd;
-               dos_data->lvm = raw_part->type == 0xfe
-                                       || raw_part->type == 0x8e;
+               dos_data->raid = raw_part->type == PARTITION_LINUX_RAID;
+               dos_data->lvm = raw_part->type == PARTITION_LINUX_LVM_OLD
+                               || raw_part->type == PARTITION_LINUX_LVM;
                dos_data->lba = raw_part_is_lba (raw_part);
                if (!is_extended_table)
                        part->num = i + 1;
@@ -735,7 +794,7 @@
        PED_ASSERT (geom->dev != NULL, return 0);
 
        raw_part->boot_ind = 0;
-       raw_part->type = 0x5;
+       raw_part->type = PARTITION_EXT;
        raw_part->start = PED_CPU_TO_LE32 ((geom->start - offset)
                                / (geom->dev->sector_size / 512));
        raw_part->length = PED_CPU_TO_LE32 (geom->length
@@ -873,7 +932,7 @@
                        = dos_data = ped_malloc (sizeof (DosPartitionData));
                if (!dos_data)
                        goto error_free_part;
-               dos_data->system = 0x83;
+               dos_data->system = PARTITION_LINUX;
                dos_data->hidden = 0;
                dos_data->boot = 0;
                dos_data->raid = 0;
@@ -948,44 +1032,41 @@
                dos_data->raid = 0;
                dos_data->lvm = 0;
                if (dos_data->lba)
-                       dos_data->system = 0xf;
+                       dos_data->system = PARTITION_EXT_LBA;
                else
-                       dos_data->system = 0x5;
+                       dos_data->system = PARTITION_EXT;
                return 1;
        }
 
        if (dos_data->lvm) {
-               dos_data->system = 0x8e;
+               dos_data->system = PARTITION_LINUX_LVM;
                return 1;
        }
        if (dos_data->raid) {
-               dos_data->system = 0xfd;
+               dos_data->system = PARTITION_LINUX_RAID;
                return 1;
        }
 
        if (!fs_type) {
-               dos_data->system = 0x83;
+               dos_data->system = PARTITION_LINUX;
                dos_data->hidden = 0;
        } else if (!strcmp (fs_type->name, "fat16")) {
-               if (dos_data->hidden)
-                       dos_data->system = dos_data->lba ? 0x1e : 0x16;
-               else
-                       dos_data->system = dos_data->lba ? 0x0e : 0x06;
+               dos_data->system = dos_data->lba
+                       ? PARTITION_FAT16_LBA : PARTITION_FAT16;
+               dos_data->system |= dos_data->hidden ? PART_FLAG_HIDDEN : 0;
        } else if (!strcmp (fs_type->name, "fat32")) {
-               if (dos_data->hidden)
-                       dos_data->system = dos_data->lba ? 0x1c : 0x1b;
-               else
-                       dos_data->system = dos_data->lba ? 0x0c : 0x0b;
-       } else if (!strcmp (fs_type->name, "ntfs")) {
-               if (dos_data->hidden)
-                       dos_data->system = 0x17;
-               else
-                       dos_data->system = 0x7;
+               dos_data->system = dos_data->lba
+                       ? PARTITION_FAT32_LBA : PARTITION_FAT32;
+               dos_data->system |= dos_data->hidden ? PART_FLAG_HIDDEN : 0;
+       } else if (!strcmp (fs_type->name, "ntfs")
+                  || !strcmp (fs_type->name, "hpfs")) {
+               dos_data->system = PARTITION_NTFS;
+               dos_data->system |= dos_data->hidden ? PART_FLAG_HIDDEN : 0;
        } else if (!strcmp (fs_type->name, "linux-swap")) {
-               dos_data->system = 0x82;
+               dos_data->system = PARTITION_LINUX_SWAP;
                dos_data->hidden = 0;
        } else {
-               dos_data->system = 0x83;
+               dos_data->system = PARTITION_LINUX;
                dos_data->hidden = 0;
        }
 
@@ -1034,7 +1124,7 @@
                        dos_data->lvm = 0;
                }
                dos_data->raid = state;
-               dos_data->system = 0xfd;
+               dos_data->system = PARTITION_LINUX_RAID;
                return 1;
 
        case PED_PARTITION_LVM:
@@ -1043,7 +1133,7 @@
                        dos_data->raid = 0;
                }
                dos_data->lvm = state;
-               dos_data->system = 0x8e;
+               dos_data->system = PARTITION_LINUX_LVM;
                return 1;
 
        case PED_PARTITION_LBA:
@@ -1087,7 +1192,7 @@
 
 static int
 msdos_partition_is_flag_available (const PedPartition* part,
-                                  PedPartitionFlag flag)
+                                  PedPartitionFlag flag)
 {
        switch (flag) {
        case PED_PARTITION_HIDDEN:
--
Andreas Dilger
http://sourceforge.net/projects/ext2resize/
http://www-mddsp.enel.ucalgary.ca/People/adilger/



reply via email to

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