g_free(def->gateway);
g_free(def);
}
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virInterfaceProtocolDef, virInterfaceProtocolDefFree);
void
virInterfaceDefParseStartMode(virInterfaceDef *def,
xmlXPathContextPtr ctxt)
{
- char *tmp;
+ g_autofree char *tmp = virXPathString("string(./start/@mode)", ctxt);
- tmp = virXPathString("string(./start/@mode)", ctxt);
if (tmp == NULL) {
def->startmode = VIR_INTERFACE_START_UNSPECIFIED;
} else if (STREQ(tmp, "onboot")) {
} else {
virReportError(VIR_ERR_XML_ERROR,
_("unknown interface startmode %s"), tmp);
- VIR_FREE(tmp);
return -1;
}
- VIR_FREE(tmp);
return 0;
}
static int
virInterfaceDefParseBondMode(xmlXPathContextPtr ctxt)
{
- char *tmp;
+ g_autofree char *tmp = virXPathString("string(./@mode)", ctxt);
int ret = 0;
- tmp = virXPathString("string(./@mode)", ctxt);
if (tmp == NULL)
return VIR_INTERFACE_BOND_NONE;
if (STREQ(tmp, "balance-rr")) {
_("unknown bonding mode %s"), tmp);
ret = -1;
}
- VIR_FREE(tmp);
return ret;
}
static int
virInterfaceDefParseBondMiiCarrier(xmlXPathContextPtr ctxt)
{
- char *tmp;
+ g_autofree char *tmp = virXPathString("string(./miimon/@carrier)", ctxt);
int ret = 0;
- tmp = virXPathString("string(./miimon/@carrier)", ctxt);
if (tmp == NULL)
return VIR_INTERFACE_BOND_MII_NONE;
if (STREQ(tmp, "ioctl")) {
_("unknown mii bonding carrier %s"), tmp);
ret = -1;
}
- VIR_FREE(tmp);
return ret;
}
static int
virInterfaceDefParseBondArpValid(xmlXPathContextPtr ctxt)
{
- char *tmp;
+ g_autofree char *tmp = virXPathString("string(./arpmon/@validate)", ctxt);
int ret = 0;
- tmp = virXPathString("string(./arpmon/@validate)", ctxt);
if (tmp == NULL)
return VIR_INTERFACE_BOND_ARP_NONE;
if (STREQ(tmp, "active")) {
_("unknown arp bonding validate %s"), tmp);
ret = -1;
}
- VIR_FREE(tmp);
return ret;
}
xmlNodePtr dhcp, xmlXPathContextPtr ctxt)
{
VIR_XPATH_NODE_AUTORESTORE(ctxt)
- char *tmp;
+ g_autofree char *tmp = NULL;
int ret = 0;
def->dhcp = 1;
} else {
def->peerdns = state ? 1 : 0;
}
- VIR_FREE(tmp);
}
return ret;
xmlXPathContextPtr ctxt)
{
xmlNodePtr dhcp;
- xmlNodePtr *ipNodes = NULL;
+ g_autofree xmlNodePtr *ipNodes = NULL;
int nipNodes, ret = -1;
size_t i;
char *tmp;
ret = 0;
error:
- VIR_FREE(ipNodes);
return ret;
}
xmlXPathContextPtr ctxt)
{
xmlNodePtr dhcp, autoconf;
- xmlNodePtr *ipNodes = NULL;
+ g_autofree xmlNodePtr *ipNodes = NULL;
int nipNodes, ret = -1;
size_t i;
char *tmp;
ret = 0;
error:
- VIR_FREE(ipNodes);
return ret;
}
xmlXPathContextPtr ctxt)
{
VIR_XPATH_NODE_AUTORESTORE(ctxt)
- xmlNodePtr *protoNodes = NULL;
+ g_autofree xmlNodePtr *protoNodes = NULL;
int nProtoNodes, pp, ret = -1;
char *tmp;
def->nprotos = 0;
for (pp = 0; pp < nProtoNodes; pp++) {
- virInterfaceProtocolDef *proto;
-
- proto = g_new0(virInterfaceProtocolDef, 1);
+ g_autoptr(virInterfaceProtocolDef) proto = g_new0(virInterfaceProtocolDef, 1);
ctxt->node = protoNodes[pp];
tmp = virXPathString("string(./@family)", ctxt);
if (tmp == NULL) {
virReportError(VIR_ERR_XML_ERROR,
"%s", _("protocol misses the family attribute"));
- virInterfaceProtocolDefFree(proto);
goto error;
}
proto->family = tmp;
if (STREQ(tmp, "ipv4")) {
- if (virInterfaceDefParseProtoIPv4(proto, ctxt) != 0) {
- virInterfaceProtocolDefFree(proto);
+ if (virInterfaceDefParseProtoIPv4(proto, ctxt) != 0)
goto error;
- }
} else if (STREQ(tmp, "ipv6")) {
- if (virInterfaceDefParseProtoIPv6(proto, ctxt) != 0) {
- virInterfaceProtocolDefFree(proto);
+ if (virInterfaceDefParseProtoIPv6(proto, ctxt) != 0)
goto error;
- }
} else {
virReportError(VIR_ERR_XML_ERROR,
_("unsupported protocol family '%s'"), tmp);
- virInterfaceProtocolDefFree(proto);
goto error;
}
- def->protos[def->nprotos++] = proto;
+ def->protos[def->nprotos++] = g_steal_pointer(&proto);
}
ret = 0;
error:
- VIR_FREE(protoNodes);
return ret;
}
virInterfaceDefParseBridge(virInterfaceDef *def,
xmlXPathContextPtr ctxt)
{
- xmlNodePtr *interfaces = NULL;
- xmlNodePtr bridge;
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
+ g_autofree xmlNodePtr *interfaces = NULL;
virInterfaceDef *itf;
- char *tmp = NULL;
+ g_autofree char *tmp = NULL;
int nbItf;
size_t i;
int ret = 0;
- bridge = ctxt->node;
def->data.bridge.stp = -1;
- if ((tmp = virXMLPropString(bridge, "stp"))) {
+ if ((tmp = virXMLPropString(ctxt->node, "stp"))) {
if (STREQ(tmp, "on")) {
def->data.bridge.stp = 1;
} else if (STREQ(tmp, "off")) {
goto error;
}
}
- def->data.bridge.delay = virXMLPropString(bridge, "delay");
+ def->data.bridge.delay = virXMLPropString(ctxt->node, "delay");
nbItf = virXPathNodeSet("./interface", ctxt, &interfaces);
if (nbItf < 0) {
}
error:
- VIR_FREE(tmp);
- VIR_FREE(interfaces);
- ctxt->node = bridge;
return ret;
}
virInterfaceDefParseBondItfs(virInterfaceDef *def,
xmlXPathContextPtr ctxt)
{
- xmlNodePtr *interfaces = NULL;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
+ g_autofree xmlNodePtr *interfaces = NULL;
virInterfaceDef *itf;
int nbItf;
size_t i;
ret = 0;
cleanup:
- VIR_FREE(interfaces);
return ret;
}
{
g_autoptr(virInterfaceDef) def = NULL;
int type;
- char *tmp;
+ g_autofree char *tmp = NULL;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
xmlNodePtr lnk;
if (type == -1) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown interface type %s"), tmp);
- VIR_FREE(tmp);
return NULL;
}
- VIR_FREE(tmp);
def = g_new0(virInterfaceDef, 1);