On 11/21/18 4:35 AM, David Hildenbrand wrote:
+int qemu_strtod_finite(const char *nptr, const char **endptr, double *result)
+{
+ double tmp;
+ int ret;
+
+ ret = qemu_strtod(nptr, endptr, &tmp);
+ if (ret) {
+ return ret;
So, if we overflow, we are returning -ERANGE but with nothing stored
into *result. This is different from qemu_strtod(), where a return of
-ERANGE guarantees that *result is one of 4 values (+/- 0.0/inf).
That seems awkward.
Violates the contract's "like qemu_strtod()".
Right, I missed that. What about something like this:
int qemu_strtod_finite(const char *nptr, const char **endptr, double
*result)
{
double tmp;
int ret;
ret = qemu_strtod(nptr, endptr, &tmp);
if (!ret && !isfinite(tmp)) {
if (endptr) {
*endptr = nptr;
}
ret = -EINVAL;
}
if (ret != -EINVAL) {
*result = tmp;
}
return ret;
}
With that algorithm, v3 can have:
Reviewed-by: Eric Blake <ebl...@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org