Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/sysinst Fix handling of inner/outer partitions (e.g...



details:   https://anonhg.NetBSD.org/src/rev/71cc4a8ce728
branches:  trunk
changeset: 848049:71cc4a8ce728
user:      martin <martin%NetBSD.org@localhost>
date:      Wed Jan 15 19:08:24 2020 +0000

description:
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

diffstat:

 usr.sbin/sysinst/partman.c |  28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diffs (69 lines):

diff -r 4dc861b04393 -r 71cc4a8ce728 usr.sbin/sysinst/partman.c
--- a/usr.sbin/sysinst/partman.c        Wed Jan 15 18:47:23 2020 +0000
+++ b/usr.sbin/sysinst/partman.c        Wed Jan 15 19:08:24 2020 +0000
@@ -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 @@
 {
        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_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 @@
 {
        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;



Home | Main Index | Thread Index | Old Index