Module Name: src
Committed By: martin
Date: Tue Jun 18 10:46:51 UTC 2019
Modified Files:
src/usr.sbin/sysinst: util.c
Log Message:
When creating an install description from existing partitions, use
the inner partitioning scheme (e.g.: disklabel) instead of the
outer (e.g. MBR).
To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/usr.sbin/sysinst/util.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/util.c
diff -u src/usr.sbin/sysinst/util.c:1.22 src/usr.sbin/sysinst/util.c:1.23
--- src/usr.sbin/sysinst/util.c:1.22 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/util.c Tue Jun 18 10:46:51 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: util.c,v 1.22 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: util.c,v 1.23 2019/06/18 10:46:51 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -2032,8 +2032,38 @@ bool
install_desc_from_parts(struct install_partition_desc *install,
struct disk_partitions *parts)
{
+ struct disk_partitions *inner_parts;
+ daddr_t start, size;
+ part_id pno;
+ struct disk_part_info info;
+
memset(install, 0, sizeof(*install));
+ if (parts->pscheme->secondary_scheme != NULL) {
+ start = -1;
+ size = -1;
+ if (parts->pscheme->guess_install_target != NULL &&
+ parts->pscheme->guess_install_target(parts,
+ &start, &size)) {
+ } else {
+ for (pno = 0; pno < parts->num_part; pno++) {
+ if (!parts->pscheme->get_part_info(parts, pno,
+ &info))
+ continue;
+ if (!(info.flags & PTI_SEC_CONTAINER))
+ continue;
+ start = info.start;
+ size = info.size;
+ }
+ }
+ if (size > 0) {
+ inner_parts = parts->pscheme->secondary_partitions(
+ parts, start, false);
+ if (inner_parts != NULL)
+ parts = inner_parts;
+ }
+ }
+
return usage_info_list_from_parts(&install->infos, &install->num,
parts);
}