From: Davidlohr Bueso Date: Sun, 6 May 2012 19:02:45 +0000 (+0200) Subject: fdisk: create DOS specific write table function X-Git-Tag: v2.22-rc1~426 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0dc13a38631361394a098c5e9b39ca05a0cb36a7;p=thirdparty%2Futil-linux.git fdisk: create DOS specific write table function Signed-off-by: Davidlohr Bueso --- diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c index 8c2a162cb3..3044879aa2 100644 --- a/fdisk/fdisk.c +++ b/fdisk/fdisk.c @@ -1672,31 +1672,12 @@ static void write_table(void) { int i; - if (disklabel == DOS_LABEL) { - /* MBR (primary partitions) */ - if (!MBRbuffer_changed) { - for (i = 0; i < 4; i++) - if (ptes[i].changed) - MBRbuffer_changed = 1; - } - if (MBRbuffer_changed) { - write_part_table_flag(MBRbuffer); - write_sector(fd, 0, MBRbuffer); - } - /* EBR (logical partitions) */ - for (i = 4; i < partitions; i++) { - struct pte *pe = &ptes[i]; - - if (pe->changed) { - write_part_table_flag(pe->sectorbuffer); - write_sector(fd, pe->offset, pe->sectorbuffer); - } - } - } - else if (disklabel == SGI_LABEL) { + if (disklabel == DOS_LABEL) + dos_write_table(); + else if (disklabel == SGI_LABEL) /* no test on change? the printf below might be mistaken */ sgi_write_table(); - } else if (disklabel == SUN_LABEL) { + else if (disklabel == SUN_LABEL) { int needw = 0; for (i=0; i<8; i++) diff --git a/fdisk/fdiskdoslabel.c b/fdisk/fdiskdoslabel.c index 3f820dbf35..a1916fc573 100644 --- a/fdisk/fdiskdoslabel.c +++ b/fdisk/fdiskdoslabel.c @@ -657,3 +657,28 @@ void dos_new_partition(void) printf(_("Invalid partition type `%c'\n"), c); } } + +void dos_write_table(void) +{ + int i; + + /* MBR (primary partitions) */ + if (!MBRbuffer_changed) { + for (i = 0; i < 4; i++) + if (ptes[i].changed) + MBRbuffer_changed = 1; + } + if (MBRbuffer_changed) { + write_part_table_flag(MBRbuffer); + write_sector(fd, 0, MBRbuffer); + } + /* EBR (logical partitions) */ + for (i = 4; i < partitions; i++) { + struct pte *pe = &ptes[i]; + + if (pe->changed) { + write_part_table_flag(pe->sectorbuffer); + write_sector(fd, pe->offset, pe->sectorbuffer); + } + } +} diff --git a/fdisk/fdiskdoslabel.h b/fdisk/fdiskdoslabel.h index e45a026672..8c116f7ef8 100644 --- a/fdisk/fdiskdoslabel.h +++ b/fdisk/fdiskdoslabel.h @@ -52,5 +52,6 @@ extern int is_dos_partition(int t); extern void dos_init(void); extern void dos_add_partition(int n, int sys); extern void dos_new_partition(void); +extern void dos_write_table(void); #endif