diff --git a/libsmartcols-fix-columns-reduction.patch b/libsmartcols-fix-columns-reduction.patch new file mode 100644 index 0000000..6c78ad9 --- /dev/null +++ b/libsmartcols-fix-columns-reduction.patch @@ -0,0 +1,69 @@ +From bb525b59190e3b40b2424f4f1febc22ca9c6b9f3 Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Thu, 18 Jan 2024 13:09:24 +0100 +Subject: [PATCH] libsmartcols: fix columns reduction + +* reduce_to_68() does not care if subtract from column width is + possible (and width is size_t) + +* improve some calculations with 'double' + +Fixes: https://github.com/util-linux/util-linux/issues/2563 +Signed-off-by: Karel Zak +--- + libsmartcols/src/calculate.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/libsmartcols/src/calculate.c b/libsmartcols/src/calculate.c +index e9db3b299..84198da3b 100644 +--- a/libsmartcols/src/calculate.c ++++ b/libsmartcols/src/calculate.c +@@ -118,7 +118,7 @@ static void count_column_deviation(struct libscols_table *tb, struct libscols_co + } + + if (n) +- st->width_avg = sum / n; ++ st->width_avg = (double) sum / (double) n; + + /* count deviation */ + if (n > 1) { +@@ -133,7 +133,7 @@ static void count_column_deviation(struct libscols_table *tb, struct libscols_co + st->width_sqr_sum += diff * diff; /* aka pow(x, 2) */ + } + +- variance = st->width_sqr_sum / (n - 1); ++ variance = st->width_sqr_sum / (double) (n - 1); + st->width_deviation = sqrtroot(variance); + } + +@@ -240,8 +240,8 @@ static int cmp_deviation(struct list_head *a, struct list_head *b, + struct libscols_column *ca = list_entry(a, struct libscols_column, cl_columns); + struct libscols_column *cb = list_entry(b, struct libscols_column, cl_columns); + +- double xa = ca->wstat.width_avg + (3*ca->wstat.width_deviation); +- double xb = cb->wstat.width_avg + (3*cb->wstat.width_deviation); ++ double xa = ca->wstat.width_avg + (3.0 * ca->wstat.width_deviation); ++ double xb = cb->wstat.width_avg + (3.0 * cb->wstat.width_deviation); + + return cmp_numbers(xa, xb); + } +@@ -280,9 +280,15 @@ static void reduce_to_68(struct libscols_column *cl, size_t wanted) + if (st->width_deviation < 1.0) + return; + +- new = st->width_avg + st->width_deviation; ++ new = (size_t) (st->width_avg + st->width_deviation); ++ + if (new < st->width_min) + new = st->width_min; ++ else if (new > st->width_max) ++ new = st->width_max; ++ ++ if (new >= cl->width) ++ return; + + if (cl->width - new > wanted) + cl->width -= wanted; +-- +2.43.0 + diff --git a/util-linux.spec b/util-linux.spec index e937311..c0295e8 100644 --- a/util-linux.spec +++ b/util-linux.spec @@ -2,7 +2,7 @@ Summary: Collection of basic system utilities Name: util-linux Version: 2.39.3 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain URL: https://en.wikipedia.org/wiki/Util-linux @@ -97,6 +97,8 @@ Patch0: login-lastlog-create.patch # Add `/run/motd.d` to the hardcoded MOTD_FILE # https://github.com/coreos/console-login-helper-messages/issues/60 Patch1: login-default-motd-file.patch +# 2258501 - dnf5 unusable with libsmartcols +Patch2: libsmartcols-fix-columns-reduction.patch %description The util-linux package contains a large variety of low-level system @@ -930,6 +932,9 @@ fi %files -n util-linux-i18n -f %{name}.lang %changelog +* Thu Jan 25 2024 Karel Zak - 2.39.3-3 +- fix #2258501 - dnf5 unusable with libsmartcols + * Thu Jan 11 2024 Karel Zak - 2.39.3-2 - fix #2256391 util-linux-i18n conflicts with file from package shadow-utils