boot: replace manual string manipulation with xasprintf

This commit is contained in:
TobiPeterG
2024-03-06 15:07:26 +00:00
committed by Luca Boccassi
parent c742317274
commit 5ff20f638b
+13 -11
View File
@@ -741,23 +741,25 @@ static bool menu_run(
lines = xnew(char16_t *, config->n_entries + 1);
for (size_t i = 0; i < config->n_entries; i++) {
size_t j, padding;
lines[i] = xnew(char16_t, line_width + 1);
padding = (line_width - MIN(strlen16(config->entries[i]->title_show), line_width)) / 2;
size_t width = line_width - MIN(strlen16(config->entries[i]->title_show), line_width);
size_t padding = width / 2;
bool odd = width % 2;
/* Make sure there is space for => */
padding = MAX((size_t) 2, padding);
for (j = 0; j < padding; j++)
lines[i][j] = ' ';
size_t print_width = MIN(
strlen16(config->entries[i]->title_show),
line_width - padding * 2);
for (size_t k = 0; config->entries[i]->title_show[k] != '\0' && j < line_width; j++, k++)
lines[i][j] = config->entries[i]->title_show[k];
assert((padding + 1) <= INT_MAX);
assert(print_width <= INT_MAX);
for (; j < line_width; j++)
lines[i][j] = ' ';
lines[i][line_width] = '\0';
lines[i] = xasprintf(
"%*ls%.*ls%*ls",
(int) padding, u"",
(int) print_width, config->entries[i]->title_show,
odd ? (int) (padding + 1) : (int) padding, u"");
}
lines[config->n_entries] = NULL;