[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/3] utils: Deprecate hex-with-suffix sizes

From: Vladimir Sementsov-Ogievskiy
Subject: Re: [PATCH 2/3] utils: Deprecate hex-with-suffix sizes
Date: Fri, 5 Feb 2021 13:25:18 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.0

04.02.2021 22:07, Eric Blake wrote:
Supporting '0x20M' looks odd, particularly since we have an 'E' suffix

What about also deprecating 'E' suffix? (just my problem of reviewing previous 

that is ambiguous between a hex digit and the extremely large exibyte
suffix, as well as a 'B' suffix for bytes.  In practice, people using
hex inputs are specifying values in bytes (and would have written
0x2000000, or possibly relied on default_suffix in the case of
qemu_strtosz_MiB), and the use of scaling suffixes makes the most
sense for inputs in decimal (where the user would write 32M).  But
rather than outright dropping support for hex-with-suffix, let's
follow our deprecation policy.  Sadly, since qemu_strtosz() does not
have an Err** parameter, we pollute to stderr.

Signed-off-by: Eric Blake <eblake@redhat.com>
  docs/system/deprecated.rst | 8 ++++++++
  util/cutils.c              | 6 +++++-
  2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
index 6ac757ed9fa7..c404c3926e6f 100644
--- a/docs/system/deprecated.rst
+++ b/docs/system/deprecated.rst
@@ -146,6 +146,14 @@ library enabled as a cryptography provider.
  Neither the ``nettle`` library, or the built-in cryptography provider are
  supported on FIPS enabled hosts.

+hexadecimal sizes with scaling multipliers (since 6.0)
+Input parameters that take a size value should only use a size suffix
+(such as 'k' or 'M') when the base is written in decimal, and not when
+the value is hexadecimal.  That is, '0x20M' is deprecated, and should
+be written either as '32M' or as '0x2000000'.
  QEMU Machine Protocol (QMP) commands

diff --git a/util/cutils.c b/util/cutils.c
index 0234763bd70b..75190565cbb5 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -264,7 +264,7 @@ static int do_strtosz(const char *nptr, const char **end,
      int retval;
      const char *endptr;
      unsigned char c;
-    bool mul_required = false;
+    bool mul_required = false, hex = false;
      uint64_t val;
      int64_t mul;
      double fraction = 0.0;
@@ -309,6 +309,10 @@ static int do_strtosz(const char *nptr, const char **end,

you forget to set hex to true in corresponding if(){...}

      c = *endptr;
      mul = suffix_mul(c, unit);
      if (mul > 0) {
+        if (hex) {
+            fprintf(stderr, "Using a multiplier suffix on hex numbers "
+                    "is deprecated: %s\n", nptr);
+        }
      } else {
          mul = suffix_mul(default_suffix, unit);

should we also deprecate hex where default_suffix is not 'B' ?

Best regards,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]