Module Name: src
Committed By: martin
Date: Thu Jun 2 15:36:08 UTC 2022
Modified Files:
src/usr.sbin/sysinst: disks.c
Log Message:
If we get the disk description via device properties, the strings may
have arbitrary length - make sure the "available disks" menu fits
on the current screen.
To generate a diff of this commit:
cvs rdiff -u -r1.80 -r1.81 src/usr.sbin/sysinst/disks.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/disks.c
diff -u src/usr.sbin/sysinst/disks.c:1.80 src/usr.sbin/sysinst/disks.c:1.81
--- src/usr.sbin/sysinst/disks.c:1.80 Mon May 16 18:44:38 2022
+++ src/usr.sbin/sysinst/disks.c Thu Jun 2 15:36:08 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: disks.c,v 1.80 2022/05/16 18:44:38 martin Exp $ */
+/* $NetBSD: disks.c,v 1.81 2022/06/02 15:36:08 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -881,6 +881,7 @@ find_disks(const char *doingwhat, bool a
int i = 0, dno, wno, skipped = 0;
int already_found, numdisks, selected_disk = -1;
int menu_no, w_menu_no;
+ size_t max_desc_len;
struct pm_devs *pm_i, *pm_last = NULL;
bool any_wedges = false;
@@ -895,6 +896,13 @@ find_disks(const char *doingwhat, bool a
refresh();
/* Kill typeahead, it won't be what the user had in mind */
fpurge(stdin);
+ /*
+ * we need space for the menu box and the row label,
+ * this sums up to 7 characters.
+ */
+ max_desc_len = getmaxx(stdscr) - 8;
+ if (max_desc_len >= __arraycount(disks[0].dd_descr))
+ max_desc_len = __arraycount(disks[0].dd_descr) - 1;
/*
* partman_go: <0 - we want to see menu with extended partitioning
@@ -923,6 +931,7 @@ find_disks(const char *doingwhat, bool a
any_wedges = true;
wedge_menu[wno].opt_name =
disks[i].dd_descr;
+ disks[i].dd_descr[max_desc_len] = 0;
wedge_menu[wno].opt_flags = OPT_EXIT;
wedge_menu[wno].opt_action =
set_menu_select;
@@ -931,6 +940,7 @@ find_disks(const char *doingwhat, bool a
} else {
dsk_menu[dno].opt_name =
disks[i].dd_descr;
+ disks[i].dd_descr[max_desc_len] = 0;
dsk_menu[dno].opt_flags = OPT_EXIT;
dsk_menu[dno].opt_action =
set_menu_select;