From: Kevin Wolf <kwolf@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>
Subject: [Qemu-devel] [PATCH 1/2] qemu-img: Print available options with -o ?
Date: Thu, 4 Jun 2009 15:39:38 +0200 [thread overview]
Message-ID: <1244122779-32728-2-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1244122779-32728-1-git-send-email-kwolf@redhat.com>
This patch adds a small help text to each of the options in the block drivers
which can be displayed by using qemu-img create -f fmt -o ?
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/cow.c | 12 ++++++++++--
block/qcow.c | 18 +++++++++++++++---
block/qcow2.c | 30 +++++++++++++++++++++++++-----
block/raw-posix.c | 6 +++++-
block/raw-win32.c | 6 +++++-
block/vmdk.c | 18 +++++++++++++++---
block/vpc.c | 6 +++++-
qemu-img.c | 18 +++++++++++++++---
qemu-option.c | 13 +++++++++++++
qemu-option.h | 2 ++
10 files changed, 110 insertions(+), 19 deletions(-)
diff --git a/block/cow.c b/block/cow.c
index 41d292a..84818f1 100644
--- a/block/cow.c
+++ b/block/cow.c
@@ -262,8 +262,16 @@ static void cow_flush(BlockDriverState *bs)
}
static QEMUOptionParameter cow_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
{ NULL }
};
diff --git a/block/qcow.c b/block/qcow.c
index 329b364..55a68a6 100644
--- a/block/qcow.c
+++ b/block/qcow.c
@@ -909,9 +909,21 @@ static int qcow_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
static QEMUOptionParameter qcow_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
- { BLOCK_OPT_ENCRYPT, OPT_FLAG },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
+ {
+ .name = BLOCK_OPT_ENCRYPT,
+ .type = OPT_FLAG,
+ .help = "Encrypt the image"
+ },
{ NULL }
};
diff --git a/block/qcow2.c b/block/qcow2.c
index d1611d1..c2be42e 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2981,11 +2981,31 @@ static int qcow_get_buffer(BlockDriverState *bs, uint8_t *buf,
}
static QEMUOptionParameter qcow_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
- { BLOCK_OPT_BACKING_FMT, OPT_STRING },
- { BLOCK_OPT_ENCRYPT, OPT_FLAG },
- { BLOCK_OPT_CLUSTER_SIZE, OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FMT,
+ .type = OPT_STRING,
+ .help = "Image format of the base image"
+ },
+ {
+ .name = BLOCK_OPT_ENCRYPT,
+ .type = OPT_FLAG,
+ .help = "Encrypt the image"
+ },
+ {
+ .name = BLOCK_OPT_CLUSTER_SIZE,
+ .type = OPT_SIZE,
+ .help = "qcow2 cluster size"
+ },
{ NULL }
};
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 38c4aa7..4798d62 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -858,7 +858,11 @@ static void raw_flush(BlockDriverState *bs)
static QEMUOptionParameter raw_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
{ NULL }
};
diff --git a/block/raw-win32.c b/block/raw-win32.c
index 6e5c09b..1e95153 100644
--- a/block/raw-win32.c
+++ b/block/raw-win32.c
@@ -234,7 +234,11 @@ static int raw_create(const char *filename, QEMUOptionParameter *options)
}
static QEMUOptionParameter raw_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
{ NULL }
};
diff --git a/block/vmdk.c b/block/vmdk.c
index b3ea686..f21f02b 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -828,9 +828,21 @@ static void vmdk_flush(BlockDriverState *bs)
static QEMUOptionParameter vmdk_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
- { BLOCK_OPT_COMPAT6, OPT_FLAG },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
+ {
+ .name = BLOCK_OPT_COMPAT6,
+ .type = OPT_FLAG,
+ .help = "VMDK version 6 image"
+ },
{ NULL }
};
diff --git a/block/vpc.c b/block/vpc.c
index 662a6f6..ba482e9 100644
--- a/block/vpc.c
+++ b/block/vpc.c
@@ -594,7 +594,11 @@ static void vpc_close(BlockDriverState *bs)
}
static QEMUOptionParameter vpc_create_options[] = {
- { "size", OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
{ NULL }
};
diff --git a/qemu-img.c b/qemu-img.c
index 3edf25a..947e71b 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -281,15 +281,17 @@ static int img_create(int argc, char **argv)
break;
}
}
- if (optind >= argc)
- help();
- filename = argv[optind++];
/* Find driver and parse its options */
drv = bdrv_find_format(fmt);
if (!drv)
error("Unknown file format '%s'", fmt);
+ if (options && !strcmp(options, "?")) {
+ print_option_help(drv->create_options);
+ return 0;
+ }
+
if (options) {
param = parse_option_parameters(options, drv->create_options, param);
if (param == NULL) {
@@ -299,6 +301,11 @@ static int img_create(int argc, char **argv)
param = parse_option_parameters("", drv->create_options, param);
}
+ /* Get the filename */
+ if (optind >= argc)
+ help();
+ filename = argv[optind++];
+
/* Add size to parameters */
if (optind < argc) {
set_option_parameter(param, BLOCK_OPT_SIZE, argv[optind++]);
@@ -596,6 +603,11 @@ static int img_convert(int argc, char **argv)
if (!drv)
error("Unknown file format '%s'", out_fmt);
+ if (options && !strcmp(options, "?")) {
+ print_option_help(drv->create_options);
+ return 0;
+ }
+
if (options) {
param = parse_option_parameters(options, drv->create_options, param);
if (param == NULL) {
diff --git a/qemu-option.c b/qemu-option.c
index 3cebdd5..646bbad 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -347,3 +347,16 @@ void print_option_parameters(QEMUOptionParameter *list)
list++;
}
}
+
+/*
+ * Prints an overview of all available options
+ */
+void print_option_help(QEMUOptionParameter *list)
+{
+ printf("Supported options:\n");
+ while (list && list->name) {
+ printf("%-16s %s\n", list->name,
+ list->help ? list->help : "No description available");
+ list++;
+ }
+}
diff --git a/qemu-option.h b/qemu-option.h
index ac24694..059c0a4 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -40,6 +40,7 @@ typedef struct QEMUOptionParameter {
uint64_t n;
char* s;
} value;
+ const char *help;
} QEMUOptionParameter;
@@ -63,5 +64,6 @@ QEMUOptionParameter *parse_option_parameters(const char *param,
QEMUOptionParameter *list, QEMUOptionParameter *dest);
void free_option_parameters(QEMUOptionParameter *list);
void print_option_parameters(QEMUOptionParameter *list);
+void print_option_help(QEMUOptionParameter *list);
#endif
--
1.6.0.6
next prev parent reply other threads:[~2009-06-04 23:35 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-04 13:39 [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Kevin Wolf
2009-06-04 13:39 ` Kevin Wolf [this message]
2009-06-04 13:39 ` [Qemu-devel] [PATCH 2/2] Document changes in qemu-img interface Kevin Wolf
2009-06-06 15:45 ` [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Blue Swirl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1244122779-32728-2-git-send-email-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).