On 30/12/2024 22:11, наб wrote:
$ for f in none auto si iec iec-i; do numfmt --from=$f 230000; done
> 230000
> 230000
> 230000
> 230000
> numfmt: missing 'i' suffix in input: ‘230000’ (e.g Ki/Mi/Gi)
Fixed with the attached.
cheers,
Pádraig
From 6229ac946e6ee36158db1a592279671d79a9737a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Mon, 30 Dec 2024 22:48:14 +0000
Subject: [PATCH] numfmt: don't require a suffix with --from=iec-i
* src/numfmt.c (simple_strtod_human): Only look for 'i'
after detecting a suffix.
* tests/misc/numfmt.pl: Add a test case.
* NEWS: Mention the bug fix.
Reported at https://bugs.debian.org/1091758
---
NEWS | 4 ++++
src/numfmt.c | 15 +++++++--------
tests/misc/numfmt.pl | 1 +
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/NEWS b/NEWS
index f76393506..fff58de81 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,10 @@ GNU coreutils NEWS -*- outline -*-
Previously it would have ignored the affinity mask on such systems.
[bug introduced with nproc in coreutils-8.1]
+ numfmt --from=iec-i now works with numbers without a suffix.
+ Previously such numbers were rejected with an error.
+ [bug introduced with numfmt in coreutils-8.21]
+
printf now diagnoses attempts to treat empty strings as numbers,
as per POSIX. For example, "printf '%d' ''" now issues a diagnostic
and fails instead of silently succeeding.
diff --git a/src/numfmt.c b/src/numfmt.c
index a9f9e81c8..99c58aee1 100644
--- a/src/numfmt.c
+++ b/src/numfmt.c
@@ -667,18 +667,17 @@ simple_strtod_human (char const *input_str,
devmsg (" Auto-scaling, found 'i', switching to base %d\n",
scale_base);
}
+ else if (allowed_scaling == scale_IEC_I)
+ {
+ if (**endptr == 'i')
+ (*endptr)++;
+ else
+ return SSE_MISSING_I_SUFFIX;
+ }
*precision = 0; /* Reset, to select precision based on scale. */
}
- if (allowed_scaling == scale_IEC_I)
- {
- if (**endptr == 'i')
- (*endptr)++;
- else
- return SSE_MISSING_I_SUFFIX;
- }
-
long double multiplier = powerld (scale_base, power);
devmsg (" suffix power=%d^%d = %Lf\n", scale_base, power, multiplier);
diff --git a/tests/misc/numfmt.pl b/tests/misc/numfmt.pl
index 94f9ec58e..148d9d80c 100755
--- a/tests/misc/numfmt.pl
+++ b/tests/misc/numfmt.pl
@@ -41,6 +41,7 @@ my @Tests =
['4', '--from=auto 1K', {OUT => "1000"}],
['5', '--from=auto 1Ki', {OUT => "1024"}],
['5.1', '--from=iec-i 1Ki', {OUT => "1024"}],
+ ['5.2', '--from=iec-i 1', {OUT => "1"}],
['6', {IN_PIPE => "1234\n"}, {OUT => "1234"}],
['7', '--from=si', {IN_PIPE => "2K\n"}, {OUT => "2000"}],
--
2.47.1