diff options
author | Max Reitz | 2018-05-09 23:00:20 +0200 |
---|---|---|
committer | Max Reitz | 2018-06-11 16:18:45 +0200 |
commit | 51641351420e4f9dc6613d0dd03a5f0f214ed5b6 (patch) | |
tree | e300a476be7be038e7eb55e7b731b00474d05cc0 /qemu-img.c | |
parent | qemu-option: Pull out "Supported options" print (diff) | |
download | qemu-51641351420e4f9dc6613d0dd03a5f0f214ed5b6.tar.gz qemu-51641351420e4f9dc6613d0dd03a5f0f214ed5b6.tar.xz qemu-51641351420e4f9dc6613d0dd03a5f0f214ed5b6.zip |
qemu-img: Add print_amend_option_help()
The more generic print_block_option_help() function is not really
suitable for qemu-img amend, for a couple of reasons:
(1) We do not need to append the protocol-level options, as amendment
happens only on one node and does not descend downwards to its
children.
(2) print_block_option_help() says those options are "supported". For
option amendment, we do not really know that. So this new function
explicitly says that those options are the creation options, and not
all of them may be supported.
(3) If the driver does not support option amendment, we should not print
anything (except for an error message that amendment is not
supported).
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1537956
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20180509210023.20283-5-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'qemu-img.c')
-rw-r--r-- | qemu-img.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/qemu-img.c b/qemu-img.c index 52008c5647..07935cb232 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -3658,6 +3658,32 @@ static void amend_status_cb(BlockDriverState *bs, qemu_progress_print(100.f * offset / total_work_size, 0); } +static int print_amend_option_help(const char *format) +{ + BlockDriver *drv; + + /* Find driver and parse its options */ + drv = bdrv_find_format(format); + if (!drv) { + error_report("Unknown file format '%s'", format); + return 1; + } + + if (!drv->bdrv_amend_options) { + error_report("Format driver '%s' does not support option amendment", + format); + return 1; + } + + /* Every driver supporting amendment must have create_opts */ + assert(drv->create_opts); + + printf("Creation options for '%s':\n", format); + qemu_opts_print_help(drv->create_opts); + printf("\nNote that not all of these options may be amendable.\n"); + return 0; +} + static int img_amend(int argc, char **argv) { Error *err = NULL; @@ -3757,7 +3783,7 @@ static int img_amend(int argc, char **argv) if (fmt && has_help_option(options)) { /* If a format is explicitly specified (and possibly no filename is * given), print option help here */ - ret = print_block_option_help(filename, fmt); + ret = print_amend_option_help(fmt); goto out; } @@ -3786,7 +3812,7 @@ static int img_amend(int argc, char **argv) if (has_help_option(options)) { /* If the format was auto-detected, print option help here */ - ret = print_block_option_help(filename, fmt); + ret = print_amend_option_help(fmt); goto out; } |