qemu-img: Factor out accumulate_options() helper

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20200415074927.19897-8-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2020-04-15 09:49:25 +02:00
parent 56a9efa199
commit 6d2b5cbafb

View File

@ -223,6 +223,25 @@ static bool qemu_img_object_print_help(const char *type, QemuOpts *opts)
return true; return true;
} }
static int accumulate_options(char **options, char *optarg)
{
char *new_options;
if (!is_valid_option_list(optarg)) {
error_report("Invalid option list: %s", optarg);
return -1;
}
if (!*options) {
*options = g_strdup(optarg);
} else {
new_options = g_strdup_printf("%s,%s", *options, optarg);
g_free(*options);
*options = new_options;
}
return 0;
}
static QemuOptsList qemu_source_opts = { static QemuOptsList qemu_source_opts = {
.name = "source", .name = "source",
.implied_opt_name = "file", .implied_opt_name = "file",
@ -482,17 +501,9 @@ static int img_create(int argc, char **argv)
fmt = optarg; fmt = optarg;
break; break;
case 'o': case 'o':
if (!is_valid_option_list(optarg)) { if (accumulate_options(&options, optarg) < 0) {
error_report("Invalid option list: %s", optarg);
goto fail; goto fail;
} }
if (!options) {
options = g_strdup(optarg);
} else {
char *old_options = options;
options = g_strdup_printf("%s,%s", options, optarg);
g_free(old_options);
}
break; break;
case 'q': case 'q':
quiet = true; quiet = true;
@ -2127,17 +2138,9 @@ static int img_convert(int argc, char **argv)
s.compressed = true; s.compressed = true;
break; break;
case 'o': case 'o':
if (!is_valid_option_list(optarg)) { if (accumulate_options(&options, optarg) < 0) {
error_report("Invalid option list: %s", optarg);
goto fail_getopt; goto fail_getopt;
} }
if (!options) {
options = g_strdup(optarg);
} else {
char *old_options = options;
options = g_strdup_printf("%s,%s", options, optarg);
g_free(old_options);
}
break; break;
case 'l': case 'l':
if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) { if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {
@ -3953,18 +3956,10 @@ static int img_amend(int argc, char **argv)
help(); help();
break; break;
case 'o': case 'o':
if (!is_valid_option_list(optarg)) { if (accumulate_options(&options, optarg) < 0) {
error_report("Invalid option list: %s", optarg);
ret = -1; ret = -1;
goto out_no_progress; goto out_no_progress;
} }
if (!options) {
options = g_strdup(optarg);
} else {
char *old_options = options;
options = g_strdup_printf("%s,%s", options, optarg);
g_free(old_options);
}
break; break;
case 'f': case 'f':
fmt = optarg; fmt = optarg;
@ -4855,17 +4850,9 @@ static int img_measure(int argc, char **argv)
out_fmt = optarg; out_fmt = optarg;
break; break;
case 'o': case 'o':
if (!is_valid_option_list(optarg)) { if (accumulate_options(&options, optarg) < 0) {
error_report("Invalid option list: %s", optarg);
goto out; goto out;
} }
if (!options) {
options = g_strdup(optarg);
} else {
char *old_options = options;
options = g_strdup_printf("%s,%s", options, optarg);
g_free(old_options);
}
break; break;
case 'l': case 'l':
if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) { if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {