On 2/5/21 4:25 AM, Vladimir Sementsov-Ogievskiy wrote: > 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 patch) No, we want to keep '1E' as a valid way to spell 1 exabyte. That has uses in the wild (admittedly corner-case, as that is a LOT of storage). It is only '0x1E' where the use of 'E' as a hex digit has priority over 'E' as a suffix meaning exabyte. > >> 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@xxxxxxxxxx> >> --- >> +++ 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); >> + } D'oh. Now I get to rerun my tests to see when the warning triggers. >> endptr++; >> } else { >> mul = suffix_mul(default_suffix, unit); > > should we also deprecate hex where default_suffix is not 'B' ? That's exactly what this patch is (supposed to be) doing. If we parsed a hex number, and there was an explicit suffix at all (which is necessarily neither 'B' nor 'E', since those were already consumed while parsing the hex number), issue a warning. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org