Commit 5db4af8bc8eb99333b0d2be1f88c943353361e50

Authored by Jan Kiszka
Committed by Anthony Liguori
1 parent e15f4a99

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>
Showing 2 changed files with 15 additions and 4 deletions
sysemu.h
... ... @@ -275,6 +275,8 @@ void usb_info(Monitor *mon);
275 275  
276 276 int get_param_value(char *buf, int buf_size,
277 277 const char *tag, const char *str);
  278 +int get_next_param_value(char *buf, int buf_size,
  279 + const char *tag, const char **pstr);
278 280 int check_params(char *buf, int buf_size,
279 281 const char * const *params, const char *str);
280 282  
... ...
... ... @@ -1812,20 +1812,23 @@ static int socket_init(void)
1812 1812 }
1813 1813 #endif
1814 1814  
1815   -int get_param_value(char *buf, int buf_size,
1816   - const char *tag, const char *str)
  1815 +int get_next_param_value(char *buf, int buf_size,
  1816 + const char *tag, const char **pstr)
1817 1817 {
1818 1818 const char *p;
1819 1819 char option[128];
1820 1820  
1821   - p = str;
  1821 + p = *pstr;
1822 1822 for(;;) {
1823 1823 p = get_opt_name(option, sizeof(option), p, '=');
1824 1824 if (*p != '=')
1825 1825 break;
1826 1826 p++;
1827 1827 if (!strcmp(tag, option)) {
1828   - (void)get_opt_value(buf, buf_size, p);
  1828 + *pstr = get_opt_value(buf, buf_size, p);
  1829 + if (**pstr == ',') {
  1830 + (*pstr)++;
  1831 + }
1829 1832 return strlen(buf);
1830 1833 } else {
1831 1834 p = get_opt_value(NULL, 0, p);
... ... @@ -1837,6 +1840,12 @@ int get_param_value(char *buf, int buf_size,
1837 1840 return 0;
1838 1841 }
1839 1842  
  1843 +int get_param_value(char *buf, int buf_size,
  1844 + const char *tag, const char *str)
  1845 +{
  1846 + return get_next_param_value(buf, buf_size, tag, &str);
  1847 +}
  1848 +
1840 1849 int check_params(char *buf, int buf_size,
1841 1850 const char * const *params, const char *str)
1842 1851 {
... ...