small little patch to help fdisk work properly on 64-bit machines. sizeof(Table) is 4 bytes too big. Reference: /n/sources/patch/applied/fdisk-64-bit-table Date: Sun Oct 13 19:26:42 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/disk/prep/fdisk.c Sun Oct 13 19:26:07 2013 +++ /sys/src/cmd/disk/prep/fdisk.c Sun Oct 13 19:26:06 2013 @@ -232,7 +232,7 @@ TypeAMOEBA = 0x93, TypeAMOEBABB = 0x94, TypeBSD386 = 0xA5, - TypeNETBSD = 0XA9, + TypeNETBSD = 0xA9, TypeBSDI = 0xB7, TypeBSDISWAP = 0xB8, TypeOTHER = 0xDA, @@ -240,6 +240,8 @@ TypeDellRecovery= 0xDE, TypeSPEEDSTOR12 = 0xE1, TypeSPEEDSTOR16 = 0xE4, + TypeEFIProtect = 0xEE, + TypeEFI = 0xEF, TypeLANSTEP = 0xFE, Type9 = 0x39, @@ -247,6 +249,8 @@ Toffset = 446, /* offset of partition table in sector */ Magic0 = 0x55, Magic1 = 0xAA, + + Tablesize = 4*16 + 2, }; struct Table { @@ -318,6 +322,8 @@ [TypeDellRecovery] { "DELLRECOVERY", "dell" }, [TypeSPEEDSTOR12] { "SPEEDSTOR12", "speedstor" }, [TypeSPEEDSTOR16] { "SPEEDSTOR16", "speedstor" }, + [TypeEFIProtect] { "EFIPROTECT", "efiprotect" }, + [TypeEFI] { "EFI", "efi" }, [TypeLANSTEP] { "LANSTEP", "lanstep" }, [Type9] { "PLAN9", "plan9" }, @@ -446,7 +452,7 @@ err = 0; for(i=0; idisk, &rtab[i].table, sizeof(Table), rtab[i].lba, Toffset) < 0) + if(diskwrite(edit->disk, &rtab[i].table, Tablesize, rtab[i].lba, Toffset) < 0) err = 1; if(err) { fprint(2, "warning: some writes failed during restoration of old partition tables\n"); @@ -491,7 +497,7 @@ if(xbase == 0) xbase = lba; - diskread(edit->disk, &table, sizeof table, mbroffset+lba, Toffset); + diskread(edit->disk, &table, Tablesize, mbroffset+lba, Toffset); addrecover(table, mbroffset+lba); if(table.magic[0] != Magic0 || table.magic[1] != Magic1) { @@ -529,7 +535,7 @@ Table table; Tentry *tp; - diskread(edit->disk, &table, sizeof(Table), 0, Toffset); + diskread(edit->disk, &table, Tablesize, 0, Toffset); if(table.magic[0] != Magic0 || table.magic[1] != Magic1) sysfatal("did not find master boot record"); @@ -1012,7 +1018,7 @@ Finish: if(startlba < *endlba){ disk = edit->disk; - diskread(disk, &table, sizeof table, mbroffset+startlba, Toffset); + diskread(disk, &table, Tablesize, mbroffset+startlba, Toffset); tp = table.entry; ep = tp+NTentry; for(; tpdisk, &table, sizeof table, mbroffset+startlba, Toffset) < 0) + if(diskwrite(edit->disk, &table, Tablesize, mbroffset+startlba, Toffset) < 0) recover(edit); } return i; @@ -1033,7 +1039,7 @@ } disk = edit->disk; - diskread(disk, &table, sizeof table, mbroffset+startlba, Toffset); + diskread(disk, &table, Tablesize, mbroffset+startlba, Toffset); tp = table.entry; ep = tp+NTentry; @@ -1055,7 +1061,7 @@ table.magic[0] = Magic0; table.magic[1] = Magic1; - if(diskwrite(edit->disk, &table, sizeof table, mbroffset+startlba, Toffset) < 0) + if(diskwrite(edit->disk, &table, Tablesize, mbroffset+startlba, Toffset) < 0) recover(edit); return ni; } @@ -1072,7 +1078,7 @@ disk = edit->disk; - diskread(disk, &table, sizeof table, mbroffset, Toffset); + diskread(disk, &table, Tablesize, mbroffset, Toffset); tp = table.entry; ep = tp+NTentry; @@ -1105,7 +1111,7 @@ if(i != edit->npart) sysfatal("cannot happen #1"); - if(diskwrite(disk, &table, sizeof table, mbroffset, Toffset) < 0) + if(diskwrite(disk, &table, Tablesize, mbroffset, Toffset) < 0) recover(edit); /* bring parts up to date */