qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 1/9] cutils: Add qemu_strtod() and qemu_strto


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH v2 1/9] cutils: Add qemu_strtod() and qemu_strtod_finite()
Date: Wed, 21 Nov 2018 11:16:07 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0

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 <address@hidden>

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



reply via email to

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