Move the code into 'qemuMigrationCookieXMLParseMandatoryFeatures' to simplify 'qemuMigrationCookieXMLParse'. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/qemu/qemu_migration_cookie.c | 77 +++++++++++++++++++------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c index 4b73a98f7e..22705874e0 100644 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -1159,6 +1159,49 @@ qemuMigrationCookieCapsXMLParse(xmlXPathContextPtr ctxt) } +/** + * qemuMigrationCookieXMLParseMandatoryFeatures: + * + * Check to ensure all mandatory features from XML are also present in 'flags'. + */ +static int +qemuMigrationCookieXMLParseMandatoryFeatures(xmlXPathContextPtr ctxt, + unsigned int flags) +{ + g_autofree xmlNodePtr *nodes = NULL; + size_t i; + ssize_t n; + + if ((n = virXPathNodeSet("./feature", ctxt, &nodes)) < 0) + return -1; + + for (i = 0; i < n; i++) { + int val; + g_autofree char *str = virXMLPropString(nodes[i], "name"); + + if (!str) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("missing feature name")); + return -1; + } + + if ((val = qemuMigrationCookieFlagTypeFromString(str)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unknown migration cookie feature %s"), str); + return -1; + } + + if ((flags & (1 << val)) == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unsupported migration cookie feature %s"), str); + return -1; + } + } + + return 0; +} + + static int qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig, virQEMUDriverPtr driver, @@ -1170,7 +1213,6 @@ qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig, char uuidstr[VIR_UUID_STRING_BUFLEN]; char *tmp = NULL; xmlNodePtr *nodes = NULL; - size_t i; int n; /* We don't store the uuid, name, hostname, or hostuuid @@ -1237,38 +1279,9 @@ qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig, } VIR_FREE(tmp); - /* Check to ensure all mandatory features from XML are also - * present in 'flags' */ - if ((n = virXPathNodeSet("./feature", ctxt, &nodes)) < 0) - goto error; - - for (i = 0; i < n; i++) { - int val; - char *str = virXMLPropString(nodes[i], "name"); - if (!str) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("missing feature name")); - goto error; - } - - if ((val = qemuMigrationCookieFlagTypeFromString(str)) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown migration cookie feature %s"), - str); - VIR_FREE(str); - goto error; - } - if ((flags & (1 << val)) == 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unsupported migration cookie feature %s"), - str); - VIR_FREE(str); - goto error; - } - VIR_FREE(str); - } - VIR_FREE(nodes); + if (qemuMigrationCookieXMLParseMandatoryFeatures(ctxt, flags) < 0) + return -1; if ((flags & QEMU_MIGRATION_COOKIE_GRAPHICS) && virXPathBoolean("count(./graphics) > 0", ctxt) && -- 2.26.2