utils: Deprecate hex-with-suffix sizes
Supporting '0x20M' looks odd, particularly since we have a 'B' suffix that is ambiguous for bytes, as well as a less-frequently-used 'E' suffix for extremely large exibytes. 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, and plumbing that in would be a much larger task, we instead go with just directly emitting the deprecation warning to stderr. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20210211204438.1184395-4-eblake@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
cf923b783e
commit
f174cd3350
@ -166,6 +166,14 @@ Using ``-M kernel-irqchip=off`` with x86 machine types that include a local
|
||||
APIC is deprecated. The ``split`` setting is supported, as is using
|
||||
``-M kernel-irqchip=off`` with the ISA PC machine type.
|
||||
|
||||
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
|
||||
------------------------------------
|
||||
|
||||
|
@ -250,6 +250,9 @@ static int64_t suffix_mul(char suffix, int64_t unit)
|
||||
* fractional portion is truncated to byte
|
||||
* - 0x7fEE - hexadecimal, unit determined by @default_suffix
|
||||
*
|
||||
* The following cause a deprecation warning, and may be removed in the future
|
||||
* - 0xabc{kKmMgGtTpP} - hex with scaling suffix
|
||||
*
|
||||
* The following are intentionally not supported
|
||||
* - octal, such as 08
|
||||
* - fractional hex, such as 0x1.8
|
||||
@ -272,7 +275,7 @@ static int do_strtosz(const char *nptr, const char **end,
|
||||
int retval;
|
||||
const char *endptr, *f;
|
||||
unsigned char c;
|
||||
bool mul_required = false;
|
||||
bool mul_required = false, hex = false;
|
||||
uint64_t val;
|
||||
int64_t mul;
|
||||
double fraction = 0.0;
|
||||
@ -298,6 +301,7 @@ static int do_strtosz(const char *nptr, const char **end,
|
||||
retval = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
hex = true;
|
||||
} else if (*endptr == '.') {
|
||||
/*
|
||||
* Input looks like a fraction. Make sure even 1.k works
|
||||
@ -320,6 +324,10 @@ static int do_strtosz(const char *nptr, const char **end,
|
||||
c = *endptr;
|
||||
mul = suffix_mul(c, unit);
|
||||
if (mul > 0) {
|
||||
if (hex) {
|
||||
warn_report("Using a multiplier suffix on hex numbers "
|
||||
"is deprecated: %s", nptr);
|
||||
}
|
||||
endptr++;
|
||||
} else {
|
||||
mul = suffix_mul(default_suffix, unit);
|
||||
|
Loading…
Reference in New Issue
Block a user