From: Igor Gnatenko Date: Fri, 22 Jan 2016 13:29:16 +0000 (+0100) Subject: libsmartcols: wrap columns correctly with unicode X-Git-Tag: v2.28-rc1~162^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6f89163be323b72ebb33b456671195ca51e02c4;p=thirdparty%2Futil-linux.git libsmartcols: wrap columns correctly with unicode Signed-off-by: Igor Gnatenko --- diff --git a/libsmartcols/src/table_print.c b/libsmartcols/src/table_print.c index f1b0d5965f..b676407510 100644 --- a/libsmartcols/src/table_print.c +++ b/libsmartcols/src/table_print.c @@ -352,15 +352,25 @@ static int print_data(struct libscols_table *tb, if (color) fputs(UL_COLOR_RESET, tb->out); len = width; - } else if (scols_column_is_wrap(cl)) { + } else if (len > width && scols_column_is_wrap(cl)) { char *p = data; + i = 0; while (*p) { - fprintf(tb->out, "%.*s", (int) width, p); - p += width; + len = width; + p = strdup(p); + bytes = mbs_truncate(p, &len); + if (bytes == (size_t) -1) { + free(p); + break; + } + fputs(p, tb->out); + free(p); + i += bytes; + p = data + i; if (*p) - for (i = 0; i < cl->seqnum; i++) - print_empty_cell (tb, scols_table_get_column(tb, i), + for (size_t j = 0; j < cl->seqnum; j++) + print_empty_cell (tb, scols_table_get_column(tb, j), NULL, buf->bufsz); } } else if (color) {