if (qemuio_bs) {
fprintf(stderr, "file open already, try 'help close'\n");
+ QDECREF(opts);
return 1;
}
if (bdrv_open(&qemuio_bs, name, NULL, opts, flags | BDRV_O_PROTOCOL,
NULL, &local_err))
{
- fprintf(stderr, "%s: can't open device %s: %s\n", progname, name,
+ fprintf(stderr, "%s: can't open%s%s: %s\n", progname,
+ name ? " device " : "", name ?: "",
error_get_pretty(local_err));
error_free(local_err);
return 1;
if (bdrv_open(&qemuio_bs, name, NULL, opts, flags, NULL, &local_err)
< 0)
{
- fprintf(stderr, "%s: can't open device %s: %s\n", progname, name,
+ fprintf(stderr, "%s: can't open%s%s: %s\n", progname,
+ name ? " device " : "", name ?: "",
error_get_pretty(local_err));
error_free(local_err);
bdrv_unref(qemuio_bs);
static QemuOptsList empty_opts = {
.name = "drive",
+ .merge_lists = true,
.head = QTAILQ_HEAD_INITIALIZER(empty_opts.head),
.desc = {
/* no elements => accept any params */
int growable = 0;
int c;
QemuOpts *qopts;
- QDict *opts = NULL;
+ QDict *opts;
while ((c = getopt(argc, argv, "snrgo:")) != EOF) {
switch (c) {
growable = 1;
break;
case 'o':
- qopts = qemu_opts_parse(&empty_opts, optarg, 0);
- if (qopts == NULL) {
+ if (!qemu_opts_parse(&empty_opts, optarg, 0)) {
printf("could not parse option list -- %s\n", optarg);
+ qemu_opts_reset(&empty_opts);
return 0;
}
- opts = qemu_opts_to_qdict(qopts, opts);
- qemu_opts_del(qopts);
break;
default:
+ qemu_opts_reset(&empty_opts);
return qemuio_command_usage(&open_cmd);
}
}
flags |= BDRV_O_RDWR;
}
+ qopts = qemu_opts_find(&empty_opts, NULL);
+ opts = qopts ? qemu_opts_to_qdict(qopts, NULL) : NULL;
+ qemu_opts_reset(&empty_opts);
+
if (optind == argc - 1) {
return openfile(argv[optind], flags, growable, opts);
} else if (optind == argc) {
return openfile(NULL, flags, growable, opts);
} else {
+ QDECREF(opts);
return qemuio_command_usage(&open_cmd);
}
}
}
break;
case 'T':
- if (!trace_backend_init(optarg, NULL)) {
+ if (!trace_init_backends(optarg, NULL)) {
exit(1); /* error message will have been printed */
}
break;