On 13/9/20 6:41 pm, Chih-Hsuan Yen wrote:
> For printf in C, width is counted as bytes rather than Unicode width. [1]
>
>> If the precision is specified, no more than that many bytes are written.
>
> [1] Section 7.21.6, N2176, final draft for ISO/IEC 9899:2017 (C18)
>
> Thanks Andrew Gregory for suggesting a simpler approach.
>
> Fixes FS#59229
>
> Signed-off-by: Chih-Hsuan Yen <[email protected]>
> ---
Thanks - looks good to me.
> src/pacman/util.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index e9187529..0c6a0c09 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -522,7 +522,9 @@ static void table_print_line(const alpm_list_t *line,
> short col_padding,
> continue;
> }
>
> - cell_width = (cell->mode & CELL_RIGHT_ALIGN ? (int)widths[i] :
> -(int)widths[i]);
> + /* calculate cell width, adjusting for multi-byte character
> strings */
> + cell_width = (int)widths[i] - string_length(str) + strlen(str);
> + cell_width = cell->mode & CELL_RIGHT_ALIGN ? cell_width :
> -cell_width;
>
> if(need_padding) {
> printf("%*s", col_padding, "");
>