[Top][All Lists]
[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/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] msdos symbolic partition types,
Andreas Dilger <=