Skip to content
  • Eduardo Habkost's avatar
    cutils: unsigned int parsing functions · e3f9fe2d
    Eduardo Habkost authored
    
    
    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 -EINVAL)
     - 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: default avatarEduardo Habkost <ehabkost@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Reviewed-by: default avatarLaszlo Ersek <lersek@redhat.com>
    Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
    e3f9fe2d