On Thu, Jan 17, 2013 at 05:06:50PM -0200, 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)
Oops, I forgot to update the commit message. I hope the commiter can change it before committing, to avoid having to resubmit it again. > - 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 <ehabk...@redhat.com> > --- > Changes v2: > - Trivial whitespace change > - Add 'base' parameter to the functions > > Changes v4: > - Return -EINVAL in case a minus sign is found > - Make endptr point to beginning of string in case -EINVAL > is returned (like the strtoull() behavior) [...] -- Eduardo