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;
}
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 = {
.name = "source",
.implied_opt_name = "file",
@ -482,17 +501,9 @@ static int img_create(int argc, char **argv)
fmt = optarg;
break;
case 'o':
if (!is_valid_option_list(optarg)) {
error_report("Invalid option list: %s", optarg);
if (accumulate_options(&options, optarg) < 0) {
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;
case 'q':
quiet = true;
@ -2127,17 +2138,9 @@ static int img_convert(int argc, char **argv)
s.compressed = true;
break;
case 'o':
if (!is_valid_option_list(optarg)) {
error_report("Invalid option list: %s", optarg);
if (accumulate_options(&options, optarg) < 0) {
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;
case 'l':
if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {
@ -3953,18 +3956,10 @@ static int img_amend(int argc, char **argv)
help();
break;
case 'o':
if (!is_valid_option_list(optarg)) {
error_report("Invalid option list: %s", optarg);
if (accumulate_options(&options, optarg) < 0) {
ret = -1;
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;
case 'f':
fmt = optarg;
@ -4855,17 +4850,9 @@ static int img_measure(int argc, char **argv)
out_fmt = optarg;
break;
case 'o':
if (!is_valid_option_list(optarg)) {
error_report("Invalid option list: %s", optarg);
if (accumulate_options(&options, optarg) < 0) {
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;
case 'l':
if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {