qemu-img: Print available options with -o ?
authorKevin Wolf <kwolf@redhat.com>
Thu, 4 Jun 2009 13:39:38 +0000 (15:39 +0200)
committerBlue Swirl <blauwirbel@gmail.com>
Sat, 6 Jun 2009 15:38:57 +0000 (18:38 +0300)
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
block/qcow.c
block/qcow2.c
block/raw-posix.c
block/raw-win32.c
block/vmdk.c
block/vpc.c
qemu-img.c
qemu-option.c
qemu-option.h

index 41d292aac25e310221b61a412b9ab1755afc495b..84818f10348b3f124552e8e7a2973c5d18b53a53 100644 (file)
@@ -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 }
 };
 
index 329b364b70ba623ea9a8544048d8c70ebdcd0af1..55a68a698ade76346880b92feb12f0352490829a 100644 (file)
@@ -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 }
 };
 
index d1611d14ca50fed228c300b8d39c8498d78ee452..c2be42ed3c1857fde1069937d15c707b1a59d7e5 100644 (file)
@@ -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 }
 };
 
index 38c4aa71af4d63599cbf26e1b63a3fd8029a8b08..4798d626c366ef5144c4c66cbe4018de34a99dc8 100644 (file)
@@ -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 }
 };
 
index 6e5c09bcb5c8e9a2a29d40fb038b396469067ac3..1e95153d56900d1d7206a6d0711dfb7bc371ec60 100644 (file)
@@ -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 }
 };
 
index b3ea68679c928eeeccfa52d537de4474e40d5653..f21f02bc5249f5545ce335eb7fdc089497de1847 100644 (file)
@@ -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 }
 };
 
index 662a6f6cf83324e37cb265249835c6ea0d236b69..ba482e9afb32c296aefcc7c64d964254a8256098 100644 (file)
@@ -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 }
 };
 
index 3edf25a8f0b88565f5e70b11d974e245b3dec008..947e71beab484c517c864611b6a96217a0f603fb 100644 (file)
@@ -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) {
index 3cebdd51efdcca8389f243e5e736da63c6d2a16d..646bbad0026e57bea6e4db5c89202ea0954f71f7 100644 (file)
@@ -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++;
+    }
+}
index ac24694e8bcb9eb99606535c7e7d411102cea00d..059c0a49fb1a8b946ab26235b417a3d9b27583eb 100644 (file)
@@ -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