[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH V5 3/7] monitor: code move for parse_cmdline()
From: |
Luiz Capitulino |
Subject: |
Re: [Qemu-devel] [PATCH V5 3/7] monitor: code move for parse_cmdline() |
Date: |
Mon, 8 Jul 2013 11:26:43 -0400 |
On Sat, 29 Jun 2013 11:52:57 +0800
Wenchao Xia <address@hidden> 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 <address@hidden>
> ---
> 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, ':');
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH V5 3/7] monitor: code move for parse_cmdline(),
Luiz Capitulino <=