|
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
[Prev in Thread] | Current Thread | [Next in Thread] |