From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54922) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UwDO5-0004bW-AM for qemu-devel@nongnu.org; Mon, 08 Jul 2013 11:30:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UwDO3-0003hE-J9 for qemu-devel@nongnu.org; Mon, 08 Jul 2013 11:30:01 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39171) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UwDO3-0003h9-AX for qemu-devel@nongnu.org; Mon, 08 Jul 2013 11:29:59 -0400 Date: Mon, 8 Jul 2013 11:26:43 -0400 From: Luiz Capitulino Message-ID: <20130708112643.2ff3360e@redhat.com> In-Reply-To: <1372477981-7512-4-git-send-email-xiawenc@linux.vnet.ibm.com> References: <1372477981-7512-1-git-send-email-xiawenc@linux.vnet.ibm.com> <1372477981-7512-4-git-send-email-xiawenc@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH V5 3/7] monitor: code move for parse_cmdline() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com On Sat, 29 Jun 2013 11:52:57 +0800 Wenchao Xia wrote: > get_str() is called by parse_cmdline() so it is moved also. Some > code style error reported by check script, is also fixed. Please, explain why you're doing this move. > > Signed-off-by: Wenchao Xia > --- > monitor.c | 191 +++++++++++++++++++++++++++++++------------------------------ > 1 files changed, 98 insertions(+), 93 deletions(-) > > diff --git a/monitor.c b/monitor.c > index 68e2e80..03a017d 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -733,6 +733,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) > { > @@ -3411,71 +3509,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. > @@ -3532,8 +3565,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]; > @@ -4099,32 +4130,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, ':');