[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V9 09/15] monitor: code move for parse_cmdline()
From: |
Wenchao Xia |
Subject: |
[Qemu-devel] [PATCH V9 09/15] monitor: code move for parse_cmdline() |
Date: |
Fri, 23 Aug 2013 16:18:01 +0800 |
help_cmd() need this function later, so move it. get_str() is called by
parse_cmdline() so it is moved also. Some code style error reported by
check script, is also fixed.
Signed-off-by: Wenchao Xia <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
monitor.c | 191 +++++++++++++++++++++++++++++++------------------------------
1 files changed, 98 insertions(+), 93 deletions(-)
diff --git a/monitor.c b/monitor.c
index 8152607..1db0117 100644
--- a/monitor.c
+++ b/monitor.c
@@ -753,6 +753,104 @@ static int compare_cmd(const char *name, const char *list)
return 0;
}
+static int get_str(char *buf, int buf_size, const char **pp)
+{
+ const char *p;
+ char *q;
+ int c;
+
+ q = buf;
+ p = *pp;
+ while (qemu_isspace(*p)) {
+ p++;
+ }
+ if (*p == '\0') {
+ fail:
+ *q = '\0';
+ *pp = p;
+ return -1;
+ }
+ if (*p == '\"') {
+ p++;
+ while (*p != '\0' && *p != '\"') {
+ if (*p == '\\') {
+ p++;
+ c = *p++;
+ switch (c) {
+ case 'n':
+ c = '\n';
+ break;
+ case 'r':
+ c = '\r';
+ break;
+ case '\\':
+ case '\'':
+ case '\"':
+ break;
+ default:
+ qemu_printf("unsupported escape code: '\\%c'\n", c);
+ goto fail;
+ }
+ if ((q - buf) < buf_size - 1) {
+ *q++ = c;
+ }
+ } else {
+ if ((q - buf) < buf_size - 1) {
+ *q++ = *p;
+ }
+ p++;
+ }
+ }
+ if (*p != '\"') {
+ qemu_printf("unterminated string\n");
+ goto fail;
+ }
+ p++;
+ } else {
+ while (*p != '\0' && !qemu_isspace(*p)) {
+ if ((q - buf) < buf_size - 1) {
+ *q++ = *p;
+ }
+ p++;
+ }
+ }
+ *q = '\0';
+ *pp = p;
+ return 0;
+}
+
+#define MAX_ARGS 16
+
+/* NOTE: this parser is an approximate form of the real command parser */
+static void parse_cmdline(const char *cmdline,
+ int *pnb_args, char **args)
+{
+ const char *p;
+ int nb_args, ret;
+ char buf[1024];
+
+ p = cmdline;
+ nb_args = 0;
+ for (;;) {
+ while (qemu_isspace(*p)) {
+ p++;
+ }
+ if (*p == '\0') {
+ break;
+ }
+ if (nb_args >= MAX_ARGS) {
+ break;
+ }
+ ret = get_str(buf, sizeof(buf), &p);
+ args[nb_args] = g_strdup(buf);
+ nb_args++;
+ if (ret < 0) {
+ break;
+ }
+ }
+ *pnb_args = nb_args;
+}
+
static void help_cmd_dump(Monitor *mon, const mon_cmd_t *cmds,
const char *prefix, const char *name)
{
@@ -3433,71 +3531,6 @@ static int get_double(Monitor *mon, double *pval, const
char **pp)
return 0;
}
-static int get_str(char *buf, int buf_size, const char **pp)
-{
- const char *p;
- char *q;
- int c;
-
- q = buf;
- p = *pp;
- while (qemu_isspace(*p))
- p++;
- if (*p == '\0') {
- fail:
- *q = '\0';
- *pp = p;
- return -1;
- }
- if (*p == '\"') {
- p++;
- while (*p != '\0' && *p != '\"') {
- if (*p == '\\') {
- p++;
- c = *p++;
- switch(c) {
- case 'n':
- c = '\n';
- break;
- case 'r':
- c = '\r';
- break;
- case '\\':
- case '\'':
- case '\"':
- break;
- default:
- qemu_printf("unsupported escape code: '\\%c'\n", c);
- goto fail;
- }
- if ((q - buf) < buf_size - 1) {
- *q++ = c;
- }
- } else {
- if ((q - buf) < buf_size - 1) {
- *q++ = *p;
- }
- p++;
- }
- }
- if (*p != '\"') {
- qemu_printf("unterminated string\n");
- goto fail;
- }
- p++;
- } else {
- while (*p != '\0' && !qemu_isspace(*p)) {
- if ((q - buf) < buf_size - 1) {
- *q++ = *p;
- }
- p++;
- }
- }
- *q = '\0';
- *pp = p;
- return 0;
-}
-
/*
* Store the command-name in cmdname, and return a pointer to
* the remaining of the command string.
@@ -3554,8 +3587,6 @@ static char *key_get_info(const char *type, char **key)
static int default_fmt_format = 'x';
static int default_fmt_size = 4;
-#define MAX_ARGS 16
-
static int is_valid_option(const char *c, const char *typestr)
{
char option[3];
@@ -4121,32 +4152,6 @@ static void block_completion_it(void *opaque,
BlockDriverState *bs)
}
}
-/* NOTE: this parser is an approximate form of the real command parser */
-static void parse_cmdline(const char *cmdline,
- int *pnb_args, char **args)
-{
- const char *p;
- int nb_args, ret;
- char buf[1024];
-
- p = cmdline;
- nb_args = 0;
- for(;;) {
- while (qemu_isspace(*p))
- p++;
- if (*p == '\0')
- break;
- if (nb_args >= MAX_ARGS)
- break;
- ret = get_str(buf, sizeof(buf), &p);
- args[nb_args] = g_strdup(buf);
- nb_args++;
- if (ret < 0)
- break;
- }
- *pnb_args = nb_args;
-}
-
static const char *next_arg_type(const char *typestr)
{
const char *p = strchr(typestr, ':');
--
1.7.1
- [Qemu-devel] [PATCH V9 00/15] monitor: support sub command group in auto completion and help, Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 01/15] monitor: avoid use of global *cur_mon in cmd_completion(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 03/15] monitor: avoid use of global *cur_mon in block_completion_it(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 04/15] monitor: avoid use of global *cur_mon in monitor_find_completion(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 05/15] monitor: avoid use of global *cur_mon in readline_completion(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 06/15] monitor: call sortcmdlist() only one time, Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 02/15] monitor: avoid use of global *cur_mon in file_completion(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 07/15] monitor: split off monitor_data_init(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 08/15] monitor: avoid direct use of global variable *mon_cmds, Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 09/15] monitor: code move for parse_cmdline(),
Wenchao Xia <=
- [Qemu-devel] [PATCH V9 10/15] monitor: refine parse_cmdline(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 11/15] monitor: support sub command in help, Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 12/15] monitor: refine monitor_find_completion(), Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 13/15] monitor: support sub command in auto completion, Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 14/15] monitor: allow "help" show message for single command in sub group, Wenchao Xia, 2013/08/23
- [Qemu-devel] [PATCH V9 15/15] monitor: improve auto complete of "help" for single command in sub group, Wenchao Xia, 2013/08/23
- Re: [Qemu-devel] [PATCH V9 00/15] monitor: support sub command group in auto completion and help, Luiz Capitulino, 2013/08/26