]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fdisk: move label specific stuff to fdiskdoslabel.c
authorKarel Zak <kzak@redhat.com>
Mon, 23 Jul 2012 12:07:35 +0000 (14:07 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 23 Jul 2012 12:07:35 +0000 (14:07 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
fdisks/fdisk.c
fdisks/fdisk.h
fdisks/fdiskdoslabel.c
fdisks/fdiskdoslabel.h
fdisks/fdisksgilabel.c

index cc874a682cfe9bb27e1f8dd8b1c3ca8585eb96ea..e1d5fa6f59ba412d8db4f304d588f6a6b27571a1 100644 (file)
@@ -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);
 }
index 95a6a4d0c4fa42a80feb157ffe7510c2b18b5e41..6288a131c38122599766025087fe5fa210a637ab 100644 (file)
@@ -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);
index 76798ef19f2414a25e54bf7677f8353446cdfc0a..1ff0f1d3b9449242543089fbfb6638196058728c 100644 (file)
@@ -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"),
index a62c08f6d3559132565075c396b30a68248693fc..6096d733316ac8ac7bcd02f340ac4d5b01aa48d9 100644 (file)
@@ -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
index 071a84e7bd5825b2a42fc2d179f65592213f5931..08d6dfd98f099acc98a53ef4ac464a98dfd78a56 100644 (file)
@@ -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));