mirror of https://github.com/proxmox/mirror_qemu
QemuOpts: parse config from file.
Add functions to parse QemuOpts from a git-style config file. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>master
parent
9d993394a1
commit
42262ba860
|
@ -296,3 +296,53 @@ void qemu_config_write(FILE *fp)
|
||||||
qemu_opts_foreach(data.list, config_write_opts, &data, 0);
|
qemu_opts_foreach(data.list, config_write_opts, &data, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int qemu_config_parse(FILE *fp)
|
||||||
|
{
|
||||||
|
char line[1024], group[64], id[64], arg[64], value[1024];
|
||||||
|
QemuOptsList *list = NULL;
|
||||||
|
QemuOpts *opts = NULL;
|
||||||
|
|
||||||
|
while (fgets(line, sizeof(line), fp) != NULL) {
|
||||||
|
if (line[0] == '\n') {
|
||||||
|
/* skip empty lines */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (line[0] == '#') {
|
||||||
|
/* comment */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (sscanf(line, "[%63s \"%63[^\"]\"]", group, id) == 2) {
|
||||||
|
/* group with id */
|
||||||
|
list = find_list(group);
|
||||||
|
if (list == NULL)
|
||||||
|
return -1;
|
||||||
|
opts = qemu_opts_create(list, id, 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (sscanf(line, "[%63[^]]]", group) == 1) {
|
||||||
|
/* group without id */
|
||||||
|
list = find_list(group);
|
||||||
|
if (list == NULL)
|
||||||
|
return -1;
|
||||||
|
opts = qemu_opts_create(list, NULL, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (sscanf(line, " %63s = \"%1023[^\"]\"", arg, value) == 2) {
|
||||||
|
/* arg = value */
|
||||||
|
if (opts == NULL) {
|
||||||
|
fprintf(stderr, "no group defined\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (qemu_opt_set(opts, arg, value) != 0) {
|
||||||
|
fprintf(stderr, "failed to set \"%s\" for %s\n",
|
||||||
|
arg, group);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "parse error: %s\n", line);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -11,5 +11,6 @@ extern QemuOptsList qemu_rtc_opts;
|
||||||
int qemu_set_option(const char *str);
|
int qemu_set_option(const char *str);
|
||||||
|
|
||||||
void qemu_config_write(FILE *fp);
|
void qemu_config_write(FILE *fp);
|
||||||
|
int qemu_config_parse(FILE *fp);
|
||||||
|
|
||||||
#endif /* QEMU_CONFIG_H */
|
#endif /* QEMU_CONFIG_H */
|
||||||
|
|
Loading…
Reference in New Issue