Module Name:    src
Committed By:   martin
Date:           Wed Jan 15 19:37:42 UTC 2020

Modified Files:
        src/usr.sbin/sysinst: label.c

Log Message:
Avoid using the global "pm" variable in utility functions - during
extended partitioning they may point to a different device.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/usr.sbin/sysinst/label.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/sysinst/label.c
diff -u src/usr.sbin/sysinst/label.c:1.18 src/usr.sbin/sysinst/label.c:1.19
--- src/usr.sbin/sysinst/label.c:1.18	Thu Jan  9 13:22:30 2020
+++ src/usr.sbin/sysinst/label.c	Wed Jan 15 19:37:41 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: label.c,v 1.18 2020/01/09 13:22:30 martin Exp $	*/
+/*	$NetBSD: label.c,v 1.19 2020/01/15 19:37:41 martin Exp $	*/
 
 /*
  * Copyright 1997 Jonathan Stone
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: label.c,v 1.18 2020/01/09 13:22:30 martin Exp $");
+__RCSID("$NetBSD: label.c,v 1.19 2020/01/15 19:37:41 martin Exp $");
 #endif
 
 #include <sys/types.h>
@@ -1983,14 +1983,16 @@ getpartoff(struct disk_partitions *parts
 			i = min;
 			localsizemult = 1;
 		} else {
-			i = parse_disk_pos(isize, &localsizemult, pm->dlcylsize, NULL);
+			i = parse_disk_pos(isize, &localsizemult, 
+			    parts->pscheme->get_cylinder_size(parts), NULL);
 			if (i < 0) {
 				errmsg = msg_string(MSG_invalid_sector_number);
 				continue;
 			}
 		}
 		/* round to cylinder size if localsizemult != 1 */
-		i = NUMSEC(i, localsizemult, pm->dlcylsize);
+		int cylsize = parts->pscheme->get_cylinder_size(parts);
+		i = NUMSEC(i, localsizemult, cylsize);
 		/* Adjust to start of slice if needed */
 		if ((i < min && (min - i) < localsizemult) ||
 		    (i > min && (i - min) < localsizemult)) {
@@ -2014,10 +2016,11 @@ getpartsize(struct disk_partitions *part
 	char dsize[24], isize[24], max_size[24], maxpartc, valid_parts[4],
 	    *label_msg, *prompt, *head, *hint, *tail;
 	const char *errmsg = NULL;
-	daddr_t i, partend, localsizemult, max, max_r, dflt_r;
+	daddr_t i, partend, diskend, localsizemult, max, max_r, dflt_r;
 	struct disk_part_info info;
 	part_id partn;
 
+	diskend = parts->disk_start + parts->disk_size;
 	max = parts->pscheme->max_free_space_at(parts, partstart);
 
 	/* We need to keep both the unrounded and rounded (_r) max and dflt */
@@ -2092,7 +2095,7 @@ getpartsize(struct disk_partitions *part
 			max_r = max;
 		} else {
 			i = parse_disk_pos(isize, &localsizemult,
-			    pm->dlcylsize, NULL);
+			    parts->pscheme->get_cylinder_size(parts), NULL);
 			if (localsizemult != sizemult)
 				max_r = max;
 		}
@@ -2107,18 +2110,19 @@ getpartsize(struct disk_partitions *part
 		 * partend is aligned to a cylinder if localsizemult
 		 * is not 1 sector
 		 */
+		int cylsize = parts->pscheme->get_cylinder_size(parts);
 		partend = NUMSEC((partstart + i*localsizemult) / localsizemult,
-		    localsizemult, pm->dlcylsize);
+		    localsizemult, cylsize);
 		/* Align to end-of-disk or end-of-slice if close enough */
-		if (partend > (pm->dlsize - sizemult)
-		    && partend < (pm->dlsize + sizemult))
-			partend = pm->dlsize;
+		if (partend > (diskend - sizemult)
+		    && partend < (diskend + sizemult))
+			partend = diskend;
 		if (partend > (partstart + max - sizemult)
 		    && partend < (partstart + max + sizemult))
 			partend = partstart + max;
 		/* sanity checks */
-		if (partend > (partstart + pm->dlsize)) {
-			partend = pm->dlsize;
+		if (partend > diskend) {
+			partend = diskend;
 			errmsg = msg_string(MSG_endoutsidedisk);
 			continue;
 		}
@@ -2161,19 +2165,19 @@ parse_disk_pos(
 		if (*cp == 'G' || *cp == 'g') {
 			if (mult_found)
 				return -1;
-			*localsizemult = GIG / pm->sectorsize;
+			*localsizemult = GIG / 512;
 			goto next;
 		}
 		if (*cp == 'M' || *cp == 'm') {
 			if (mult_found)
 				return -1;
-			*localsizemult = MEG / pm->sectorsize;
+			*localsizemult = MEG / 512;
 			goto next;
 		}
 		if (*cp == 'c' || *cp == 'C') {
 			if (mult_found)
 				return -1;
-			*localsizemult = pm->dlcylsize;
+			*localsizemult = cyl_size;
 			goto next;
 		}
 		if (*cp == 's' || *cp == 'S') {

Reply via email to