Module Name:    src
Committed By:   martin
Date:           Sun Jul 10 10:52:41 UTC 2022

Modified Files:
        src/usr.sbin/sysinst: defs.h install.c main.c menus.mi partman.c util.c

Log Message:
Preparations to make the extended partitioning during normal installation
more usefull - pass an optional install_description to partman().


To generate a diff of this commit:
cvs rdiff -u -r1.85 -r1.86 src/usr.sbin/sysinst/defs.h
cvs rdiff -u -r1.23 -r1.24 src/usr.sbin/sysinst/install.c
cvs rdiff -u -r1.29 -r1.30 src/usr.sbin/sysinst/main.c
cvs rdiff -u -r1.25 -r1.26 src/usr.sbin/sysinst/menus.mi
cvs rdiff -u -r1.55 -r1.56 src/usr.sbin/sysinst/partman.c
cvs rdiff -u -r1.68 -r1.69 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/defs.h
diff -u src/usr.sbin/sysinst/defs.h:1.85 src/usr.sbin/sysinst/defs.h:1.86
--- src/usr.sbin/sysinst/defs.h:1.85	Fri Jun 24 22:28:11 2022
+++ src/usr.sbin/sysinst/defs.h	Sun Jul 10 10:52:40 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: defs.h,v 1.85 2022/06/24 22:28:11 tsutsui Exp $	*/
+/*	$NetBSD: defs.h,v 1.86 2022/07/10 10:52:40 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -503,6 +503,7 @@ struct part_entry {
 	part_id id;
 	struct disk_partitions *parts;
 	void *dev_ptr;
+	struct install_partition_desc *install;
 	size_t index;	/* e.g. if PM_RAID: this is raids[index] */
 	int dev_ptr_delta;
 	char fullname[SSTRSIZE];
@@ -895,6 +896,11 @@ bool	use_tgz_for_set(const char*);
 const char *set_postfix(const char*);
 bool	usage_set_from_parts(struct partition_usage_set*,
 	    struct disk_partitions*);
+bool	usage_set_from_install_desc(struct partition_usage_set*,
+	    const struct install_partition_desc*,
+	    struct disk_partitions*);
+bool	merge_usage_set_into_install_desc(struct install_partition_desc*,
+	    const struct partition_usage_set*);
 void	free_usage_set(struct partition_usage_set*);
 bool	install_desc_from_parts(struct install_partition_desc *,
 	    struct disk_partitions*);
@@ -938,12 +944,12 @@ void	umount_root(void);
 
 /* from partman.c */
 #ifndef NO_PARTMAN
-int partman(void);
+int partman(struct install_partition_desc*);
 int pm_getrefdev(struct pm_devs *);
 void update_wedges(const char *);
 void pm_destroy_all(void);
 #else
-static inline int partman(void) { return -1; }
+static inline int partman(struct install_partition_desc*) { return -1; }
 static inline int pm_getrefdev(struct pm_devs *x __unused) { return -1; }
 #define update_wedges(x) __nothing
 #endif

Index: src/usr.sbin/sysinst/install.c
diff -u src/usr.sbin/sysinst/install.c:1.23 src/usr.sbin/sysinst/install.c:1.24
--- src/usr.sbin/sysinst/install.c:1.23	Thu Apr 21 17:30:15 2022
+++ src/usr.sbin/sysinst/install.c	Sun Jul 10 10:52:40 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: install.c,v 1.23 2022/04/21 17:30:15 martin Exp $	*/
+/*	$NetBSD: install.c,v 1.24 2022/07/10 10:52:40 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -173,7 +173,7 @@ do_install(void)
 	/* Create and mount partitions */
 	find_disks_ret = find_disks(msg_string(MSG_install), false);
 	if (partman_go == 1) {
-		if (partman() < 0) {
+		if (partman(&install) < 0) {
 			hit_enter_to_continue(MSG_abort_part, NULL);
 			return;
 		}

Index: src/usr.sbin/sysinst/main.c
diff -u src/usr.sbin/sysinst/main.c:1.29 src/usr.sbin/sysinst/main.c:1.30
--- src/usr.sbin/sysinst/main.c:1.29	Fri Jan 28 19:38:51 2022
+++ src/usr.sbin/sysinst/main.c	Sun Jul 10 10:52:40 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.29 2022/01/28 19:38:51 wiz Exp $	*/
+/*	$NetBSD: main.c,v 1.30 2022/07/10 10:52:40 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -307,7 +307,7 @@ main(int argc, char **argv)
 
 	/* Menu processing */
 	if (partman_go)
-		partman();
+		partman(NULL);
 	else
 		process_menu(MENU_netbsd, NULL);
 

Index: src/usr.sbin/sysinst/menus.mi
diff -u src/usr.sbin/sysinst/menus.mi:1.25 src/usr.sbin/sysinst/menus.mi:1.26
--- src/usr.sbin/sysinst/menus.mi:1.25	Wed May 18 16:39:03 2022
+++ src/usr.sbin/sysinst/menus.mi	Sun Jul 10 10:52:40 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: menus.mi,v 1.25 2022/05/18 16:39:03 martin Exp $	*/
+/*	$NetBSD: menus.mi,v 1.26 2022/07/10 10:52:40 martin Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -283,7 +283,7 @@ menu utility, title MSG_NetBSD_VERSION_U
 		action {
 #ifndef NO_PARTMAN
 			partman_go = 1;
-			partman();
+			partman(NULL);
 #endif
 		};
 	option MSG_Logging_functions, action { do_logging(); };

Index: src/usr.sbin/sysinst/partman.c
diff -u src/usr.sbin/sysinst/partman.c:1.55 src/usr.sbin/sysinst/partman.c:1.56
--- src/usr.sbin/sysinst/partman.c:1.55	Fri Apr  8 10:17:55 2022
+++ src/usr.sbin/sysinst/partman.c	Sun Jul 10 10:52:41 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: partman.c,v 1.55 2022/04/08 10:17:55 andvar Exp $ */
+/*	$NetBSD: partman.c,v 1.56 2022/07/10 10:52:41 martin Exp $ */
 
 /*
  * Copyright 2012 Eugene Lozovoy
@@ -241,9 +241,16 @@ static int pm_raid_disk_add(menudesc *, 
 static int pm_raid_disk_del(menudesc *, void *);
 static int pm_cgd_disk_set(struct cgd_desc *, struct part_entry *);
 static int pm_mount(struct pm_devs *, int);
-static int pm_upddevlist(menudesc *, void *);
+static int pm_upddevlist(menudesc *, void *, struct install_partition_desc *);
 static void pm_select(struct pm_devs *);
 
+
+static int
+pm_do_upddevlist(menudesc *m, void *arg)
+{
+	return pm_upddevlist(m, arg, ((struct part_entry*)arg)->install);
+}
+
 static void
 pm_edit_size_value(msg prompt_msg, daddr_t bps, daddr_t cylsec, daddr_t *size)
 {
@@ -2706,7 +2713,7 @@ pm_commit(menudesc *m, void *arg)
 		return -1;
 	}
 	if (m != NULL && arg != NULL)
-		pm_upddevlist(m, arg);
+		pm_do_upddevlist(m, arg);
 	if (logfp)
 		fflush (logfp);
 
@@ -2947,7 +2954,7 @@ pm_upddevlist_adv(menudesc *m, void *arg
 
 /* Update partman main menu with devices list */
 static int
-pm_upddevlist(menudesc *m, void *arg)
+pm_upddevlist(menudesc *m, void *arg, struct install_partition_desc *install)
 {
 	int i = 0;
 	size_t ii;
@@ -2980,17 +2987,19 @@ pm_upddevlist(menudesc *m, void *arg)
 		return -1;
 
 	SLIST_FOREACH(pm_i, &pm_head, l) {
+		struct part_entry *cur_entry = ((struct part_entry *)arg)+i;
 		memset(&m->opts[i], 0, sizeof m->opts[i]);
 		m->opts[i].opt_action = pm_submenu;
-		((struct part_entry *)arg)[i].dev_ptr = pm_i;
-		((struct part_entry *)arg)[i].id = NO_PART;
+		cur_entry->dev_ptr = pm_i;
+		cur_entry->id = NO_PART;
+		cur_entry->install = install;
 		if (pm_i->no_part)
-			((struct part_entry *)arg)[i].type = PM_SPEC;
+			cur_entry->type = PM_SPEC;
 		else {
 			ps = pm_i->parts != NULL ? pm_i->parts->pscheme : NULL;
 			secondary = NULL;
 
-			((struct part_entry *)arg)[i].type = PM_DISK;
+			cur_entry->type = PM_DISK;
 
 			for (ii = 0; pm_i->parts != NULL &&
 			    ii < pm_i->parts->num_part; ii++) {
@@ -3014,13 +3023,14 @@ pm_upddevlist(menudesc *m, void *arg)
 				if (i >= MAX_ENTRIES)
 					break;
 				i++;
+				cur_entry = ((struct part_entry *)arg)+i;
 				memset(&m->opts[i], 0, sizeof m->opts[i]);
 				m->opts[i].opt_action = pm_submenu;
-				((struct part_entry *)arg)[i].parts =
-				    pm_i->parts;
-				((struct part_entry *)arg)[i].dev_ptr = pm_i;
-				((struct part_entry *)arg)[i].id = ii;
-				((struct part_entry *)arg)[i].type = PM_PART;
+				cur_entry->parts = pm_i->parts;
+				cur_entry->dev_ptr = pm_i;
+				cur_entry->install = install;
+				cur_entry->id = ii;
+				cur_entry->type = PM_PART;
 			}
 
 			for (ii = 0; secondary != NULL &&
@@ -3036,12 +3046,14 @@ pm_upddevlist(menudesc *m, void *arg)
 				if (i >= MAX_ENTRIES)
 					break;
 				i++;
+				cur_entry = ((struct part_entry *)arg)+i;
 				memset(&m->opts[i], 0, sizeof m->opts[i]);
 				m->opts[i].opt_action = pm_submenu;
-				((struct part_entry *)arg)[i].parts = secondary;
-				((struct part_entry *)arg)[i].dev_ptr = pm_i;
-				((struct part_entry *)arg)[i].id = ii;
-				((struct part_entry *)arg)[i].type = PM_PART;
+				cur_entry->parts = secondary;
+				cur_entry->dev_ptr = pm_i;
+				cur_entry->install = install;
+				cur_entry->id = ii;
+				cur_entry->type = PM_PART;
 			}
 		}
 		i++;
@@ -3072,7 +3084,7 @@ pm_upddevlist(menudesc *m, void *arg)
 
 	m->opts[i++] = (struct menu_ent) {
 		.opt_name = MSG_updpmlist,
-		.opt_action = pm_upddevlist,
+		.opt_action = pm_do_upddevlist,
 	};
 	m->opts[i  ] = (struct menu_ent) {
 		.opt_name = MSG_savepm,
@@ -3103,12 +3115,12 @@ pm_menuout(menudesc *m, void *arg)
 
 /* Main partman function */
 int
-partman(void)
+partman(struct install_partition_desc *install)
 {
 	int menu_no, menu_num_entries;
 	static int firstrun = 1;
 	menu_ent menu_entries[MAX_ENTRIES+6];
-	struct part_entry args[MAX_ENTRIES];
+	struct part_entry args[MAX_ENTRIES] = { 0 };
 
 	if (firstrun) {
 		check_available_binaries();
@@ -3181,7 +3193,8 @@ partman(void)
 	}
 
 	do {
-		menu_num_entries = pm_upddevlist(&(menudesc){.opts = menu_entries}, args);
+		menu_num_entries = pm_upddevlist(&(menudesc){.opts = menu_entries},
+		    args, install);
 		menu_no = new_menu(MSG_partman_header,
 			menu_entries, menu_num_entries+1, 1, 1, 0, 75, /* Fixed width */
 			MC_ALWAYS_SCROLL | MC_NOBOX | MC_NOCLEAR,
@@ -3270,8 +3283,14 @@ pm_edit_partitions(struct part_entry *pe
 	}
 
 	if (parts != NULL) {
-		usage_set_from_parts(&pset, parts);
+		if (!pe->install ||
+		    !usage_set_from_install_desc(&pset, pe->install, parts))
+			usage_set_from_parts(&pset, parts);
 		edit_and_check_label(my_pm, &pset, false);
+
+		if (pe->install)
+			merge_usage_set_into_install_desc(pe->install,
+			    &pset);
 		free_usage_set(&pset);
 	}
 

Index: src/usr.sbin/sysinst/util.c
diff -u src/usr.sbin/sysinst/util.c:1.68 src/usr.sbin/sysinst/util.c:1.69
--- src/usr.sbin/sysinst/util.c:1.68	Fri Jun 24 22:05:24 2022
+++ src/usr.sbin/sysinst/util.c	Sun Jul 10 10:52:41 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.68 2022/06/24 22:05:24 tsutsui Exp $	*/
+/*	$NetBSD: util.c,v 1.69 2022/07/10 10:52:41 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -2468,6 +2468,47 @@ usage_set_from_parts(struct partition_us
 	return usage_info_list_from_parts(&wanted->infos, &wanted->num, parts);
 }
 
+bool
+usage_set_from_install_desc(struct partition_usage_set *pset,
+    const struct install_partition_desc *install,
+    struct disk_partitions *parts)
+{
+	size_t cnt, i;
+
+	memset(pset, 0, sizeof(*pset));
+	pset->parts = parts;
+
+	if (!install->infos || !install->num)
+		return false;
+
+	for (cnt = 0, i = 0; i < install->num; i++) {
+		if (install->infos[i].parts != parts)
+			continue;
+		cnt++;
+	}
+	if (!cnt)
+		return false;
+	pset->num = cnt;
+	pset->infos = calloc(cnt, sizeof(*pset->infos));
+	if (!pset->infos)
+		return false;
+	for (cnt = 0, i = 0; i < install->num; i++) {
+		if (install->infos[i].parts != parts)
+			continue;
+		pset->infos[cnt] = install->infos[i];
+		cnt++;
+	}
+	return true;
+}
+
+bool
+merge_usage_set_into_install_desc(struct install_partition_desc *install,
+    const struct partition_usage_set *pset)
+{
+	// XXX
+	return false;
+}
+
 struct disk_partitions *
 get_inner_parts(struct disk_partitions *parts)
 {

Reply via email to