vshTableGetColumnsWidths: Include spacing in lenght calculation

Modify the array holding lengths of individual columns in the table to
include the spacing. This will be used later when we'll allow to modify
the spacing.

To do this we'll include the 3 extra spaces as lengths as well as fix
the two loops using the value to use it directly.

Since the spacing is not included in the string the code in
'vshTableRowPrint' is modified to explicitly add the spacing instead of
adding a constant to the calculated length.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa committed 2026-04-24 11:29:01 +02:00
1 parent c617aa3fbb
commit ef928ebd7b
1 file changed
+8 -3
+8 -3
View File
@@ -257,7 +257,8 @@ vshTableSafeEncode(const char *s, size_t *width)
*
* Fill passed @maxwidths and @widths arrays with maximum number
* of characters for columns and number of character per each
* table cell, respectively.
* table cell, respectively. Both lengths include the extra whitespace for
* separation of columns.
* Handle unicode strings (user must have multibyte locale)
*
* Return 0 in case of success, -1 otherwise.
@@ -284,6 +285,9 @@ vshTableGetColumnsWidths(vshTable *table,
if (!tmp)
return -1;
/* include the built-in whitespace in the calculated length */
size += 3;
VIR_FREE(row->cells[j]);
row->cells[j] = tmp;
widths[i][j] = size;
@@ -317,8 +321,9 @@ vshTableRowPrint(vshTableRow *row,
virBufferAsprintf(buf, " %s", row->cells[i]);
if (i < (row->ncells - 1)) {
for (j = 0; j < maxwidths[i] - widths[i] + 2; j++)
for (j = 0; j < maxwidths[i] - widths[i]; j++)
virBufferAddChar(buf, ' ');
virBufferAddLit(buf, " ");
}
}
virBufferAddChar(buf, '\n');
@@ -365,7 +370,7 @@ vshTablePrint(vshTable *table, bool header)
/* print dividing line */
for (i = 0; i < table->rows[0]->ncells; i++) {
for (j = 0; j < maxwidths[i] + 3; j++)
for (j = 0; j < maxwidths[i]; j++)
virBufferAddChar(&buf, '-');
}
virBufferAddChar(&buf, '\n');