diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2009-07-22 16:43:00 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-07-27 14:08:23 -0500 |
commit | 62c5802efdabe2a24ca9680a1ab9dcbbfbaf43d2 (patch) | |
tree | b31d2dbf3090dd38af73fe600de9a059aab25b73 /qemu-option.c | |
parent | 3b0ba927931925f0f76509747ae145df30c97a05 (diff) |
move parser functions from vl.c to qemu-option.c
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'qemu-option.c')
-rw-r--r-- | qemu-option.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/qemu-option.c b/qemu-option.c index 646bbad002..bb2a09e121 100644 --- a/qemu-option.c +++ b/qemu-option.c @@ -85,6 +85,70 @@ const char *get_opt_value(char *buf, int buf_size, const char *p) return p; } +int get_next_param_value(char *buf, int buf_size, + const char *tag, const char **pstr) +{ + const char *p; + char option[128]; + + p = *pstr; + for(;;) { + p = get_opt_name(option, sizeof(option), p, '='); + if (*p != '=') + break; + p++; + if (!strcmp(tag, option)) { + *pstr = get_opt_value(buf, buf_size, p); + if (**pstr == ',') { + (*pstr)++; + } + return strlen(buf); + } else { + p = get_opt_value(NULL, 0, p); + } + if (*p != ',') + break; + p++; + } + 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) +{ + const char *p; + int i; + + p = str; + while (*p != '\0') { + p = get_opt_name(buf, buf_size, p, '='); + if (*p != '=') { + return -1; + } + p++; + for (i = 0; params[i] != NULL; i++) { + if (!strcmp(params[i], buf)) { + break; + } + } + if (params[i] == NULL) { + return -1; + } + p = get_opt_value(NULL, 0, p); + if (*p != ',') { + break; + } + p++; + } + return 0; +} + /* * Searches an option list for an option with the given name */ |