Module Name:    src
Committed By:   martin
Date:           Thu Dec 15 14:54:27 UTC 2022

Modified Files:
        src/usr.sbin/sysinst: gpt.c

Log Message:
PR 57100: fix install flag handling for newly added GPT partitions,
fix multiple install flags when updating existing partitions.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/usr.sbin/sysinst/gpt.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/gpt.c
diff -u src/usr.sbin/sysinst/gpt.c:1.29 src/usr.sbin/sysinst/gpt.c:1.30
--- src/usr.sbin/sysinst/gpt.c:1.29	Sat Jun 11 15:41:19 2022
+++ src/usr.sbin/sysinst/gpt.c	Thu Dec 15 14:54:27 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: gpt.c,v 1.29 2022/06/11 15:41:19 martin Exp $	*/
+/*	$NetBSD: gpt.c,v 1.30 2022/12/15 14:54:27 martin Exp $	*/
 
 /*
  * Copyright 2018 The NetBSD Foundation, Inc.
@@ -622,7 +622,6 @@ gpt_set_part_info(struct disk_partitions
 	struct gpt_part_entry *p = parts->partitions, *n;
 	part_id no;
 	daddr_t lendiff;
-	bool was_target;
 
 	for (no = 0; p != NULL && no < id; no++)
 		p = p->gp_next;
@@ -631,15 +630,14 @@ gpt_set_part_info(struct disk_partitions
 		return false;
 
 	/* update target mark - we can only have one */
-	was_target = (p->gp_flags & GPEF_TARGET) != 0;
-	if (info->flags & PTI_INSTALL_TARGET)
+	if (info->flags & PTI_INSTALL_TARGET) {
 		p->gp_flags |= GPEF_TARGET;
-	else
-		p->gp_flags &= ~GPEF_TARGET;
-	if (was_target)
 		for (n = parts->partitions; n != NULL; n = n->gp_next)
 			if (n != p)
 				n->gp_flags &= ~GPEF_TARGET;
+	} else {
+		p->gp_flags &= ~GPEF_TARGET;
+	}
 
 	if ((p->gp_flags & GPEF_ON_DISK)) {
 		if (info->start != p->gp_start) {
@@ -1077,7 +1075,7 @@ gpt_add_part(struct disk_partitions *arg
 	    (struct gpt_disk_partitions*)arg;
 	struct disk_part_free_space space;
 	struct disk_part_info data = *info;
-	struct gpt_part_entry *p;
+	struct gpt_part_entry *p, *n;
 	bool ok;
 
 	if (err_msg != NULL)
@@ -1111,6 +1109,14 @@ gpt_add_part(struct disk_partitions *arg
 	p->gp_flags |= GPEF_MODIFIED;
 	ok = gpt_insert_part_into_list(parts, &parts->partitions, p, err_msg);
 	if (ok) {
+		if (info->flags & PTI_INSTALL_TARGET) {
+			/* update target mark - we can only have one */
+			p->gp_flags |= GPEF_TARGET;
+			for (n = parts->partitions; n != NULL; n = n->gp_next)
+				if (n != p)
+					n->gp_flags &= ~GPEF_TARGET;
+		}
+
 		parts->dp.num_part++;
 		parts->dp.free_space -= p->gp_size;
 		return parts->dp.num_part-1;

Reply via email to