From 5db4af8bc8eb99333b0d2be1f88c943353361e50 Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Wed, 24 Jun 2009 14:42:28 +0200 Subject: [PATCH] Introduce get_next_param_value In order to parse multiple instances of the same param=value pair, introduce get_next_param_value which can pass back to string parsing position after reading a parameter value. Signed-off-by: Jan Kiszka Signed-off-by: Anthony Liguori --- sysemu.h | 2 ++ vl.c | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sysemu.h b/sysemu.h index aa036bf..8744347 100644 --- a/sysemu.h +++ b/sysemu.h @@ -275,6 +275,8 @@ void usb_info(Monitor *mon); int get_param_value(char *buf, int buf_size, const char *tag, const char *str); +int get_next_param_value(char *buf, int buf_size, + const char *tag, const char **pstr); int check_params(char *buf, int buf_size, const char * const *params, const char *str); diff --git a/vl.c b/vl.c index 1c077b4..4cb9f0b 100644 --- a/vl.c +++ b/vl.c @@ -1812,20 +1812,23 @@ static int socket_init(void) } #endif -int get_param_value(char *buf, int buf_size, - const char *tag, const char *str) +int get_next_param_value(char *buf, int buf_size, + const char *tag, const char **pstr) { const char *p; char option[128]; - p = str; + p = *pstr; for(;;) { p = get_opt_name(option, sizeof(option), p, '='); if (*p != '=') break; p++; if (!strcmp(tag, option)) { - (void)get_opt_value(buf, buf_size, p); + *pstr = get_opt_value(buf, buf_size, p); + if (**pstr == ',') { + (*pstr)++; + } return strlen(buf); } else { p = get_opt_value(NULL, 0, p); @@ -1837,6 +1840,12 @@ int get_param_value(char *buf, int buf_size, return 0; } +int get_param_value(char *buf, int buf_size, + const char *tag, const char *str) +{ + return get_next_param_value(buf, buf_size, tag, &str); +} + int check_params(char *buf, int buf_size, const char * const *params, const char *str) { -- 1.7.9.5