Commit fc471c18 authored by Eric Blake's avatar Eric Blake Committed by Markus Armbruster
Browse files

qapi: Consolidate QMP input visitor creation



Rather than having two separate ways to create a QMP input
visitor, where the safer approach has the more verbose name,
it is better to consolidate things into a single function
where the caller must explicitly choose whether to be strict
or to ignore excess input.  This patch is the strictly
mechanical conversion; the next patch will then audit which
uses can be made stricter.

Signed-off-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1461879932-9020-6-git-send-email-eblake@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent b471d012
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -996,7 +996,7 @@ Example:
    {
        Error *err = NULL;
        UserDefOne *retval;
        QmpInputVisitor *qiv = qmp_input_visitor_new_strict(QOBJECT(args));
        QmpInputVisitor *qiv = qmp_input_visitor_new(QOBJECT(args), true);
        QapiDeallocVisitor *qdv;
        Visitor *v;
        UserDefOneList *arg1 = NULL;
+7 −2
Original line number Diff line number Diff line
@@ -19,8 +19,13 @@

typedef struct QmpInputVisitor QmpInputVisitor;

QmpInputVisitor *qmp_input_visitor_new(QObject *obj);
QmpInputVisitor *qmp_input_visitor_new_strict(QObject *obj);
/*
 * Return a new input visitor that converts QMP to QAPI.
 *
 * Set @strict to reject a parse that doesn't consume all keys of a
 * dictionary; otherwise excess input is ignored.
 */
QmpInputVisitor *qmp_input_visitor_new(QObject *obj, bool strict);

void qmp_input_visitor_cleanup(QmpInputVisitor *v);

+2 −11
Original line number Diff line number Diff line
@@ -356,7 +356,7 @@ void qmp_input_visitor_cleanup(QmpInputVisitor *v)
    g_free(v);
}

QmpInputVisitor *qmp_input_visitor_new(QObject *obj)
QmpInputVisitor *qmp_input_visitor_new(QObject *obj, bool strict)
{
    QmpInputVisitor *v;

@@ -376,19 +376,10 @@ QmpInputVisitor *qmp_input_visitor_new(QObject *obj)
    v->visitor.type_number = qmp_input_type_number;
    v->visitor.type_any = qmp_input_type_any;
    v->visitor.optional = qmp_input_optional;
    v->strict = strict;

    qmp_input_push(v, obj, NULL);
    qobject_incref(obj);

    return v;
}

QmpInputVisitor *qmp_input_visitor_new_strict(QObject *obj)
{
    QmpInputVisitor *v;

    v = qmp_input_visitor_new(obj);
    v->strict = true;

    return v;
}
+1 −1
Original line number Diff line number Diff line
@@ -663,7 +663,7 @@ void qmp_object_add(const char *type, const char *id,
        }
    }

    qiv = qmp_input_visitor_new(props);
    qiv = qmp_input_visitor_new(props, false);
    obj = user_creatable_add_type(type, id, pdict,
                                  qmp_input_get_visitor(qiv), errp);
    qmp_input_visitor_cleanup(qiv);
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ void object_property_set_qobject(Object *obj, QObject *value,
                                 const char *name, Error **errp)
{
    QmpInputVisitor *qiv;
    qiv = qmp_input_visitor_new(value);
    qiv = qmp_input_visitor_new(value, false);
    object_property_set(obj, qmp_input_get_visitor(qiv), name, errp);

    qmp_input_visitor_cleanup(qiv);
Loading