summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2009-06-24 14:42:28 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-06-29 08:52:44 -0500
commit5db4af8bc8eb99333b0d2be1f88c943353361e50 (patch)
tree6f94de6cc354fdddc9e52f2c4563f1415220b982
parente15f4a992cd8c6fcec42bc00c85c2641a2fbcb14 (diff)
downloadfocaccia-qemu-5db4af8bc8eb99333b0d2be1f88c943353361e50.tar.gz
focaccia-qemu-5db4af8bc8eb99333b0d2be1f88c943353361e50.zip
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 <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--sysemu.h2
-rw-r--r--vl.c17
2 files changed, 15 insertions, 4 deletions
diff --git a/sysemu.h b/sysemu.h
index aa036bfd1f..8744347f28 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 1c077b4c86..4cb9f0bf6d 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)
 {