diff options
author | 2002-01-18 08:29:01 +0000 | |
---|---|---|
committer | 2002-01-18 08:29:01 +0000 | |
commit | 6d5e103b38285c27eb2afadb53fa28d7864935fd (patch) | |
tree | e34a93266bca08e4620af331084117ae0af2461c | |
parent | Update. (diff) | |
download | wireguard-openbsd-6d5e103b38285c27eb2afadb53fa28d7864935fd.tar.xz wireguard-openbsd-6d5e103b38285c27eb2afadb53fa28d7864935fd.zip |
Do not truncate the cylinder value to 1023 until the MBR
is actually written to disk. Cylinder values for disks >8G
are instead "faked" from the LBA values in the partition table.
These faked values are now displayed correctly after a save.
-rw-r--r-- | sbin/fdisk/part.c | 37 |
1 files changed, 13 insertions, 24 deletions
diff --git a/sbin/fdisk/part.c b/sbin/fdisk/part.c index 40ba4b08efb..a69e6257489 100644 --- a/sbin/fdisk/part.c +++ b/sbin/fdisk/part.c @@ -1,4 +1,4 @@ -/* $OpenBSD: part.c,v 1.26 2001/11/14 16:42:27 mickey Exp $ */ +/* $OpenBSD: part.c,v 1.27 2002/01/18 08:29:01 kjell Exp $ */ /* * Copyright (c) 1997 Tobias Weingartner @@ -238,23 +238,16 @@ PRT_make(partn, offset, reloff, prt) void *prt; { unsigned char *p = prt; - prt_t tmp; + int ecsave, scsave; + int modified = 0; off_t off; - tmp.shead = partn->shead; - tmp.ssect = partn->ssect; - tmp.scyl = (partn->scyl > 1023)? 1023: partn->scyl; - tmp.ehead = partn->ehead; - tmp.esect = partn->esect; - tmp.ecyl = (partn->ecyl > 1023)? 1023: partn->ecyl; - if (!PRT_check_chs(partn) && PRT_check_chs(&tmp)) { - partn->shead = tmp.shead; - partn->ssect = tmp.ssect; - partn->scyl = tmp.scyl; - partn->ehead = tmp.ehead; - partn->esect = tmp.esect; - partn->ecyl = tmp.ecyl; - printf("Cylinder values are modified to fit in CHS.\n"); + if ((partn->scyl > 1023) || (partn->ecyl > 1023)) { + scsave = partn->scyl; + ecsave = partn->ecyl; + partn->scyl = (partn->scyl > 1023)? 1023: partn->scyl; + partn->ecyl = (partn->ecyl > 1023)? 1023: partn->ecyl; + modified = 1; } if ((partn->id == DOSPTYP_EXTEND) || (partn->id == DOSPTYP_EXTENDL)) off = reloff; @@ -288,6 +281,10 @@ PRT_make(partn, offset, reloff, prt) putlong(p, partn->bs - off); putlong(p+4, partn->ns); + if (modified) { + partn->scyl = scsave; + partn->ecyl = ecsave; + } } void @@ -378,10 +375,6 @@ PRT_fix_CHS(disk, part, pn) head = (start / spt); start -= (head * spt); sect = (start + 1); - if (cyl > 1023) { - cyl = 1023; - printf("Only LBA values are valid in starting cylinder for partition #%d.\n", pn); - } part->scyl = cyl; part->shead = head; part->ssect = sect; @@ -391,10 +384,6 @@ PRT_fix_CHS(disk, part, pn) head = (end / spt); end -= (head * spt); sect = (end + 1); - if (cyl > 1023) { - cyl = 1023; - printf("Only LBA values are valid in ending cylinder for partition #%d.\n", pn); - } part->ecyl = cyl; part->ehead = head; part->esect = sect; |