Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sbin/fdisk/fdisk.c,v rcsdiff: /ftp/cvs/cvsroot/src/sbin/fdisk/fdisk.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.113 retrieving revision 1.114 diff -u -p -r1.113 -r1.114 --- src/sbin/fdisk/fdisk.c 2007/12/23 10:43:57 1.113 +++ src/sbin/fdisk/fdisk.c 2008/01/20 06:39:31 1.114 @@ -1,4 +1,4 @@ -/* $NetBSD: fdisk.c,v 1.113 2007/12/23 10:43:57 apb Exp $ */ +/* $NetBSD: fdisk.c,v 1.114 2008/01/20 06:39:31 tsutsui Exp $ */ /* * Mach Operating System @@ -39,7 +39,7 @@ #include #ifndef lint -__RCSID("$NetBSD: fdisk.c,v 1.113 2007/12/23 10:43:57 apb Exp $"); +__RCSID("$NetBSD: fdisk.c,v 1.114 2008/01/20 06:39:31 tsutsui Exp $"); #endif /* not lint */ #define MBRPTYPENAMES @@ -1486,7 +1486,7 @@ intuit_translated_geometry(void) a2 -= s2; num = (uint64_t)h1 * a2 - (uint64_t)h2 * a1; denom = (uint64_t)c2 * a1 - (uint64_t)c1 * a2; - if (denom != 0 && num % denom == 0) { + if (denom != 0 && num != 0 && num % denom == 0) { xheads = num / denom; xsectors = a1 / (c1 * xheads + h1); break; @@ -1551,18 +1551,20 @@ get_mapping(int i, unsigned int *cylinde if (i % 2 == 0) { *cylinder = MBR_PCYL(part->mbrp_scyl, part->mbrp_ssect); *head = part->mbrp_shd; - *sector = MBR_PSECT(part->mbrp_ssect) - 1; + *sector = MBR_PSECT(part->mbrp_ssect); *absolute = le32toh(part->mbrp_start); } else { *cylinder = MBR_PCYL(part->mbrp_ecyl, part->mbrp_esect); *head = part->mbrp_ehd; - *sector = MBR_PSECT(part->mbrp_esect) - 1; + *sector = MBR_PSECT(part->mbrp_esect); *absolute = le32toh(part->mbrp_start) + le32toh(part->mbrp_size) - 1; } /* Sanity check the data against all zeroes */ if ((*cylinder == 0) && (*sector == 0) && (*head == 0)) return -1; + /* sector numbers in the MBR partition table start at 1 */ + *sector = *sector - 1; /* Sanity check the data against max values */ if ((((*cylinder * MAXHEAD) + *head) * MAXSECTOR + *sector) < *absolute) /* cannot be a CHS mapping */