static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml, bool expect_error) { char *actual = NULL; int ret = -1; virNWFilterDefPtr dev = NULL; virResetLastError(); if (!(dev = virNWFilterDefParseFile(inxml))) { if (expect_error) { virResetLastError(); goto done; } goto fail; } if (!(actual = virNWFilterDefFormat(dev))) goto fail; if (virtTestCompareToFile(actual, outxml) < 0) goto fail; done: ret = 0; fail: VIR_FREE(actual); virNWFilterDefFree(dev); return ret; }
static int virNWFilterDefToInst(const char *xml, virNWFilterHashTablePtr vars, virNWFilterInstPtr inst) { size_t i; int ret = -1; virNWFilterDefPtr def = virNWFilterDefParseFile(xml); if (!def) return -1; if (VIR_APPEND_ELEMENT_COPY(inst->filters, inst->nfilters, def) < 0) { virNWFilterDefFree(def); goto cleanup; } for (i = 0; i < def->nentries; i++) { if (def->filterEntries[i]->rule) { if (virNWFilterRuleDefToRuleInst(def, def->filterEntries[i]->rule, vars, inst) < 0) goto cleanup; } else if (def->filterEntries[i]->include) { if (virNWFilterIncludeDefToRuleInst(def->filterEntries[i]->include, vars, inst) < 0) goto cleanup; } } ret = 0; cleanup: if (ret < 0) virNWFilterInstReset(inst); return ret; }
static virNWFilterObjPtr virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfilters, const char *configDir, const char *name) { virNWFilterDefPtr def = NULL; virNWFilterObjPtr obj; char *configFile = NULL; if (!(configFile = virFileBuildPath(configDir, name, ".xml"))) goto error; if (!(def = virNWFilterDefParseFile(configFile))) goto error; if (STRNEQ(name, def->name)) { virReportError(VIR_ERR_XML_ERROR, _("network filter config filename '%s' " "does not match name '%s'"), configFile, def->name); goto error; } /* We generated a UUID, make it permanent by saving the config to disk */ if (!def->uuid_specified && virNWFilterSaveConfig(configDir, def) < 0) goto error; if (!(obj = virNWFilterObjListAssignDef(nwfilters, def))) goto error; VIR_FREE(configFile); return obj; error: VIR_FREE(configFile); virNWFilterDefFree(def); return NULL; }