qemu-devel
[Top][All Lists]
Advanced

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

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


From: Paolo Bonzini
Subject: [Qemu-devel] Re: [PATCH 2/5] Support human unit formats in strtobytes, eg. 1.0G
Date: Wed, 15 Sep 2010 17:45:24 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.10) Gecko/20100621 Fedora/3.0.5-1.fc13 Lightning/1.0b2pre Mnenhy/0.8.3 Thunderbird/3.0.5

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

    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]