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;