qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Re: [PATCH 2/5] Support human unit formats in strtobyte


From: Anthony Liguori
Subject: Re: [Qemu-devel] Re: [PATCH 2/5] Support human unit formats in strtobytes, eg. 1.0G
Date: Wed, 15 Sep 2010 10:50:50 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.12) Gecko/20100826 Lightning/1.0b1 Thunderbird/3.0.7

On 09/15/2010 10:45 AM, Paolo Bonzini wrote:
On 09/15/2010 02:23 PM, address@hidden wrote:
      switch (*endptr++) {
      case 'K':
      case 'k':
          value<<= 10;
          break;
      case 0:
+        if (divider) {
+            value = 0;
+            break;
+        }
      case 'M':
      case 'm':
          value<<= 20;
@@ -284,9 +306,12 @@ uint64_t strtobytes(const char *nptr, char **end)
      default:
          value = 0;
      }
+    if (divider)
+        value /= divider;


This risks overflow if you do 1.00000000000000G or something similarly braindead. Do we loathe floating point so much that you cannot use strtod, like

It should be strtod.  Only badness can happen otherwise.

Regards,

Anthony Liguori

    endptr1 = nptr + strspn(s, "0123456789.");
    switch (*endptr1)
    {
    case 0: divider = 1; break;
    case 'm': divider = 1 << 20; break;
    ...
    default: /* error, including for 1.0e+5 and negative */
    }
    value = (uint64_t) (strtod(nptr, &endptr2) / divider);
    if (endptr1 != endptr2) /* error, e.g. 1.2.3 */

    return value;
Paolo





reply via email to

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