qapi: Drop unused non-strict qobject input visitor

The split between tests/test-qobject-input-visitor.c and
tests/test-qobject-input-strict.c now makes less sense than ever.  The
next commit will take care of that.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <1488544368-30622-20-git-send-email-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2017-03-03 13:32:39 +01:00
parent ec95f6148c
commit 048abb7b20
16 changed files with 25 additions and 36 deletions

View File

@ -278,7 +278,7 @@ static SocketAddress *nbd_config(BDRVNBDState *s, QDict *options, Error **errp)
goto done; goto done;
} }
iv = qobject_input_visitor_new(crumpled_addr, true); iv = qobject_input_visitor_new(crumpled_addr);
visit_type_SocketAddress(iv, NULL, &saddr, &local_err); visit_type_SocketAddress(iv, NULL, &saddr, &local_err);
if (local_err) { if (local_err) {
error_propagate(errp, local_err); error_propagate(errp, local_err);

View File

@ -474,7 +474,7 @@ static NFSServer *nfs_config(QDict *options, Error **errp)
goto out; goto out;
} }
iv = qobject_input_visitor_new(crumpled_addr, true); iv = qobject_input_visitor_new(crumpled_addr);
visit_type_NFSServer(iv, NULL, &server, &local_error); visit_type_NFSServer(iv, NULL, &server, &local_error);
if (local_error) { if (local_error) {
error_propagate(errp, local_error); error_propagate(errp, local_error);

View File

@ -601,7 +601,7 @@ static InetSocketAddress *ssh_config(QDict *options, Error **errp)
goto out; goto out;
} }
iv = qobject_input_visitor_new(crumpled_addr, true); iv = qobject_input_visitor_new(crumpled_addr);
visit_type_InetSocketAddress(iv, NULL, &inet, &local_error); visit_type_InetSocketAddress(iv, NULL, &inet, &local_error);
if (local_error) { if (local_error) {
error_propagate(errp, local_error); error_propagate(errp, local_error);

View File

@ -1138,7 +1138,7 @@ Example:
Visitor *v; Visitor *v;
UserDefOneList *arg1 = NULL; UserDefOneList *arg1 = NULL;
v = qobject_input_visitor_new(QOBJECT(args), true); v = qobject_input_visitor_new(QOBJECT(args));
visit_start_struct(v, NULL, NULL, 0, &err); visit_start_struct(v, NULL, NULL, 0, &err);
if (err) { if (err) {
goto out; goto out;

View File

@ -21,10 +21,7 @@ typedef struct QObjectInputVisitor QObjectInputVisitor;
/* /*
* Return a new input visitor that converts a QObject to a QAPI object. * Return a new input visitor that converts a QObject to a QAPI object.
*
* Set @strict to reject a parse that doesn't consume all keys of a
* dictionary; otherwise excess input is ignored.
*/ */
Visitor *qobject_input_visitor_new(QObject *obj, bool strict); Visitor *qobject_input_visitor_new(QObject *obj);
#endif #endif

View File

@ -43,9 +43,6 @@ struct QObjectInputVisitor {
* QDict or QList). */ * QDict or QList). */
QSLIST_HEAD(, StackObject) stack; QSLIST_HEAD(, StackObject) stack;
/* True to reject parse in visit_end_struct() if unvisited keys remain. */
bool strict;
GString *errname; /* Accumulator for full_name() */ GString *errname; /* Accumulator for full_name() */
}; };
@ -157,11 +154,12 @@ static const QListEntry *qobject_input_push(QObjectInputVisitor *qiv,
tos->obj = obj; tos->obj = obj;
tos->qapi = qapi; tos->qapi = qapi;
if (qiv->strict && qobject_type(obj) == QTYPE_QDICT) { if (qobject_type(obj) == QTYPE_QDICT) {
h = g_hash_table_new(g_str_hash, g_str_equal); h = g_hash_table_new(g_str_hash, g_str_equal);
qdict_iter(qobject_to_qdict(obj), qdict_add_key, h); qdict_iter(qobject_to_qdict(obj), qdict_add_key, h);
tos->h = h; tos->h = h;
} else if (qobject_type(obj) == QTYPE_QLIST) { } else {
assert(qobject_type(obj) == QTYPE_QLIST);
tos->entry = qlist_first(qobject_to_qlist(obj)); tos->entry = qlist_first(qobject_to_qlist(obj));
tos->index = -1; tos->index = -1;
} }
@ -175,21 +173,16 @@ static void qobject_input_check_struct(Visitor *v, Error **errp)
{ {
QObjectInputVisitor *qiv = to_qiv(v); QObjectInputVisitor *qiv = to_qiv(v);
StackObject *tos = QSLIST_FIRST(&qiv->stack); StackObject *tos = QSLIST_FIRST(&qiv->stack);
assert(tos && !tos->entry);
if (qiv->strict) {
GHashTable *const top_ht = tos->h;
if (top_ht) {
GHashTableIter iter; GHashTableIter iter;
const char *key; const char *key;
g_hash_table_iter_init(&iter, top_ht); assert(tos && !tos->entry);
g_hash_table_iter_init(&iter, tos->h);
if (g_hash_table_iter_next(&iter, (void **)&key, NULL)) { if (g_hash_table_iter_next(&iter, (void **)&key, NULL)) {
error_setg(errp, "Parameter '%s' is unexpected", error_setg(errp, "Parameter '%s' is unexpected",
full_name(qiv, key)); full_name(qiv, key));
} }
}
}
} }
static void qobject_input_stack_object_free(StackObject *tos) static void qobject_input_stack_object_free(StackObject *tos)
@ -465,7 +458,7 @@ static void qobject_input_free(Visitor *v)
g_free(qiv); g_free(qiv);
} }
Visitor *qobject_input_visitor_new(QObject *obj, bool strict) Visitor *qobject_input_visitor_new(QObject *obj)
{ {
QObjectInputVisitor *v; QObjectInputVisitor *v;
@ -489,7 +482,6 @@ Visitor *qobject_input_visitor_new(QObject *obj, bool strict)
v->visitor.type_null = qobject_input_type_null; v->visitor.type_null = qobject_input_type_null;
v->visitor.optional = qobject_input_optional; v->visitor.optional = qobject_input_optional;
v->visitor.free = qobject_input_free; v->visitor.free = qobject_input_free;
v->strict = strict;
v->root = obj; v->root = obj;
qobject_incref(obj); qobject_incref(obj);

2
qmp.c
View File

@ -675,7 +675,7 @@ void qmp_object_add(const char *type, const char *id,
pdict = qdict_new(); pdict = qdict_new();
} }
v = qobject_input_visitor_new(QOBJECT(pdict), true); v = qobject_input_visitor_new(QOBJECT(pdict));
obj = user_creatable_add_type(type, id, pdict, v, errp); obj = user_creatable_add_type(type, id, pdict, v, errp);
visit_free(v); visit_free(v);
if (obj) { if (obj) {

View File

@ -23,7 +23,7 @@ void object_property_set_qobject(Object *obj, QObject *value,
{ {
Visitor *v; Visitor *v;
v = qobject_input_visitor_new(value, true); v = qobject_input_visitor_new(value);
object_property_set(obj, v, name, errp); object_property_set(obj, v, name, errp);
visit_free(v); visit_free(v);
} }

View File

@ -130,7 +130,7 @@ def gen_marshal(name, arg_type, boxed, ret_type):
push_indent() push_indent()
ret += mcgen(''' ret += mcgen('''
v = qobject_input_visitor_new(QOBJECT(args), true); v = qobject_input_visitor_new(QOBJECT(args));
visit_start_struct(v, NULL, NULL, 0, &err); visit_start_struct(v, NULL, NULL, 0, &err);
if (err) { if (err) {
goto out; goto out;

View File

@ -346,7 +346,7 @@ static void cpu_model_from_info(S390CPUModel *model, const CpuModelInfo *info,
} }
if (qdict) { if (qdict) {
visitor = qobject_input_visitor_new(info->props, true); visitor = qobject_input_visitor_new(info->props);
visit_start_struct(visitor, NULL, NULL, 0, errp); visit_start_struct(visitor, NULL, NULL, 0, errp);
if (*errp) { if (*errp) {
object_unref(obj); object_unref(obj);

View File

@ -47,7 +47,7 @@ static void qnull_visit_test(void)
g_assert(qnull_.refcnt == 1); g_assert(qnull_.refcnt == 1);
obj = qnull(); obj = qnull();
v = qobject_input_visitor_new(obj, true); v = qobject_input_visitor_new(obj);
qobject_decref(obj); qobject_decref(obj);
visit_type_null(v, NULL, &error_abort); visit_type_null(v, NULL, &error_abort);
visit_free(v); visit_free(v);

View File

@ -34,7 +34,7 @@ static void test_version(QObject *version)
VersionInfo *vinfo; VersionInfo *vinfo;
g_assert(version); g_assert(version);
v = qobject_input_visitor_new(version, true); v = qobject_input_visitor_new(version);
visit_type_VersionInfo(v, "version", &vinfo, &error_abort); visit_type_VersionInfo(v, "version", &vinfo, &error_abort);
qapi_free_VersionInfo(vinfo); qapi_free_VersionInfo(vinfo);
visit_free(v); visit_free(v);

View File

@ -246,7 +246,7 @@ static void test_dealloc_partial(void)
ud2_dict = qdict_new(); ud2_dict = qdict_new();
qdict_put_obj(ud2_dict, "string0", QOBJECT(qstring_from_str(text))); qdict_put_obj(ud2_dict, "string0", QOBJECT(qstring_from_str(text)));
v = qobject_input_visitor_new(QOBJECT(ud2_dict), true); v = qobject_input_visitor_new(QOBJECT(ud2_dict));
visit_type_UserDefTwo(v, NULL, &ud2, &err); visit_type_UserDefTwo(v, NULL, &ud2, &err);
visit_free(v); visit_free(v);
QDECREF(ud2_dict); QDECREF(ud2_dict);

View File

@ -53,7 +53,7 @@ static Visitor *validate_test_init_internal(TestInputVisitorData *data,
data->obj = qobject_from_jsonv(json_string, ap); data->obj = qobject_from_jsonv(json_string, ap);
g_assert(data->obj); g_assert(data->obj);
data->qiv = qobject_input_visitor_new(data->obj, true); data->qiv = qobject_input_visitor_new(data->obj);
g_assert(data->qiv); g_assert(data->qiv);
return data->qiv; return data->qiv;
} }

View File

@ -49,7 +49,7 @@ static Visitor *visitor_input_test_init_internal(TestInputVisitorData *data,
data->obj = qobject_from_jsonv(json_string, ap); data->obj = qobject_from_jsonv(json_string, ap);
g_assert(data->obj); g_assert(data->obj);
data->qiv = qobject_input_visitor_new(data->obj, true); data->qiv = qobject_input_visitor_new(data->obj);
g_assert(data->qiv); g_assert(data->qiv);
return data->qiv; return data->qiv;
} }

View File

@ -1040,7 +1040,7 @@ static void qmp_deserialize(void **native_out, void *datap,
obj = qobject_from_json(qstring_get_str(output_json)); obj = qobject_from_json(qstring_get_str(output_json));
QDECREF(output_json); QDECREF(output_json);
d->qiv = qobject_input_visitor_new(obj, true); d->qiv = qobject_input_visitor_new(obj);
qobject_decref(obj_orig); qobject_decref(obj_orig);
qobject_decref(obj); qobject_decref(obj);
visit(d->qiv, native_out, errp); visit(d->qiv, native_out, errp);