int priority;
xmlNodePtr cur;
- virNWFilterRuleDef *ret;
+ g_autoptr(virNWFilterRuleDef) ret = NULL;
ret = g_new0(virNWFilterRuleDef, 1);
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s",
_("rule node requires action attribute"));
- goto err_exit;
+ return NULL;
}
if ((ret->action = virNWFilterRuleActionTypeFromString(action)) < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s",
_("unknown rule action attribute value"));
- goto err_exit;
+ return NULL;
}
if (!direction) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s",
_("rule node requires direction attribute"));
- goto err_exit;
+ return NULL;
}
if ((ret->tt = virNWFilterRuleDirectionTypeFromString(direction)) < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s",
_("unknown rule direction attribute value"));
- goto err_exit;
+ return NULL;
}
ret->priority = MAX_RULE_PRIORITY / 2;
if (virNWFilterRuleDetailsParse(cur,
ret,
virAttr[i].att) < 0) {
- goto err_exit;
+ return NULL;
}
if (virNWFilterRuleValidate(ret) < 0)
- goto err_exit;
+ return NULL;
break;
}
if (!found) {
virNWFilterRuleDefFixup(ret);
- return ret;
-
- err_exit:
- g_clear_pointer(&ret, virNWFilterRuleDefFree);
- return NULL;
+ return g_steal_pointer(&ret);
}
static virNWFilterDef *
virNWFilterDefParseXML(xmlXPathContextPtr ctxt)
{
- virNWFilterDef *ret;
+ g_autoptr(virNWFilterDef) ret = NULL;
xmlNodePtr curr = ctxt->node;
g_autofree char *uuid = NULL;
g_autofree char *chain = NULL;
if (!ret->name) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("filter has no name"));
- goto cleanup;
+ return NULL;
}
chain_pri_s = virXPathString("string(./@priority)", ctxt);
virReportError(VIR_ERR_INVALID_ARG,
_("Could not parse chain priority '%s'"),
chain_pri_s);
- goto cleanup;
+ return NULL;
}
if (chain_priority < NWFILTER_MIN_FILTER_PRIORITY ||
chain_priority > NWFILTER_MAX_FILTER_PRIORITY) {
chain_priority,
NWFILTER_MIN_FILTER_PRIORITY,
NWFILTER_MAX_FILTER_PRIORITY);
- goto cleanup;
+ return NULL;
}
}
if (chain) {
name_prefix = virNWFilterIsAllowedChain(chain);
if (name_prefix == NULL)
- goto cleanup;
+ return NULL;
ret->chainsuffix = g_steal_pointer(&chain);
if (chain_pri_s) {
if (virUUIDGenerate(ret->uuid) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("unable to generate uuid"));
- goto cleanup;
+ return NULL;
}
} else {
if (virUUIDParse(uuid, ret->uuid) < 0) {
virReportError(VIR_ERR_XML_ERROR,
"%s", _("malformed uuid element"));
- goto cleanup;
+ return NULL;
}
}
if (virXMLNodeNameEqual(curr, "rule")) {
if (!(entry->rule = virNWFilterRuleParse(curr))) {
virNWFilterEntryFree(entry);
- goto cleanup;
+ return NULL;
}
} else if (virXMLNodeNameEqual(curr, "filterref")) {
if (!(entry->include = virNWFilterIncludeParse(curr))) {
virNWFilterEntryFree(entry);
- goto cleanup;
+ return NULL;
}
}
curr = curr->next;
}
- return ret;
-
- cleanup:
- virNWFilterDefFree(ret);
- return NULL;
+ return g_steal_pointer(&ret);
}
bool expect_error)
{
g_autofree char *actual = NULL;
- int ret = -1;
- virNWFilterDef *dev = NULL;
+ g_autoptr(virNWFilterDef) def = NULL;
virResetLastError();
- if (!(dev = virNWFilterDefParse(NULL, inxml, 0))) {
+ if (!(def = virNWFilterDefParse(NULL, inxml, 0))) {
if (expect_error) {
virResetLastError();
- goto done;
+ return 0;
}
- goto fail;
+ return -1;
}
- if (!(actual = virNWFilterDefFormat(dev)))
- goto fail;
+ if (!(actual = virNWFilterDefFormat(def)))
+ return -1;
if (virTestCompareToFile(actual, outxml) < 0)
- goto fail;
+ return -1;
- done:
- ret = 0;
-
- fail:
- virNWFilterDefFree(dev);
- return ret;
+ return 0;
}
typedef struct test_parms {