summaryrefslogtreecommitdiffstats
path: root/libsmartcols/src/calculate.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-14 19:22:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-14 19:22:58 +0000
commit764402d8b945f7abbfa5f68a6d16c94c635f7ffe (patch)
treef04a9feedef2357ee3aa9b9eef439447f76f14c3 /libsmartcols/src/calculate.c
parentAdding debian version 2.40-8. (diff)
downloadutil-linux-764402d8b945f7abbfa5f68a6d16c94c635f7ffe.tar.xz
util-linux-764402d8b945f7abbfa5f68a6d16c94c635f7ffe.zip
Merging upstream version 2.40.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'libsmartcols/src/calculate.c')
-rw-r--r--libsmartcols/src/calculate.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/libsmartcols/src/calculate.c b/libsmartcols/src/calculate.c
index 84198da..86e1b27 100644
--- a/libsmartcols/src/calculate.c
+++ b/libsmartcols/src/calculate.c
@@ -379,9 +379,14 @@ static int reduce_column(struct libscols_table *tb,
/* columns are reduced in "bad first" way, be more
* agresive for the the worst column */
reduce = 3;
- if (cl->width - reduce < st->width_min)
- reduce = cl->width - st->width_min;
- cl->width -= reduce;
+
+ if (cl->width < reduce)
+ reduce = cl->width;
+
+ if (cl->width - reduce > st->width_min)
+ cl->width -= reduce;
+ else
+ cl->width = st->width_min;
break;
default:
return -1; /* no more stages */
@@ -413,10 +418,8 @@ int __scols_calculate(struct libscols_table *tb, struct ul_buffer *buf)
size_t colsepsz;
int sorted = 0;
-
DBG(TAB, ul_debugobj(tb, "-----calculate-(termwidth=%zu)-----", tb->termwidth));
tb->is_dummy_print = 1;
-
colsepsz = scols_table_is_noencoding(tb) ?
mbs_width(colsep(tb)) :
mbs_safe_width(colsep(tb));
@@ -430,6 +433,11 @@ int __scols_calculate(struct libscols_table *tb, struct ul_buffer *buf)
while (scols_table_next_column(tb, &itr, &cl) == 0) {
int is_last;
+ memset(&cl->wstat, 0, sizeof(cl->wstat));
+ cl->width = 0;
+ cl->width_treeart = 0;
+ scols_column_reset_wrap(cl);
+
if (scols_column_is_hidden(cl))
continue;