diff --git a/qemu/target/i386/cpu.c b/qemu/target/i386/cpu.c index d3749f37..2db4de35 100644 --- a/qemu/target/i386/cpu.c +++ b/qemu/target/i386/cpu.c @@ -2182,10 +2182,9 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, /* Special case: */ if (!strcmp(name, "tsc-freq")) { int64_t tsc_freq; - char *err; - tsc_freq = qemu_strtosz_metric(val, &err); - if (tsc_freq < 0 || *err) { + tsc_freq = qemu_strtosz_metric(val, NULL); + if (tsc_freq < 0) { error_setg(errp, "bad numerical value %s", val); return; } diff --git a/qemu/util/cutils.c b/qemu/util/cutils.c index 78f895ad..93c020b6 100644 --- a/qemu/util/cutils.c +++ b/qemu/util/cutils.c @@ -157,7 +157,7 @@ static int64_t suffix_mul(char suffix, int64_t unit) static int64_t do_strtosz(const char *nptr, char **end, const char default_suffix, int64_t unit) { - int64_t retval = -EINVAL; + int64_t retval; char *endptr; unsigned char c; int mul_required = 0; @@ -166,7 +166,8 @@ static int64_t do_strtosz(const char *nptr, char **end, errno = 0; val = strtod(nptr, &endptr); if (isnan(val) || endptr == nptr || errno != 0) { - goto fail; + retval = -EINVAL; + goto out; } fraction = modf(val, &integral); if (fraction != 0) { @@ -181,17 +182,20 @@ static int64_t do_strtosz(const char *nptr, char **end, assert(mul >= 0); } if (mul == 1 && mul_required) { - goto fail; + retval = -EINVAL; + goto out; } if ((val * mul >= INT64_MAX) || val < 0) { retval = -ERANGE; - goto fail; + goto out; } retval = (int64_t)(val * mul); -fail: +out: if (end) { *end = endptr; + } else if (*endptr) { + retval = -EINVAL; } return retval;