From 6718834075f299098cc170fd2a2e420725f022d0 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 23 Jul 2012 14:07:35 +0200 Subject: [PATCH] fdisk: move label specific stuff to fdiskdoslabel.c Signed-off-by: Karel Zak --- fdisks/fdisk.c | 5 ----- fdisks/fdisk.h | 1 - fdisks/fdiskdoslabel.c | 9 +++++++-- fdisks/fdiskdoslabel.h | 2 ++ fdisks/fdisksgilabel.c | 7 ++++++- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c index cc874a682c..e1d5fa6f59 100644 --- a/fdisks/fdisk.c +++ b/fdisks/fdisk.c @@ -117,11 +117,6 @@ static const struct menulist_descr menulist[] = { {'y', N_("change number of physical cylinders"), {0, SUN_LABEL}}, }; -int -valid_part_table_flag(unsigned char *b) { - return (b[510] == 0x55 && b[511] == 0xaa); -} - sector_t get_nr_sects(struct partition *p) { return read4_little_endian(p->size4); } diff --git a/fdisks/fdisk.h b/fdisks/fdisk.h index 95a6a4d0c4..6288a131c3 100644 --- a/fdisks/fdisk.h +++ b/fdisks/fdisk.h @@ -169,7 +169,6 @@ extern char read_char(char *mesg); extern int read_hex(struct systypes *sys); extern void reread_partition_table(struct fdisk_context *cxt, int leave); extern struct partition *get_part_table(int); -extern int valid_part_table_flag(unsigned char *b); extern unsigned int read_int(struct fdisk_context *cxt, unsigned int low, unsigned int dflt, unsigned int high, unsigned int base, char *mesg); diff --git a/fdisks/fdiskdoslabel.c b/fdisks/fdiskdoslabel.c index 76798ef19f..1ff0f1d3b9 100644 --- a/fdisks/fdiskdoslabel.c +++ b/fdisks/fdiskdoslabel.c @@ -81,6 +81,11 @@ static void mbr_set_magic(unsigned char *b) b[511] = 0xaa; } +int mbr_is_valid_magic(unsigned char *b) +{ + return (b[510] == 0x55 && b[511] == 0xaa); +} + static unsigned int mbr_get_id(const unsigned char *b) { return read4_little_endian(&b[440]); @@ -359,7 +364,7 @@ static int dos_probe_label(struct fdisk_context *cxt) int i; unsigned int h = 0, s = 0; - if (!valid_part_table_flag(cxt->mbr)) + if (!mbr_is_valid_magic(cxt->mbr)) return 0; dos_init(cxt); @@ -385,7 +390,7 @@ static int dos_probe_label(struct fdisk_context *cxt) for (i = 3; i < partitions; i++) { struct pte *pe = &ptes[i]; - if (!valid_part_table_flag(pe->sectorbuffer)) { + if (!mbr_is_valid_magic(pe->sectorbuffer)) { fprintf(stderr, _("Warning: invalid flag 0x%04x of partition " "table %d will be corrected by w(rite)\n"), diff --git a/fdisks/fdiskdoslabel.h b/fdisks/fdiskdoslabel.h index a62c08f6d3..6096d73331 100644 --- a/fdisks/fdiskdoslabel.h +++ b/fdisks/fdiskdoslabel.h @@ -47,4 +47,6 @@ extern void dos_add_partition(struct fdisk_context *cxt, int n, int sys); extern void dos_new_partition(struct fdisk_context *cxt); extern void dos_write_table(struct fdisk_context *cxt); +extern int mbr_is_valid_magic(unsigned char *b); + #endif diff --git a/fdisks/fdisksgilabel.c b/fdisks/fdisksgilabel.c index 071a84e7bd..08d6dfd98f 100644 --- a/fdisks/fdisksgilabel.c +++ b/fdisks/fdisksgilabel.c @@ -33,6 +33,7 @@ #include "common.h" #include "fdisk.h" #include "fdisksgilabel.h" +#include "fdiskdoslabel.h" static int other_endian = 0; static int debug = 0; @@ -759,9 +760,13 @@ create_sgilabel(struct fdisk_context *cxt) " > 33.8 GB.\n"), cxt->dev_path, cxt->geom.cylinders); } #endif + /* + * Convert old MBR to SGI label, make it DEPRECATED, this feature + * has to be handled in by any top-level fdisk command. + */ for (i = 0; i < 4; i++) { old[i].sysid = 0; - if (valid_part_table_flag(cxt->mbr)) { + if (mbr_is_valid_magic(cxt->mbr)) { if (get_part_table(i)->sys_ind) { old[i].sysid = get_part_table(i)->sys_ind; old[i].start = get_start_sect(get_part_table(i)); -- 2.47.3