diff options
author | Karel Zak | 2010-08-09 13:03:02 +0200 |
---|---|---|
committer | Karel Zak | 2010-08-09 13:08:33 +0200 |
commit | f9936f4dc0cd50d1040f7e855ef091db0edd1f64 (patch) | |
tree | f54149025595dc1863f4778b671e361b68466bf1 /fdisk/fdisk.c | |
parent | cfdisk: fix n+1 bug in error message (diff) | |
download | kernel-qcow2-util-linux-f9936f4dc0cd50d1040f7e855ef091db0edd1f64.tar.gz kernel-qcow2-util-linux-f9936f4dc0cd50d1040f7e855ef091db0edd1f64.tar.xz kernel-qcow2-util-linux-f9936f4dc0cd50d1040f7e855ef091db0edd1f64.zip |
fdisk: update MBR after ID change
Reported-by: Bernard Pidoux <bpidoux@free.fr>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisk/fdisk.c')
-rw-r--r-- | fdisk/fdisk.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c index 6572c51dd..af95bcc64 100644 --- a/fdisk/fdisk.c +++ b/fdisk/fdisk.c @@ -180,6 +180,8 @@ static int type_open = O_RDWR; */ unsigned char *MBRbuffer; +int MBRbuffer_changed; + /* * per partition table entry data * @@ -934,6 +936,7 @@ dos_set_mbr_id(void) { return; dos_write_mbr_id(MBRbuffer, new_id); + MBRbuffer_changed = 1; dos_print_mbr_id(); } @@ -2553,10 +2556,18 @@ write_table(void) { int i; if (dos_label) { - for (i=0; i<3; i++) - if (ptes[i].changed) - ptes[3].changed = 1; - for (i = 3; i < partitions; 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) { |