Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/usr.sbin/sysinst/label.c,v rcsdiff: /ftp/cvs/cvsroot/src/usr.sbin/sysinst/label.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.17 retrieving revision 1.18 diff -u -p -r1.17 -r1.18 --- src/usr.sbin/sysinst/label.c 2019/12/15 11:22:46 1.17 +++ src/usr.sbin/sysinst/label.c 2020/01/09 13:22:30 1.18 @@ -1,4 +1,4 @@ -/* $NetBSD: label.c,v 1.17 2019/12/15 11:22:46 martin Exp $ */ +/* $NetBSD: label.c,v 1.18 2020/01/09 13:22:30 martin Exp $ */ /* * Copyright 1997 Jonathan Stone @@ -36,7 +36,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: label.c,v 1.17 2019/12/15 11:22:46 martin Exp $"); +__RCSID("$NetBSD: label.c,v 1.18 2020/01/09 13:22:30 martin Exp $"); #endif #include @@ -182,7 +182,7 @@ checkoverlap(struct disk_partitions *par * 2 -> continue installation */ static int -verify_parts(struct partition_usage_set *pset) +verify_parts(struct partition_usage_set *pset, bool install) { struct part_usage_info *wanted; struct disk_partitions *parts; @@ -217,9 +217,9 @@ verify_parts(struct partition_usage_set } } - if (num_root == 0 || + if ((num_root == 0 && install) || (num_root > 1 && inst_start == 0)) { - if (num_root == 0) + if (num_root == 0 && install) msg_display_subst(MSG_must_be_one_root, 2, msg_string(parts->pscheme->name), msg_string(parts->pscheme->short_name)); @@ -426,6 +426,10 @@ renumber_partitions(struct partition_usa for (i = 0; i < pset->parts->num_part; i++) { if (pset->infos[i].cur_start != info.start) continue; + if (pset->infos[i].cur_flags != info.flags) + continue; + if (pset->infos[i].type != info.nat_type->generic_ptype) + continue; memcpy(&ninfos[pno], &pset->infos[i], sizeof(ninfos[pno])); ninfos[pno].cur_part_id = pno; @@ -1549,7 +1553,6 @@ add_partition_adder(menudesc *m, struct m->opts = nmenopts; m->numopts++; - pset->num++; } static void @@ -1561,7 +1564,6 @@ remove_partition_adder(menudesc *m, stru memmove(m->opts+off, m->opts+off+1, (m->numopts-off-1)*sizeof(*m->opts)); m->numopts--; - pset->num--; } /* @@ -1571,6 +1573,9 @@ remove_partition_adder(menudesc *m, stru static void show_partition_adder(menudesc *m, struct partition_usage_set *pset) { + if (m->opts == NULL) + return; + bool can_add_partition = pset->parts->pscheme->can_add_partition( pset->parts); bool part_adder_present = @@ -1605,7 +1610,8 @@ edit_fspart_abort(menudesc *m, void *arg * Ask the user if they want to edit the partition or give up. */ int -edit_and_check_label(struct pm_devs *p, struct partition_usage_set *pset) +edit_and_check_label(struct pm_devs *p, struct partition_usage_set *pset, + bool install) { menu_ent *op; size_t cnt, i; @@ -1697,7 +1703,7 @@ edit_and_check_label(struct pm_devs *p, } /* User thinks the label is OK. */ - i = verify_parts(pset); + i = verify_parts(pset, install); if (i == 1) continue; break;