Revision e8316d7e
b/qapi/qmp-input-visitor.c | ||
---|---|---|
41 | 41 |
} |
42 | 42 |
|
43 | 43 |
static QObject *qmp_input_get_object(QmpInputVisitor *qiv, |
44 |
const char *name) |
|
44 |
const char *name, |
|
45 |
bool consume) |
|
45 | 46 |
{ |
46 | 47 |
QObject *qobj = qiv->stack[qiv->nb_stack - 1].obj; |
47 | 48 |
|
48 | 49 |
if (qobj) { |
49 | 50 |
if (name && qobject_type(qobj) == QTYPE_QDICT) { |
50 |
if (qiv->stack[qiv->nb_stack - 1].h) { |
|
51 |
if (qiv->stack[qiv->nb_stack - 1].h && consume) {
|
|
51 | 52 |
g_hash_table_remove(qiv->stack[qiv->nb_stack - 1].h, name); |
52 | 53 |
} |
53 | 54 |
return qdict_get(qobject_to_qdict(qobj), name); |
... | ... | |
117 | 118 |
const char *name, size_t size, Error **errp) |
118 | 119 |
{ |
119 | 120 |
QmpInputVisitor *qiv = to_qiv(v); |
120 |
QObject *qobj = qmp_input_get_object(qiv, name); |
|
121 |
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
|
121 | 122 |
Error *err = NULL; |
122 | 123 |
|
123 | 124 |
if (!qobj || qobject_type(qobj) != QTYPE_QDICT) { |
... | ... | |
159 | 160 |
static void qmp_input_start_list(Visitor *v, const char *name, Error **errp) |
160 | 161 |
{ |
161 | 162 |
QmpInputVisitor *qiv = to_qiv(v); |
162 |
QObject *qobj = qmp_input_get_object(qiv, name); |
|
163 |
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
|
163 | 164 |
|
164 | 165 |
if (!qobj || qobject_type(qobj) != QTYPE_QLIST) { |
165 | 166 |
error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", |
... | ... | |
211 | 212 |
Error **errp) |
212 | 213 |
{ |
213 | 214 |
QmpInputVisitor *qiv = to_qiv(v); |
214 |
QObject *qobj = qmp_input_get_object(qiv, name); |
|
215 |
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
|
215 | 216 |
|
216 | 217 |
if (!qobj || qobject_type(qobj) != QTYPE_QINT) { |
217 | 218 |
error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", |
... | ... | |
226 | 227 |
Error **errp) |
227 | 228 |
{ |
228 | 229 |
QmpInputVisitor *qiv = to_qiv(v); |
229 |
QObject *qobj = qmp_input_get_object(qiv, name); |
|
230 |
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
|
230 | 231 |
|
231 | 232 |
if (!qobj || qobject_type(qobj) != QTYPE_QBOOL) { |
232 | 233 |
error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", |
... | ... | |
241 | 242 |
Error **errp) |
242 | 243 |
{ |
243 | 244 |
QmpInputVisitor *qiv = to_qiv(v); |
244 |
QObject *qobj = qmp_input_get_object(qiv, name); |
|
245 |
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
|
245 | 246 |
|
246 | 247 |
if (!qobj || qobject_type(qobj) != QTYPE_QSTRING) { |
247 | 248 |
error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", |
... | ... | |
256 | 257 |
Error **errp) |
257 | 258 |
{ |
258 | 259 |
QmpInputVisitor *qiv = to_qiv(v); |
259 |
QObject *qobj = qmp_input_get_object(qiv, name); |
|
260 |
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
|
260 | 261 |
|
261 | 262 |
if (!qobj || (qobject_type(qobj) != QTYPE_QFLOAT && |
262 | 263 |
qobject_type(qobj) != QTYPE_QINT)) { |
... | ... | |
276 | 277 |
const char *name, Error **errp) |
277 | 278 |
{ |
278 | 279 |
QmpInputVisitor *qiv = to_qiv(v); |
279 |
QObject *qobj = qmp_input_get_object(qiv, name); |
|
280 |
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
|
280 | 281 |
|
281 | 282 |
if (!qobj) { |
282 | 283 |
*present = false; |
Also available in: Unified diff