qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 1/3] hmp: Allow options with parameters


From: Dr. David Alan Gilbert (git)
Subject: [Qemu-devel] [PATCH 1/3] hmp: Allow options with parameters
Date: Wed, 28 May 2014 12:20:32 +0100

From: "Dr. David Alan Gilbert" <address@hidden>

HMP currently allows optional string parameters, however where
there are multiple optional string parameters the order and
interdependence of them becomes complex.

Allow optional parameters of the form:

   -x string

Also, add a hint to hmp-commands.hx as to where to find the
explanations of the flags.

Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---
 hmp-commands.hx |  2 ++
 monitor.c       | 19 +++++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/hmp-commands.hx b/hmp-commands.hx
index 2e462c0..4cbceda 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -4,6 +4,8 @@ HXCOMM discarded from C version
 HXCOMM DEF(command, args, callback, arg_string, help) is used to construct
 HXCOMM monitor commands
 HXCOMM HXCOMM can be used for comments, discarded from both texi and C
+HXCOMM See the comment near the top of monitor.c for an explanation of the
+HXCOMM args_type options encoding.
 
 STEXI
 @table @option
diff --git a/monitor.c b/monitor.c
index 593679a..7343fab 100644
--- a/monitor.c
+++ b/monitor.c
@@ -110,6 +110,7 @@
  * 'b'          boolean
  *              user mode accepts "on" or "off"
  * '-'          optional parameter (eg. '-f')
+ * '+'          optional parameter with value parameter
  *
  */
 
@@ -4029,9 +4030,11 @@ static const mon_cmd_t *monitor_parse_command(Monitor 
*mon,
             }
             break;
         case '-':
+        case '+': /* Option with parameter */
             {
                 const char *tmp = p;
                 int skip_key = 0;
+                bool wants_param = (c == '+');
                 /* option */
 
                 c = *typestr++;
@@ -4055,8 +4058,20 @@ static const mon_cmd_t *monitor_parse_command(Monitor 
*mon,
                         p = tmp;
                     } else {
                         /* has option */
-                        p++;
-                        qdict_put(qdict, key, qbool_from_int(1));
+                        p++; /* Now points to just after the option char */
+
+                        if (!wants_param) {
+                            qdict_put(qdict, key, qbool_from_int(1));
+                        } else {
+                            /* Get the parameter as a string */
+                            if (get_str(buf, sizeof(buf), &p) < 0) {
+                                monitor_printf(mon, "%s: Missing parameter for 
"
+                                                    "-%c\n", cmdname, c);
+                                goto fail;
+                            } else {
+                                qdict_put(qdict, key, qstring_from_str(buf));
+                            }
+                        }
                     }
                 }
             }
-- 
1.9.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]