Module Name:    src
Committed By:   martin
Date:           Sun Jul 14 15:36:57 UTC 2019

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

Log Message:
Fix a few of the very stupid mistakes I made when converting this to
the abstract partitioning interface.


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 src/usr.sbin/sysinst/partman.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/partman.c
diff -u src/usr.sbin/sysinst/partman.c:1.36 src/usr.sbin/sysinst/partman.c:1.37
--- src/usr.sbin/sysinst/partman.c:1.36	Sat Jul 13 17:13:36 2019
+++ src/usr.sbin/sysinst/partman.c	Sun Jul 14 15:36:57 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: partman.c,v 1.36 2019/07/13 17:13:36 martin Exp $ */
+/*	$NetBSD: partman.c,v 1.37 2019/07/14 15:36:57 martin Exp $ */
 
 /*
  * Copyright 2012 Eugene Lozovoy
@@ -454,11 +454,11 @@ pm_fmt_disk_line(WINDOW *w, const char *
 		line = out;
 	}
 	if (no_size_display != NULL) {
-		wprintw(w, "%-34s (%s)", line, no_size_display);
+		wprintw(w, "   %-56s (%s)", line, no_size_display);
 	} else {
 		humanize_number(human, sizeof(human),
 	            total, "", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
-		wprintw(w, "%-34s %s", line, human);
+		wprintw(w, "   %-56s %s", line, human);
 	}
 }
 
@@ -2650,6 +2650,7 @@ pm_menufmt(menudesc *m, int opt, void *a
 	char buf[STRSIZE], dev[STRSIZE];
 	part_id part_num = ((struct part_entry *)arg)[opt].id;
 	struct pm_devs *pm_cur = ((struct part_entry *)arg)[opt].dev_ptr;
+	struct disk_partitions *parts = ((struct part_entry *)arg)[opt].parts;
 	struct disk_part_info info;
 	const char *mount_point, *fstype;
 
@@ -2668,11 +2669,16 @@ pm_menufmt(menudesc *m, int opt, void *a
 				dev_status);
 			break;
 		case PM_PART:
-			pm_cur->parts->pscheme->get_part_device(pm_cur->parts,
-			    part_num, dev, sizeof dev, NULL, plain_name, false);
-			pm_cur->parts->pscheme->get_part_info(pm_cur->parts,
+			if (parts->pscheme->get_part_device != NULL)
+				parts->pscheme->get_part_device(
+				    parts,  part_num,
+				    dev, sizeof dev, NULL, plain_name, false);
+			else
+				strcpy(dev, "-");
+			parts->pscheme->get_part_info(parts,
 			    part_num, &info);
-			if (pm_cur->mounted[part_num] != NULL &&
+			if (pm_cur->mounted != NULL &&
+			    pm_cur->mounted[part_num] != NULL &&
 			    pm_cur->mounted[part_num][0] != 0)
 				mount_point = msg_string(MSG_pmmounted);
 			else
@@ -2754,6 +2760,8 @@ pm_upddevlist(menudesc *m, void *arg)
 	int i = 0;
 	size_t ii;
 	struct pm_devs *pm_i;
+	struct disk_partitions *secondary;
+	const struct disk_partitioning_scheme *ps;
 	struct disk_part_info info;
 
 	if (arg != NULL)
@@ -2788,14 +2796,48 @@ pm_upddevlist(menudesc *m, void *arg)
 		if (pm_i->no_part)
 			((struct part_entry *)arg)[i].type = PM_SPEC;
 		else {
+			ps = pm_i->parts != NULL ? pm_i->parts->pscheme : NULL;
+			secondary = NULL;
+
 			((struct part_entry *)arg)[i].type = PM_DISK;
-			for (ii = 0; ii < pm_i->parts->num_part; ii++) {
-				if (!pm_i->parts->pscheme->get_part_info(
-				    pm_i->parts, i, &info))
+
+			for (ii = 0; pm_i->parts != NULL &&
+			    ii < pm_i->parts->num_part; ii++) {
+				if (!ps->get_part_info(
+				    pm_i->parts, ii, &info))
 					continue;
-				if (info.flags & (PTI_SEC_CONTAINER|
-				    PTI_WHOLE_DISK|PTI_PSCHEME_INTERNAL|
-				    PTI_RAW_PART))
+				if (info.flags & PTI_SEC_CONTAINER) {
+					if (secondary == NULL &&
+					    ps->secondary_scheme != NULL)
+						secondary = ps->
+						    secondary_partitions(
+						    pm_i->parts,
+						    info.start, false);
+					continue;
+				}
+				if (info.flags & (PTI_WHOLE_DISK|
+				    PTI_PSCHEME_INTERNAL|PTI_RAW_PART))
+					continue;
+				if (info.fs_type == FS_UNUSED)
+					continue;
+				i++;
+				m->opts[i].opt_name = NULL;
+				m->opts[i].opt_exp_name = NULL;
+				m->opts[i].opt_action = pm_submenu;
+				((struct part_entry *)arg)[i].parts =
+				    pm_i->parts;
+				((struct part_entry *)arg)[i].dev_ptr = pm_i;
+				((struct part_entry *)arg)[i].id = ii;
+				((struct part_entry *)arg)[i].type = PM_PART;
+			}
+
+			for (ii = 0; secondary != NULL &&
+			    ii < secondary->num_part; ii++) {
+				if (!secondary->pscheme->get_part_info(
+				    secondary, ii, &info))
+					continue;
+				if (info.flags & (PTI_WHOLE_DISK|
+				    PTI_PSCHEME_INTERNAL|PTI_RAW_PART))
 					continue;
 				if (info.fs_type == FS_UNUSED)
 					continue;
@@ -2803,6 +2845,7 @@ pm_upddevlist(menudesc *m, void *arg)
 				m->opts[i].opt_name = NULL;
 				m->opts[i].opt_exp_name = NULL;
 				m->opts[i].opt_action = pm_submenu;
+				((struct part_entry *)arg)[i].parts = secondary;
 				((struct part_entry *)arg)[i].dev_ptr = pm_i;
 				((struct part_entry *)arg)[i].id = ii;
 				((struct part_entry *)arg)[i].type = PM_PART;

Reply via email to