• D
    qapi: qobject input visitor variant for use with keyval_parse() · cbd8acf3
    Daniel P. Berrange 提交于
    Currently the QObjectInputVisitor assumes that all scalar values are
    directly represented as the final types declared by the thing being
    visited. i.e. it assumes an 'int' is using QInt, and a 'bool' is using
    QBool, etc.  This is good when QObjectInputVisitor is fed a QObject
    that came from a JSON document on the QMP monitor, as it will strictly
    validate correctness.
    
    To allow QObjectInputVisitor to be reused for visiting a QObject
    originating from keyval_parse(), an alternative mode is needed where
    all the scalars types are represented as QString and converted on the
    fly to the final desired type.
    Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
    Message-Id: <1475246744-29302-8-git-send-email-berrange@redhat.com>
    
    Rebased, conflicts resolved, commit message updated to refer to
    keyval_parse().  autocast replaced by keyval in identifiers,
    noautocast replaced by fail in tests.
    
    Fix qobject_input_type_uint64_keyval() not to reject '-', for QemuOpts
    compatibility: replace parse_uint_full() by open-coded
    parse_option_number().  The next commit will add suitable tests.
    Leave out the fancy ERANGE error reporting for now, but add a TODO
    comment.  Add it qobject_input_type_int64_keyval() and
    qobject_input_type_number_keyval(), too.
    
    Open code parse_option_bool() and parse_option_size() so we have to
    call qobject_input_get_name() only when actually needed.  Again, leave
    out ERANGE error reporting for now.
    
    QAPI/QMP downstream extension prefixes __RFQDN_ don't work, because
    keyval_parse() splits them at '.'.  This will be addressed later in
    the series.
    
    qobject_input_type_int64_keyval(), qobject_input_type_uint64_keyval(),
    qobject_input_type_number_keyval() tweaked for style.
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: NKevin Wolf <kwolf@redhat.com>
    Message-Id: <1488317230-26248-5-git-send-email-armbru@redhat.com>
    cbd8acf3
qobject-input-visitor.c 18.6 KB