From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=58032 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P49On-0006C5-7p for qemu-devel@nongnu.org; Fri, 08 Oct 2010 05:37:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P49Om-0006JP-6M for qemu-devel@nongnu.org; Fri, 08 Oct 2010 05:37:57 -0400 Received: from moutng.kundenserver.de ([212.227.126.187]:64062) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P49Ol-0006JF-RJ for qemu-devel@nongnu.org; Fri, 08 Oct 2010 05:37:56 -0400 Message-ID: <4CAEE65F.8080902@mail.berlios.de> Date: Fri, 08 Oct 2010 11:37:35 +0200 From: Stefan Weil MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 2/7] Support human unit formats in strtosz, eg. 1.0G References: <1286529360-5715-1-git-send-email-Jes.Sorensen@redhat.com> <1286529360-5715-3-git-send-email-Jes.Sorensen@redhat.com> In-Reply-To: <1286529360-5715-3-git-send-email-Jes.Sorensen@redhat.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jes.Sorensen@redhat.com Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com Am 08.10.2010 11:15, schrieb Jes.Sorensen@redhat.com: > From: Jes Sorensen > > Signed-off-by: Jes Sorensen > --- > cutils.c | 34 ++++++++++++++++++++++++++-------- > 1 files changed, 26 insertions(+), 8 deletions(-) > > diff --git a/cutils.c b/cutils.c > index ee591c5..0782032 100644 > --- a/cutils.c > +++ b/cutils.c > @@ -291,34 +291,52 @@ int fcntl_setfl(int fd, int flag) > */ > ssize_t strtosz(const char *nptr, char **end) > { > - int64_t value; > + ssize_t retval = -1; > char *endptr; > + int mul_required = 0; > + double val, mul = 1; > + > + endptr = (char *)nptr + strspn(nptr, " 0123456789"); > + if (*endptr == '.') { > + mul_required = 1; > + } > + > + val = strtod(nptr,&endptr); > + > + if (val< 0) > + goto fail; > See CODING_STYLE. > > - value = strtoll(nptr,&endptr, 0); > switch (*endptr++) { > case 'K': > case 'k': > - value<<= 10; > + mul = 1<< 10; > break; > case 0: > + case ' ': > + if (mul_required) { > + goto fail; > + } > case 'M': > case 'm': > - value<<= 20; > + mul = 1ULL<< 20; > break; > case 'G': > case 'g': > - value<<= 30; > + mul = 1ULL<< 30; > break; > case 'T': > case 't': > - value<<= 40; > + mul = 1ULL<< 40; > break; > default: > - value = -1; > + goto fail; > } > > + retval = (ssize_t)(val * mul); > + > if (end) > *end = endptr; > > - return value; > +fail: > + return retval; > } >