From: Eric Blake <eblake@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: Laszlo Ersek <lersek@redhat.com>,
Chegu Vinod <chegu_vinod@hp.com>,
qemu-devel@nongnu.org, Anthony Liguori <anthony@codemonkey.ws>
Subject: Re: [Qemu-devel] [PATCH 1/8] cutils: unsigned int parsing functions
Date: Wed, 16 Jan 2013 10:10:42 -0700 [thread overview]
Message-ID: <50F6DF12.8030703@redhat.com> (raw)
In-Reply-To: <1358349851-20960-2-git-send-email-ehabkost@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2696 bytes --]
On 01/16/2013 08:24 AM, Eduardo Habkost wrote:
> There are lots of duplicate parsing code using strto*() in QEMU, and
> most of that code is broken in one way or another. Even the visitors
> code have duplicate integer parsing code[1]. This introduces functions
> to help parsing unsigned int values: parse_uint() and parse_uint_full().
>
> Parsing functions for signed ints and floats will be submitted later.
>
> parse_uint_full() has all the checks made by opts_type_uint64() at
> opts-visitor.c:
>
> - Check for NULL (returns -EINVAL)
> - Check for negative numbers (returns -ERANGE)
> - Check for empty string (returns -EINVAL)
> - Check for overflow or other errno values set by strtoll() (returns
> -errno)
> - Check for end of string (reject invalid characters after number)
> (returns -EINVAL)
>
> parse_uint() does everything above except checking for the end of the
> string, so callers can continue parsing the remainder of string after
> the number.
>
> Unit tests included.
>
> [1] string-input-visitor.c:parse_int() could use the same parsing code
> used by opts-visitor.c:opts_type_int(), instead of duplicating that
> logic.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Eric Blake <eblake@redhat.com>
> ---
> +++ b/tests/test-cutils.c
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
Interesting that you chose a BSD license instead of GPL, but doesn't
affect my review.
Your test case lacks test of octal or hexadecimal input strings; is that
worth adding?
> +++ b/util/cutils.c
> @@ -270,6 +270,82 @@ int64_t strtosz(const char *nptr, char **end)
> return strtosz_suffix(nptr, end, STRTOSZ_DEFSUFFIX_MB);
> }
>
> +/* Try to parse an unsigned integer
> + *
> + * Error checks done by the function:
> + * - NULL pointer will return -EINVAL.
> + * - Empty strings will return -EINVAL.
> + * - Overflow errors or other errno values set by strtoull() will
> + * return -errno (-ERANGE in case of overflow).
> + * - Differently from strtoull(), values starting with a minus sign are
> + * rejected (returning -ERANGE).
Interesting that you chose to reject negative numbers, even though
strtoull() is required to accept them. But you documented it and tested
for it, so I can live with it.
> + errno = 0;
> + val = strtoull(s, &endp, 0);
> + if (errno) {
> + r = -errno;
Why two spaces?
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]
next prev parent reply other threads:[~2013-01-16 17:10 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-16 15:24 [Qemu-devel] [PATCH 0/8] -numa option parsing fixes (v2) Eduardo Habkost
2013-01-16 15:24 ` [Qemu-devel] [PATCH 1/8] cutils: unsigned int parsing functions Eduardo Habkost
2013-01-16 17:10 ` Eric Blake [this message]
2013-01-16 17:33 ` Eduardo Habkost
2013-01-16 17:50 ` Eric Blake
2013-01-16 17:56 ` Eduardo Habkost
2013-01-16 15:24 ` [Qemu-devel] [PATCH 2/8] vl.c: Fix off-by-one bug when handling "-numa node" argument Eduardo Habkost
2013-01-16 18:00 ` Eric Blake
2013-01-16 15:24 ` [Qemu-devel] [PATCH 3/8] vl.c: Abort on unknown -numa option type Eduardo Habkost
2013-01-16 15:24 ` [Qemu-devel] [PATCH 4/8] vl.c: Check for NUMA node limit inside numa_add() Eduardo Habkost
2013-01-16 17:56 ` Eric Blake
2013-01-16 15:24 ` [Qemu-devel] [PATCH 5/8] vl.c: numa_add(): Validate nodeid before using it Eduardo Habkost
2013-01-16 17:23 ` Eric Blake
2013-01-16 15:24 ` [Qemu-devel] [PATCH 6/8] vl.c: Use parse_uint_full() for NUMA nodeid Eduardo Habkost
2013-01-16 17:25 ` Eric Blake
2013-01-16 17:42 ` Eduardo Habkost
2013-01-16 17:54 ` Eric Blake
2013-01-16 18:18 ` Eduardo Habkost
2013-01-16 15:24 ` [Qemu-devel] [PATCH 7/8] vl.c: Extract -numa "cpus" parsing to separate function Eduardo Habkost
2013-01-16 18:23 ` Eric Blake
2013-01-16 15:24 ` [Qemu-devel] [PATCH 8/8] vl.c: validate -numa "cpus" parameter properly Eduardo Habkost
2013-01-16 17:30 ` Eric Blake
2013-01-16 17:50 ` Eduardo Habkost
-- strict thread matches above, loose matches on Subject: below --
2013-01-16 18:28 [Qemu-devel] [PATCH 0/8] -numa option parsing fixes (v3) Eduardo Habkost
2013-01-16 18:28 ` [Qemu-devel] [PATCH 1/8] cutils: unsigned int parsing functions Eduardo Habkost
2013-01-17 18:29 ` Laszlo Ersek
2013-01-17 18:50 ` Eduardo Habkost
2013-01-18 10:01 ` Markus Armbruster
2013-01-18 13:26 ` Eduardo Habkost
2013-01-18 13:32 ` Andreas Färber
2013-01-18 18:06 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50F6DF12.8030703@redhat.com \
--to=eblake@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=chegu_vinod@hp.com \
--cc=ehabkost@redhat.com \
--cc=lersek@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.