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