Split out parts of the config parsing code to make
the parent function easier to read.
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
src/qemu/qemu_conf.c | 162 ++++++++++++++++++++++++-------------------
1 file changed, 90 insertions(+), 72 deletions(-)
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 776ba3f3ad..8bc653fa9e 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -423,6 +423,95 @@ virQEMUDriverConfigHugeTLBFSInit(virHugeTLBFSPtr hugetlbfs,
}
+static int
+virQEMUDriverConfigLoadProcessEntry(virQEMUDriverConfigPtr cfg,
+ virConfPtr conf)
+{
+ char *stdioHandler = NULL;
+ char **hugetlbfs = NULL;
+ char *corestr = NULL;
+ int ret = -1;
+ size_t i;
+
+ if (virConfGetValueStringList(conf, "hugetlbfs_mount", true,
+ &hugetlbfs) < 0)
+ goto cleanup;
+ if (hugetlbfs) {
+ /* There already might be something autodetected. Avoid leaking it. */
+ while (cfg->nhugetlbfs) {
+ cfg->nhugetlbfs--;
+ VIR_FREE(cfg->hugetlbfs[cfg->nhugetlbfs].mnt_dir);
+ }
+ VIR_FREE(cfg->hugetlbfs);
+
+ cfg->nhugetlbfs = virStringListLength((const char *const *)hugetlbfs);
+ if (hugetlbfs[0] &&
+ VIR_ALLOC_N(cfg->hugetlbfs, cfg->nhugetlbfs) < 0)
+ goto cleanup;
+
+ for (i = 0; hugetlbfs[i] != NULL; i++) {
+ if (virQEMUDriverConfigHugeTLBFSInit(&cfg->hugetlbfs[i],
+ hugetlbfs[i], i != 0) < 0)
+ goto cleanup;
+ }
+ }
+
+ if (virConfGetValueBool(conf, "clear_emulator_capabilities",
&cfg->clearEmulatorCapabilities) < 0)
+ goto cleanup;
+ if (virConfGetValueString(conf, "bridge_helper",
&cfg->bridgeHelperName) < 0)
+ goto cleanup;
+
+ if (virConfGetValueString(conf, "pr_helper", &cfg->prHelperName)
< 0)
+ goto cleanup;
+
+ if (virConfGetValueBool(conf, "set_process_name",
&cfg->setProcessName) < 0)
+ goto cleanup;
+ if (virConfGetValueUInt(conf, "max_processes", &cfg->maxProcesses)
< 0)
+ goto cleanup;
+ if (virConfGetValueUInt(conf, "max_files", &cfg->maxFiles) < 0)
+ goto cleanup;
+
+ if (virConfGetValueType(conf, "max_core") == VIR_CONF_STRING) {
+ if (virConfGetValueString(conf, "max_core", &corestr) < 0)
+ goto cleanup;
+ if (STREQ(corestr, "unlimited")) {
+ cfg->maxCore = ULLONG_MAX;
+ } else {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Unknown core size '%s'"),
+ corestr);
+ goto cleanup;
+ }
+ } else if (virConfGetValueULLong(conf, "max_core", &cfg->maxCore)
< 0) {
+ goto cleanup;
+ }
+
+ if (virConfGetValueBool(conf, "dump_guest_core",
&cfg->dumpGuestCore) < 0)
+ goto cleanup;
+ if (virConfGetValueString(conf, "stdio_handler", &stdioHandler) <
0)
+ goto cleanup;
+ if (stdioHandler) {
+ if (STREQ(stdioHandler, "logd")) {
+ cfg->stdioLogD = true;
+ } else if (STREQ(stdioHandler, "file")) {
+ cfg->stdioLogD = false;
+ } else {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Unknown stdio handler %s"),
+ stdioHandler);
+ VIR_FREE(stdioHandler);
+ goto cleanup;
+ }
+ VIR_FREE(stdioHandler);
+ }
+
+ ret = 0;
+ cleanup:
+ virStringListFree(hugetlbfs);
+ VIR_FREE(corestr);
+ return ret;
+}
+
static int
virQEMUDriverConfigLoadDeviceEntry(virQEMUDriverConfigPtr cfg,
virConfPtr conf)
@@ -722,8 +811,6 @@ int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg,
virConfPtr conf = NULL;
int ret = -1;
int rv;
- size_t i;
- char *stdioHandler = NULL;
char **hugetlbfs = NULL;
char *corestr = NULL;
@@ -894,79 +981,10 @@ int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg,
goto cleanup;
if (virConfGetValueBool(conf, "auto_start_bypass_cache",
&cfg->autoStartBypassCache) < 0)
goto cleanup;
-
- if (virConfGetValueStringList(conf, "hugetlbfs_mount", true,
- &hugetlbfs) < 0)
- goto cleanup;
- if (hugetlbfs) {
- /* There already might be something autodetected. Avoid leaking it. */
- while (cfg->nhugetlbfs) {
- cfg->nhugetlbfs--;
- VIR_FREE(cfg->hugetlbfs[cfg->nhugetlbfs].mnt_dir);
- }
- VIR_FREE(cfg->hugetlbfs);
-
- cfg->nhugetlbfs = virStringListLength((const char *const *)hugetlbfs);
- if (hugetlbfs[0] &&
- VIR_ALLOC_N(cfg->hugetlbfs, cfg->nhugetlbfs) < 0)
- goto cleanup;
-
- for (i = 0; hugetlbfs[i] != NULL; i++) {
- if (virQEMUDriverConfigHugeTLBFSInit(&cfg->hugetlbfs[i],
- hugetlbfs[i], i != 0) < 0)
- goto cleanup;
- }
- }
-
- if (virConfGetValueString(conf, "bridge_helper",
&cfg->bridgeHelperName) < 0)
- goto cleanup;
-
- if (virConfGetValueString(conf, "pr_helper", &cfg->prHelperName)
< 0)
goto cleanup;
- if (virConfGetValueBool(conf, "clear_emulator_capabilities",
&cfg->clearEmulatorCapabilities) < 0)
- goto cleanup;
- if (virConfGetValueBool(conf, "set_process_name",
&cfg->setProcessName) < 0)
+ if (virQEMUDriverConfigLoadProcessEntry(cfg, conf) < 0)
goto cleanup;
- if (virConfGetValueUInt(conf, "max_processes", &cfg->maxProcesses)
< 0)
- goto cleanup;
- if (virConfGetValueUInt(conf, "max_files", &cfg->maxFiles) < 0)
- goto cleanup;
-
- if (virConfGetValueType(conf, "max_core") == VIR_CONF_STRING) {
- if (virConfGetValueString(conf, "max_core", &corestr) < 0)
- goto cleanup;
- if (STREQ(corestr, "unlimited")) {
- cfg->maxCore = ULLONG_MAX;
- } else {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("Unknown core size '%s'"),
- corestr);
- goto cleanup;
- }
- } else if (virConfGetValueULLong(conf, "max_core", &cfg->maxCore)
< 0) {
- goto cleanup;
- }
-
- if (virConfGetValueBool(conf, "dump_guest_core",
&cfg->dumpGuestCore) < 0)
- goto cleanup;
-
- if (virConfGetValueString(conf, "stdio_handler", &stdioHandler) <
0)
- goto cleanup;
- if (stdioHandler) {
- if (STREQ(stdioHandler, "logd")) {
- cfg->stdioLogD = true;
- } else if (STREQ(stdioHandler, "file")) {
- cfg->stdioLogD = false;
- } else {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("Unknown stdio handler %s"),
- stdioHandler);
- VIR_FREE(stdioHandler);
- goto cleanup;
- }
- VIR_FREE(stdioHandler);
- }
if (virQEMUDriverConfigLoadDeviceEntry(cfg, conf) < 0)
goto cleanup;
--
2.20.1