[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] monitor: refactor whitespace and optional argument
From: |
Alon Levy |
Subject: |
[Qemu-devel] [PATCH] monitor: refactor whitespace and optional argument parsing |
Date: |
Thu, 20 Oct 2011 20:43:47 +0200 |
Takes out the optional ('?') message parsing from the main switch loop
in monitor_parse_command. Adds optional argument option for boolean parameters.
Signed-off-by: Alon Levy <address@hidden>
---
Previous patch used qemu_free (that's how old it is), fixed.
monitor.c | 79 +++++++++++++++++++++++-------------------------------------
1 files changed, 30 insertions(+), 49 deletions(-)
diff --git a/monitor.c b/monitor.c
index ffda0fe..a482705 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3976,6 +3976,29 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
break;
c = *typestr;
typestr++;
+ while (qemu_isspace(*p)) {
+ p++;
+ }
+ /* take care of optional arguments */
+ switch (c) {
+ case 's':
+ case 'i':
+ case 'l':
+ case 'M':
+ case 'o':
+ case 'T':
+ case 'b':
+ if (*typestr == '?') {
+ typestr++;
+ if (*p == '\0') {
+ /* missing optional argument: NULL argument */
+ g_free(key);
+ key = NULL;
+ continue;
+ }
+ }
+ break;
+ }
switch(c) {
case 'F':
case 'B':
@@ -3983,15 +4006,6 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
{
int ret;
- while (qemu_isspace(*p))
- p++;
- if (*typestr == '?') {
- typestr++;
- if (*p == '\0') {
- /* no optional string: NULL argument */
- break;
- }
- }
ret = get_str(buf, sizeof(buf), &p);
if (ret < 0) {
switch(c) {
@@ -4021,9 +4035,6 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
if (!opts_list || opts_list->desc->name) {
goto bad_type;
}
- while (qemu_isspace(*p)) {
- p++;
- }
if (!*p)
break;
if (get_str(buf, sizeof(buf), &p) < 0) {
@@ -4041,8 +4052,6 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
{
int count, format, size;
- while (qemu_isspace(*p))
- p++;
if (*p == '/') {
/* format found */
p++;
@@ -4122,23 +4131,15 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
{
int64_t val;
- while (qemu_isspace(*p))
- p++;
- if (*typestr == '?' || *typestr == '.') {
- if (*typestr == '?') {
- if (*p == '\0') {
- typestr++;
- break;
- }
- } else {
- if (*p == '.') {
+ if (*typestr == '.') {
+ if (*p == '.') {
+ p++;
+ while (qemu_isspace(*p)) {
p++;
- while (qemu_isspace(*p))
- p++;
- } else {
- typestr++;
- break;
}
+ } else {
+ typestr++;
+ break;
}
typestr++;
}
@@ -4160,15 +4161,6 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
int64_t val;
char *end;
- while (qemu_isspace(*p)) {
- p++;
- }
- if (*typestr == '?') {
- typestr++;
- if (*p == '\0') {
- break;
- }
- }
val = strtosz(p, &end);
if (val < 0) {
monitor_printf(mon, "invalid size\n");
@@ -4182,14 +4174,6 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
{
double val;
- while (qemu_isspace(*p))
- p++;
- if (*typestr == '?') {
- typestr++;
- if (*p == '\0') {
- break;
- }
- }
if (get_double(mon, &val, &p) < 0) {
goto fail;
}
@@ -4215,9 +4199,6 @@ static const mon_cmd_t *monitor_parse_command(Monitor
*mon,
const char *beg;
int val;
- while (qemu_isspace(*p)) {
- p++;
- }
beg = p;
while (qemu_isgraph(*p)) {
p++;
--
1.7.6.4