Module Name: src
Committed By: martin
Date: Wed Jan 15 19:08:24 UTC 2020
Modified Files:
src/usr.sbin/sysinst: partman.c
Log Message:
Fix handling of inner/outer partitions (e.g. MBR and disklabel) in
extended partitioning:
- when editing a disk with such a schme, offer both partitions in two
steps
- when commiting changes save the inner partitions after the outer ones
To generate a diff of this commit:
cvs rdiff -u -r1.47 -r1.48 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.47 src/usr.sbin/sysinst/partman.c:1.48
--- src/usr.sbin/sysinst/partman.c:1.47 Fri Jan 10 12:55:14 2020
+++ src/usr.sbin/sysinst/partman.c Wed Jan 15 19:08:24 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: partman.c,v 1.47 2020/01/10 12:55:14 martin Exp $ */
+/* $NetBSD: partman.c,v 1.48 2020/01/15 19:08:24 martin Exp $ */
/*
* Copyright 2012 Eugene Lozovoy
@@ -2650,6 +2650,7 @@ pm_commit(menudesc *m, void *arg)
{
int retcode;
struct pm_devs *pm_i;
+ struct disk_partitions *secondary;
pm_retvalue = -1;
SLIST_FOREACH(pm_i, &pm_head, l) {
@@ -2665,6 +2666,20 @@ pm_commit(menudesc *m, void *arg)
pm_i->diskdev);
return -1;
}
+ if (pm_i->parts->pscheme->secondary_scheme != NULL) {
+ secondary = pm_i->parts->pscheme->
+ secondary_partitions(pm_i->parts, -1, false);
+ if (secondary != NULL) {
+ if (!secondary->pscheme->write_to_disk(
+ secondary)) {
+ if (logfp)
+ fprintf(logfp,
+ "partitining error %s\n",
+ pm_i->diskdev);
+ return -1;
+ }
+ }
+ }
}
/* Call all functions that may create new devices */
@@ -3232,20 +3247,29 @@ pm_edit_partitions(struct part_entry *pe
{
struct pm_devs *my_pm = pm_from_pe(pe);
struct partition_usage_set pset = { 0 };
+ struct disk_partitions *parts;
if (!my_pm)
return;
if (!pm_force_parts(my_pm))
return;
+ parts = my_pm->parts;
clear();
refresh();
- usage_set_from_parts(&pset, my_pm->parts);
+ if (my_pm->parts->pscheme->secondary_scheme != NULL) {
+ if (!edit_outer_parts(my_pm->parts))
+ goto done;
+ parts = get_inner_parts(parts);
+ }
+
+ usage_set_from_parts(&pset, parts);
edit_and_check_label(my_pm, &pset, false);
free_usage_set(&pset);
+done:
pm_partusage(my_pm, -1, -1);
my_pm->unsaved = true;
pm_retvalue = 1;