]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libsmartcols: don't mix width (in cells) and size (in bytes)
authorKarel Zak <kzak@redhat.com>
Tue, 15 Apr 2014 12:23:34 +0000 (14:23 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 15 Apr 2014 12:23:34 +0000 (14:23 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libsmartcols/src/table_print.c

index c64fe108edd7f33b99f44a1e07f4f7bb89aa0325..19155fb3047c77f2bf549421c0649156ac1e8638 100644 (file)
@@ -133,7 +133,7 @@ static int print_data(struct libscols_table *tb,
                      struct libscols_cell *ce, /* optional */
                      struct libscols_buffer *buf)
 {
-       size_t len = 0, i, width;
+       size_t len = 0, i, width, bytes;
        const char *color = NULL;
        char *data;
 
@@ -175,19 +175,22 @@ static int print_data(struct libscols_table *tb,
        if (!data)
                data = "";
        width = cl->width;
+       bytes = strlen(data);
 
        if (is_last_column(tb, cl) && len < width && !scols_table_is_maxout(tb))
                width = len;
 
        /* truncate data */
        if (len > width && scols_column_is_trunc(cl)) {
-               if (data)
-                       len = mbs_truncate(data, &width);
-               if (!data || len == (size_t) -1) {
-                       len = 0;
+               len = width;
+               bytes = mbs_truncate(data, &len);       /* updates 'len' */
+
+               if (!data || bytes == (size_t) -1) {
+                       bytes = len = 0;
                        data = NULL;
                }
        }
+
        if (data) {
                if (!scols_table_is_raw(tb) && scols_column_is_right(cl)) {
                        size_t xw = cl->width;
@@ -198,8 +201,7 @@ static int print_data(struct libscols_table *tb,
                                fputs(UL_COLOR_RESET, tb->out);
                        if (len < xw)
                                len = xw;
-               }
-               else {
+               } else {
                        if (color)
                                fputs(color, tb->out);
                        fputs(data, tb->out);