Fixes FS#59229 Signed-off-by: Chih-Hsuan Yen <yan12125@gmail.com> --- src/pacman/util.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/pacman/util.c b/src/pacman/util.c index e9187529..b45ca22d 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -516,22 +516,32 @@ static void table_print_line(const alpm_list_t *line, short col_padding, i++, curcell = alpm_list_next(curcell)) { const struct table_cell_t *cell = curcell->data; const char *str = (cell->label ? cell->label : ""); - int cell_width; + int padding_width; if(!has_data[i]) { continue; } - cell_width = (cell->mode & CELL_RIGHT_ALIGN ? (int)widths[i] : -(int)widths[i]); - if(need_padding) { printf("%*s", col_padding, ""); } if(cell->mode & CELL_TITLE) { - printf("%s%*s%s", config->colstr.title, cell_width, str, config->colstr.nocolor); + printf("%s", config->colstr.title); + } + /* Handle alignment manually here - for printf in C, "If the + * precision is specified, no more than that many bytes are + * written." [1] + * [1] Section 7.21.6, N2176, final draft for ISO/IEC 9899:2017 (C18) + * Fixes FS#59229. */ + padding_width = (int)(widths[i] - string_length(str)); + if (cell->mode & CELL_RIGHT_ALIGN) { + printf("%*s%s", padding_width, "", str); } else { - printf("%*s", cell_width, str); + printf("%s%*s", str, padding_width, ""); + } + if(cell->mode & CELL_TITLE) { + printf("%s", config->colstr.nocolor); } need_padding = 1; } -- 2.28.0