aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2009-06-04 15:39:38 +0200
committerBlue Swirl <blauwirbel@gmail.com>2009-06-06 18:38:57 +0300
commitdb08adf526ce78eea7ae5f24e30b8caa1af4cf24 (patch)
treec52baf3aed5286724a6114327f2532bad99ef4bb
parentf425c278724fc477735a0eecd2e2b03e53fd1a62 (diff)
qemu-img: Print available options with -o ?
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>
-rw-r--r--block/cow.c12
-rw-r--r--block/qcow.c18
-rw-r--r--block/qcow2.c30
-rw-r--r--block/raw-posix.c6
-rw-r--r--block/raw-win32.c6
-rw-r--r--block/vmdk.c18
-rw-r--r--block/vpc.c6
-rw-r--r--qemu-img.c18
-rw-r--r--qemu-option.c13
-rw-r--r--qemu-option.h2
10 files changed, 110 insertions, 19 deletions
diff --git a/block/cow.c b/block/cow.c
index 41d292aac..84818f103 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 329b364b7..55a68a698 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 d1611d14c..c2be42ed3 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 38c4aa71a..4798d626c 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 6e5c09bcb..1e95153d5 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 b3ea68679..f21f02bc5 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 662a6f6cf..ba482e9af 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 3edf25a8f..947e71bea 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 3cebdd51e..646bbad00 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 ac24694e8..059c0a49f 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