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>
This commit is contained in:
Gerd Hoffmann 2009-07-22 16:43:00 +02:00 committed by Anthony Liguori
parent 3b0ba92793
commit 62c5802efd
4 changed files with 71 additions and 71 deletions

View File

@ -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
*/

View File

@ -46,6 +46,12 @@ typedef struct QEMUOptionParameter {
const char *get_opt_name(char *buf, int buf_size, const char *p, char delim);
const char *get_opt_value(char *buf, int buf_size, const char *p);
int get_next_param_value(char *buf, int buf_size,
const char *tag, const char **pstr);
int get_param_value(char *buf, int buf_size,
const char *tag, const char *str);
int check_params(char *buf, int buf_size,
const char * const *params, const char *str);
/*

View File

@ -3,6 +3,7 @@
/* Misc. things related to the system emulator. */
#include "qemu-common.h"
#include "qemu-option.h"
#include "sys-queue.h"
#ifdef _WIN32
@ -276,13 +277,6 @@ void do_usb_add(Monitor *mon, const char *devname);
void do_usb_del(Monitor *mon, const char *devname);
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);
void register_devices(void);
#endif

64
vl.c
View File

@ -1599,70 +1599,6 @@ static int socket_init(void)
}
#endif
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;
}
/***********************************************************/
/* Bluetooth support */
static int nb_hcis;