Revision cf62adfa

b/qemu-option.c
169 169
    return NULL;
170 170
}
171 171

  
172
static int parse_option_bool(const char *name, const char *value, bool *ret)
172
static void parse_option_bool(const char *name, const char *value, bool *ret,
173
                              Error **errp)
173 174
{
174 175
    if (value != NULL) {
175 176
        if (!strcmp(value, "on")) {
......
177 178
        } else if (!strcmp(value, "off")) {
178 179
            *ret = 0;
179 180
        } else {
180
            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
181
            return -1;
181
            error_set(errp,QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
182 182
        }
183 183
    } else {
184 184
        *ret = 1;
185 185
    }
186
    return 0;
187 186
}
188 187

  
189 188
static void parse_option_number(const char *name, const char *value,
......
263 262
    const char *value)
264 263
{
265 264
    bool flag;
265
    Error *local_err = NULL;
266 266

  
267 267
    // Find a matching parameter
268 268
    list = get_option_parameter(list, name);
......
274 274
    // Process parameter
275 275
    switch (list->type) {
276 276
    case OPT_FLAG:
277
        if (parse_option_bool(name, value, &flag) == -1)
278
            return -1;
279
        list->value.n = flag;
277
        parse_option_bool(name, value, &flag, &local_err);
278
        if (!error_is_set(&local_err)) {
279
            list->value.n = flag;
280
        }
280 281
        break;
281 282

  
282 283
    case OPT_STRING:
......
298 299
        return -1;
299 300
    }
300 301

  
302
    if (error_is_set(&local_err)) {
303
        qerror_report_err(local_err);
304
        error_free(local_err);
305
        return -1;
306
    }
307

  
301 308
    return 0;
302 309
}
303 310

  
......
588 595
        /* nothing */
589 596
        return 0;
590 597
    case QEMU_OPT_BOOL:
591
        return parse_option_bool(opt->name, opt->str, &opt->value.boolean);
598
        parse_option_bool(opt->name, opt->str, &opt->value.boolean, &local_err);
599
        break;
592 600
    case QEMU_OPT_NUMBER:
593 601
        parse_option_number(opt->name, opt->str, &opt->value.uint,
594 602
                            &local_err);

Also available in: Unified diff