All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, stefanha@redhat.com, mreitz@redhat.com
Subject: [Qemu-devel] [PATCH 1/7] qemu-img create: Detect options specified more than once
Date: Wed, 19 Feb 2014 16:12:52 +0100	[thread overview]
Message-ID: <1392822778-4823-2-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1392822778-4823-1-git-send-email-kwolf@redhat.com>

If you specified multiple -o options for qemu-img create, it would
silently ignore all but the last one. Similarly, for other options the
last occurence wins (which is at least a bit less surprising). Error out
instead.

The only exception is a -o help option, which may be added to any valid
qemu-img create command and ignores all other options.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 qemu-img.c | 32 +++++++++++++++++++++++++++++---
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git a/qemu-img.c b/qemu-img.c
index c989850..6a64fe1 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -341,13 +341,14 @@ static int img_create(int argc, char **argv)
 {
     int c;
     uint64_t img_size = -1;
-    const char *fmt = "raw";
+    const char *fmt = NULL;
     const char *base_fmt = NULL;
     const char *filename;
     const char *base_filename = NULL;
     char *options = NULL;
     Error *local_err = NULL;
     bool quiet = false;
+    bool options_help = false;
 
     for(;;) {
         c = getopt(argc, argv, "F:b:f:he6o:q");
@@ -360,12 +361,24 @@ static int img_create(int argc, char **argv)
             help();
             break;
         case 'F':
+            if (base_fmt) {
+                error_report("-F may only be specified once");
+                return 1;
+            }
             base_fmt = optarg;
             break;
         case 'b':
+            if (base_filename) {
+                error_report("-b may only be specified once");
+                return 1;
+            }
             base_filename = optarg;
             break;
         case 'f':
+            if (fmt) {
+                error_report("-f may only be specified once");
+                return 1;
+            }
             fmt = optarg;
             break;
         case 'e':
@@ -377,7 +390,16 @@ static int img_create(int argc, char **argv)
                   "compat6\' instead!");
             return 1;
         case 'o':
-            options = optarg;
+            if (is_help_option(optarg)) {
+                options_help = true;
+            } else if (!options) {
+                options = optarg;
+            } else {
+                error_report("-o cannot be used multiple times. Please use a "
+                             "single -o option with comma-separated settings "
+                             "instead.");
+                return 1;
+            }
             break;
         case 'q':
             quiet = true;
@@ -385,6 +407,10 @@ static int img_create(int argc, char **argv)
         }
     }
 
+    if (!fmt) {
+        fmt = "raw";
+    }
+
     /* Get the filename */
     if (optind >= argc) {
         help();
@@ -413,7 +439,7 @@ static int img_create(int argc, char **argv)
         help();
     }
 
-    if (options && is_help_option(options)) {
+    if (options_help) {
         return print_block_option_help(filename, fmt);
     }
 
-- 
1.8.1.4

  reply	other threads:[~2014-02-19 15:13 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-19 15:12 [Qemu-devel] [PATCH 0/7] qemu-img: Fix handling of multiply specified options Kevin Wolf
2014-02-19 15:12 ` Kevin Wolf [this message]
2014-02-19 16:05   ` [Qemu-devel] [PATCH 1/7] qemu-img create: Detect options specified more than once Fam Zheng
2014-02-19 16:38   ` Eric Blake
2014-02-19 15:12 ` [Qemu-devel] [PATCH 2/7] qemu-img convert: " Kevin Wolf
2014-02-19 15:12 ` [Qemu-devel] [PATCH 3/7] qemu-img amend: " Kevin Wolf
2014-02-19 15:12 ` [Qemu-devel] [PATCH 4/7] qemu-img: " Kevin Wolf
2014-02-19 15:12 ` [Qemu-devel] [PATCH 5/7] qemu-img create: Support multiple -o options Kevin Wolf
2014-02-19 16:18   ` Fam Zheng
2014-02-19 16:46   ` Eric Blake
2014-02-19 15:12 ` [Qemu-devel] [PATCH 6/7] qemu-img convert: " Kevin Wolf
2014-02-19 15:12 ` [Qemu-devel] [PATCH 7/7] qemu-img amend: " Kevin Wolf
2014-02-20  7:18 ` [Qemu-devel] [PATCH 0/7] qemu-img: Fix handling of multiply specified options Markus Armbruster
2014-02-20  9:03   ` Kevin Wolf
2014-02-20  9:48     ` Markus Armbruster

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=1392822778-4823-2-git-send-email-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.