diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c index c6d36e0cb53873226398a23d7a6455a3ed5b98b4..1d02e231750884568b58a14d62caac72c10ad2d6 100644 --- a/src/conf/cpu_conf.c +++ b/src/conf/cpu_conf.c @@ -326,7 +326,7 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt, { virCPUDefPtr def = NULL; xmlNodePtr *nodes = NULL; - xmlNodePtr oldnode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int n; size_t i; char *cpuMode; @@ -662,7 +662,6 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt, ret = 0; cleanup: - ctxt->node = oldnode; VIR_FREE(fallback); VIR_FREE(vendor_id); VIR_FREE(nodes); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 1406cf079e6c85d7167c785b577aa19329f7b8e7..1cdc7971fca6f4befdb5e750f7e1a1fa59552eeb 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13265,16 +13265,14 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def, /* Check for an optional seclabel override in . */ if (chr_def) { - xmlNodePtr saved_node = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); ctxt->node = cur; if (virSecurityDeviceLabelDefParseXML(&def->seclabels, &def->nseclabels, ctxt, flags) < 0) { - ctxt->node = saved_node; goto error; } - ctxt->node = saved_node; } } else if (virXMLNodeNameEqual(cur, "log")) { if (logParsed) { @@ -22181,11 +22179,10 @@ virDomainDefParseXML(xmlDocPtr xml, } if ((node = virXPathNode("./sysinfo[1]", ctxt)) != NULL) { - xmlNodePtr oldnode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); ctxt->node = node; def->sysinfo = virSysinfoParseXML(node, ctxt, def->uuid, uuid_generated); - ctxt->node = oldnode; if (def->sysinfo == NULL) goto error; diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c index d1732621b5cff4f5ee850f0c321e344a9d0f7b43..be5e1133a2f42df36ca6da64a63cf6383df4b3a4 100644 --- a/src/conf/interface_conf.c +++ b/src/conf/interface_conf.c @@ -262,12 +262,11 @@ static int virInterfaceDefParseDhcp(virInterfaceProtocolDefPtr def, xmlNodePtr dhcp, xmlXPathContextPtr ctxt) { - xmlNodePtr save; + VIR_XPATH_NODE_AUTORESTORE(ctxt); char *tmp; int ret = 0; def->dhcp = 1; - save = ctxt->node; ctxt->node = dhcp; def->peerdns = -1; /* Not much to do in the current version */ @@ -284,7 +283,6 @@ virInterfaceDefParseDhcp(virInterfaceProtocolDefPtr def, VIR_FREE(tmp); } - ctxt->node = save; return ret; } @@ -426,13 +424,11 @@ static int virInterfaceDefParseIfAdressing(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) { - xmlNodePtr save; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr *protoNodes = NULL; int nProtoNodes, pp, ret = -1; char *tmp; - save = ctxt->node; - nProtoNodes = virXPathNodeSet("./protocol", ctxt, &protoNodes); if (nProtoNodes < 0) goto error; @@ -487,7 +483,6 @@ virInterfaceDefParseIfAdressing(virInterfaceDefPtr def, error: VIR_FREE(protoNodes); - ctxt->node = save; return ret; } @@ -558,7 +553,7 @@ virInterfaceDefParseBondItfs(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) { xmlNodePtr *interfaces = NULL; - xmlNodePtr bond = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); virInterfaceDefPtr itf; int nbItf; size_t i; @@ -591,7 +586,6 @@ virInterfaceDefParseBondItfs(virInterfaceDefPtr def, ret = 0; cleanup: VIR_FREE(interfaces); - ctxt->node = bond; return ret; } @@ -698,7 +692,7 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt, virInterfaceDefPtr def; int type; char *tmp; - xmlNodePtr cur = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr lnk; @@ -804,11 +798,9 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt, } - ctxt->node = cur; return def; error: - ctxt->node = cur; virInterfaceDefFree(def); return NULL; } diff --git a/src/conf/netdev_vlan_conf.c b/src/conf/netdev_vlan_conf.c index 516129280d936f9f2bc414ff2c8785dbb09007ae..7830a341b222a29cf28dab1b46e6975ddad39141 100644 --- a/src/conf/netdev_vlan_conf.c +++ b/src/conf/netdev_vlan_conf.c @@ -33,7 +33,7 @@ int virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virNetDevVlanPtr def) { int ret = -1; - xmlNodePtr save = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); char *trunk = NULL; char *nativeMode = NULL; xmlNodePtr *tagNodes = NULL; @@ -128,7 +128,6 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virNetDevVlanPtr de ret = 0; cleanup: - ctxt->node = save; VIR_FREE(tagNodes); VIR_FREE(trunk); VIR_FREE(nativeMode); diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index dc64ce6959382237d280cb4653eeb07708ed5571..f1d22b25b12b4e1504e3592747edd88b25d4e00f 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -800,7 +800,7 @@ virNetworkDNSSrvDefParseXML(const char *networkName, bool partialOkay) { int ret; - xmlNodePtr save_ctxt = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); ctxt->node = node; @@ -895,12 +895,10 @@ virNetworkDNSSrvDefParseXML(const char *networkName, goto error; } - ctxt->node = save_ctxt; return 0; error: virNetworkDNSSrvDefClear(def); - ctxt->node = save_ctxt; return -1; } @@ -961,7 +959,7 @@ virNetworkDNSDefParseXML(const char *networkName, int nhosts, nsrvs, ntxts, nfwds; size_t i; int ret = -1; - xmlNodePtr save = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); ctxt->node = node; @@ -1100,7 +1098,6 @@ virNetworkDNSDefParseXML(const char *networkName, VIR_FREE(hostNodes); VIR_FREE(srvNodes); VIR_FREE(txtNodes); - ctxt->node = save; return ret; } @@ -1116,7 +1113,7 @@ virNetworkIPDefParseXML(const char *networkName, * On failure clear it out, but don't free it. */ - xmlNodePtr save; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr dhcp; char *address = NULL, *netmask = NULL; unsigned long prefix = 0; @@ -1124,7 +1121,6 @@ virNetworkIPDefParseXML(const char *networkName, int result = -1; char *localPtr = NULL; - save = ctxt->node; ctxt->node = node; /* grab raw data from XML */ @@ -1256,7 +1252,6 @@ virNetworkIPDefParseXML(const char *networkName, VIR_FREE(netmask); VIR_FREE(localPtr); - ctxt->node = save; return result; } @@ -1291,7 +1286,7 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def, * On failure clear it out, but don't free it. */ - xmlNodePtr save; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr virtPortNode; xmlNodePtr vlanNode; xmlNodePtr bandwidth_node; @@ -1300,7 +1295,6 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def, int result = -1; - save = ctxt->node; ctxt->node = node; /* grab raw data from XML */ @@ -1348,7 +1342,6 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def, VIR_FREE(isDefault); VIR_FREE(trustGuestRxFilters); - ctxt->node = save; return result; } @@ -1365,7 +1358,7 @@ virNetworkForwardNatDefParseXML(const char *networkName, int nNatAddrs, nNatPorts; char *addrStart = NULL; char *addrEnd = NULL; - xmlNodePtr save = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); ctxt->node = node; @@ -1477,7 +1470,6 @@ virNetworkForwardNatDefParseXML(const char *networkName, VIR_FREE(addrEnd); VIR_FREE(natAddrNodes); VIR_FREE(natPortNodes); - ctxt->node = save; return ret; } @@ -1499,7 +1491,7 @@ virNetworkForwardDefParseXML(const char *networkName, char *forwardManaged = NULL; char *forwardDriverName = NULL; char *type = NULL; - xmlNodePtr save = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); ctxt->node = node; @@ -1726,7 +1718,6 @@ virNetworkForwardDefParseXML(const char *networkName, VIR_FREE(forwardIfNodes); VIR_FREE(forwardAddrNodes); VIR_FREE(forwardNatNodes); - ctxt->node = save; return ret; } @@ -1747,7 +1738,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, xmlNodePtr forwardNode = NULL; char *ipv6nogwStr = NULL; char *trustGuestRxFilters = NULL; - xmlNodePtr save = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr bandwidthNode = NULL; xmlNodePtr vlanNode; xmlNodePtr metadataNode = NULL; @@ -2164,7 +2155,6 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, goto error; } - ctxt->node = save; return def; error: @@ -2176,7 +2166,6 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, VIR_FREE(portGroupNodes); VIR_FREE(ipv6nogwStr); VIR_FREE(trustGuestRxFilters); - ctxt->node = save; return NULL; } diff --git a/src/conf/networkcommon_conf.c b/src/conf/networkcommon_conf.c index e90cfcbef5ac055945fc2adb84f39f738ffb1478..a4f9ce5c6241ff1624c874fc60aa6d0677184db2 100644 --- a/src/conf/networkcommon_conf.c +++ b/src/conf/networkcommon_conf.c @@ -228,7 +228,7 @@ virNetDevIPRouteParseXML(const char *errorDetail, */ virNetDevIPRoutePtr def = NULL; - xmlNodePtr save; + VIR_XPATH_NODE_AUTORESTORE(ctxt); char *family = NULL; char *address = NULL, *netmask = NULL; char *gateway = NULL; @@ -237,7 +237,6 @@ virNetDevIPRouteParseXML(const char *errorDetail, bool hasPrefix = false; bool hasMetric = false; - save = ctxt->node; ctxt->node = node; /* grab raw data from XML */ @@ -278,7 +277,6 @@ virNetDevIPRouteParseXML(const char *errorDetail, hasMetric); cleanup: - ctxt->node = save; VIR_FREE(family); VIR_FREE(address); VIR_FREE(netmask); diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 4cf5b6e3d718d70d2b7474d83e62a8ddb8b850d6..bccdbd0af82c600769bf5c0c2e1985102208b258 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -703,11 +703,10 @@ virNodeDevCapDRMParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapDRMPtr drm) { - xmlNodePtr orignode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1, val; char *type = NULL; - orignode = ctxt->node; ctxt->node = node; type = virXPathString("string(./type[1])", ctxt); @@ -723,7 +722,6 @@ virNodeDevCapDRMParseXML(xmlXPathContextPtr ctxt, out: VIR_FREE(type); - ctxt->node = orignode; return ret; } @@ -734,11 +732,10 @@ virNodeDevCapCCWParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapCCWPtr ccw_dev) { - xmlNodePtr orignode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; char *cssid = NULL, *ssid = NULL, *devno = NULL; - orignode = ctxt->node; ctxt->node = node; if (!(cssid = virXPathString("string(./cssid[1])", ctxt))) { @@ -783,7 +780,6 @@ virNodeDevCapCCWParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; VIR_FREE(cssid); VIR_FREE(ssid); VIR_FREE(devno); @@ -797,12 +793,12 @@ virNodeDevCapStorageParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapStoragePtr storage) { - xmlNodePtr orignode, *nodes = NULL; + VIR_XPATH_NODE_AUTORESTORE(ctxt); + xmlNodePtr *nodes = NULL; size_t i; int n, ret = -1; unsigned long long val; - orignode = ctxt->node; ctxt->node = node; storage->block = virXPathString("string(./block[1])", ctxt); @@ -851,7 +847,6 @@ virNodeDevCapStorageParseXML(xmlXPathContextPtr ctxt, if (virNodeDevCapsDefParseULongLong("number(./media_size[1])", ctxt, &val, def, _("no removable media size supplied for '%s'"), _("invalid removable media size supplied for '%s'")) < 0) { - ctxt->node = orignode2; VIR_FREE(type); goto out; } @@ -881,7 +876,6 @@ virNodeDevCapStorageParseXML(xmlXPathContextPtr ctxt, ret = 0; out: VIR_FREE(nodes); - ctxt->node = orignode; return ret; } @@ -892,10 +886,9 @@ virNodeDevCapSCSIParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapSCSIPtr scsi) { - xmlNodePtr orignode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; - orignode = ctxt->node; ctxt->node = node; if (virNodeDevCapsDefParseULong("number(./host[1])", ctxt, @@ -926,7 +919,6 @@ virNodeDevCapSCSIParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; return ret; } @@ -937,12 +929,12 @@ virNodeDevCapSCSITargetParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapSCSITargetPtr scsi_target) { - xmlNodePtr orignode, *nodes = NULL; + VIR_XPATH_NODE_AUTORESTORE(ctxt); + xmlNodePtr *nodes = NULL; int ret = -1, n = 0; size_t i; char *type = NULL; - orignode = ctxt->node; ctxt->node = node; scsi_target->name = virXPathString("string(./target[1])", ctxt); @@ -967,11 +959,8 @@ virNodeDevCapSCSITargetParseXML(xmlXPathContextPtr ctxt, } if (STREQ(type, "fc_remote_port")) { - xmlNodePtr orignode2; - scsi_target->flags |= VIR_NODE_DEV_CAP_FLAG_FC_RPORT; - orignode2 = ctxt->node; ctxt->node = nodes[i]; if (virNodeDevCapsDefParseString("string(./rport[1])", @@ -989,8 +978,6 @@ virNodeDevCapSCSITargetParseXML(xmlXPathContextPtr ctxt, def->name); goto out; } - - ctxt->node = orignode2; } else { virReportError(VIR_ERR_INTERNAL_ERROR, _("unknown SCSI target capability type '%s' for '%s'"), @@ -1004,7 +991,6 @@ virNodeDevCapSCSITargetParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; VIR_FREE(type); VIR_FREE(nodes); return ret; @@ -1019,12 +1005,12 @@ virNodeDevCapSCSIHostParseXML(xmlXPathContextPtr ctxt, int create, const char *virt_type) { - xmlNodePtr orignode, *nodes = NULL; + VIR_XPATH_NODE_AUTORESTORE(ctxt); + xmlNodePtr *nodes = NULL; int ret = -1, n = 0; size_t i; char *type = NULL; - orignode = ctxt->node; ctxt->node = node; if (create == EXISTING_DEVICE) { @@ -1061,12 +1047,8 @@ virNodeDevCapSCSIHostParseXML(xmlXPathContextPtr ctxt, scsi_host->flags |= VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS; } else if (STREQ(type, "fc_host")) { - - xmlNodePtr orignode2; - scsi_host->flags |= VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST; - orignode2 = ctxt->node; ctxt->node = nodes[i]; if (virNodeDevCapsDefParseString("string(./wwnn[1])", @@ -1098,8 +1080,6 @@ virNodeDevCapSCSIHostParseXML(xmlXPathContextPtr ctxt, &scsi_host->fabric_wwn) < 0) VIR_DEBUG("No fabric_wwn defined for '%s'", def->name); - ctxt->node = orignode2; - } else { virReportError(VIR_ERR_INTERNAL_ERROR, _("unknown SCSI host capability type '%s' for '%s'"), @@ -1114,7 +1094,6 @@ virNodeDevCapSCSIHostParseXML(xmlXPathContextPtr ctxt, out: VIR_FREE(type); - ctxt->node = orignode; VIR_FREE(nodes); return ret; } @@ -1126,13 +1105,13 @@ virNodeDevCapNetParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapNetPtr net) { - xmlNodePtr orignode, lnk; + VIR_XPATH_NODE_AUTORESTORE(ctxt); + xmlNodePtr lnk; size_t i = -1; int ret = -1, n = -1; char *tmp = NULL; xmlNodePtr *nodes = NULL; - orignode = ctxt->node; ctxt->node = node; net->ifname = virXPathString("string(./interface[1])", ctxt); @@ -1192,7 +1171,6 @@ virNodeDevCapNetParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; VIR_FREE(nodes); VIR_FREE(tmp); return ret; @@ -1205,10 +1183,9 @@ virNodeDevCapUSBInterfaceParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapUSBIfPtr usb_if) { - xmlNodePtr orignode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; - orignode = ctxt->node; ctxt->node = node; if (virNodeDevCapsDefParseULong("number(./number[1])", ctxt, @@ -1239,7 +1216,6 @@ virNodeDevCapUSBInterfaceParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; return ret; } @@ -1274,10 +1250,9 @@ virNodeDevCapUSBDevParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapUSBDevPtr usb_dev) { - xmlNodePtr orignode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; - orignode = ctxt->node; ctxt->node = node; if (virNodeDevCapsDefParseULong("number(./bus[1])", ctxt, @@ -1309,7 +1284,6 @@ virNodeDevCapUSBDevParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; return ret; } @@ -1319,7 +1293,7 @@ virNodeDevCapPCIDevIommuGroupParseXML(xmlXPathContextPtr ctxt, xmlNodePtr iommuGroupNode, virNodeDevCapPCIDevPtr pci_dev) { - xmlNodePtr origNode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr *addrNodes = NULL; char *numberStr = NULL; int nAddrNodes, ret = -1; @@ -1363,7 +1337,6 @@ virNodeDevCapPCIDevIommuGroupParseXML(xmlXPathContextPtr ctxt, ret = 0; cleanup: - ctxt->node = origNode; VIR_FREE(numberStr); VIR_FREE(addrNodes); VIR_FREE(pciAddr); @@ -1376,7 +1349,7 @@ virPCIEDeviceInfoLinkParseXML(xmlXPathContextPtr ctxt, xmlNodePtr linkNode, virPCIELinkPtr lnk) { - xmlNodePtr origNode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1, speed; char *speedStr = NULL, *portStr = NULL; @@ -1413,7 +1386,6 @@ virPCIEDeviceInfoLinkParseXML(xmlXPathContextPtr ctxt, cleanup: VIR_FREE(portStr); VIR_FREE(speedStr); - ctxt->node = origNode; return ret; } @@ -1423,7 +1395,8 @@ virPCIEDeviceInfoParseXML(xmlXPathContextPtr ctxt, xmlNodePtr pciExpressNode, virPCIEDeviceInfoPtr pci_express) { - xmlNodePtr lnk, origNode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); + xmlNodePtr lnk; int ret = -1; ctxt->node = pciExpressNode; @@ -1448,7 +1421,6 @@ virPCIEDeviceInfoParseXML(xmlXPathContextPtr ctxt, ret = 0; cleanup: - ctxt->node = origNode; return ret; } @@ -1595,7 +1567,7 @@ virNodeDevPCICapabilityParseXML(xmlXPathContextPtr ctxt, virNodeDevCapPCIDevPtr pci_dev) { char *type = virXMLPropString(node, "type"); - xmlNodePtr orignode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; ctxt->node = node; @@ -1624,7 +1596,6 @@ virNodeDevPCICapabilityParseXML(xmlXPathContextPtr ctxt, ret = 0; cleanup: VIR_FREE(type); - ctxt->node = orignode; return ret; } @@ -1635,7 +1606,9 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapPCIDevPtr pci_dev) { - xmlNodePtr orignode, iommuGroupNode, pciExpress; + VIR_XPATH_NODE_AUTORESTORE(ctxt); + xmlNodePtr iommuGroupNode; + xmlNodePtr pciExpress; xmlNodePtr *nodes = NULL; int n = 0; int ret = -1; @@ -1643,7 +1616,6 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, char *tmp = NULL; size_t i = 0; - orignode = ctxt->node; ctxt->node = node; if ((tmp = virXPathString("string(./class[1])", ctxt))) { @@ -1737,7 +1709,6 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, VIR_FREE(nodes); VIR_FREE(tmp); virPCIEDeviceInfoFree(pci_express); - ctxt->node = orignode; return ret; } @@ -1750,11 +1721,10 @@ virNodeDevCapSystemParseXML(xmlXPathContextPtr ctxt, { virNodeDevCapSystemHardwarePtr hardware = &syscap->hardware; virNodeDevCapSystemFirmwarePtr firmware = &syscap->firmware; - xmlNodePtr orignode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; char *tmp; - orignode = ctxt->node; ctxt->node = node; syscap->product_name = virXPathString("string(./product[1])", ctxt); @@ -1784,7 +1754,6 @@ virNodeDevCapSystemParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; return ret; } @@ -1795,10 +1764,9 @@ virNodeDevCapMdevParseXML(xmlXPathContextPtr ctxt, xmlNodePtr node, virNodeDevCapMdevPtr mdev) { - xmlNodePtr orignode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; - orignode = ctxt->node; ctxt->node = node; if (!(mdev->type = virXPathString("string(./type[1]/@id)", ctxt))) { @@ -1817,7 +1785,6 @@ virNodeDevCapMdevParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - ctxt->node = orignode; return ret; } diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c index 6f1257fd8eb9f22fed304c84ed4167b8b225ac5c..09811cb51bd22c7c3ca481236d250d70640116f1 100644 --- a/src/conf/numa_conf.c +++ b/src/conf/numa_conf.c @@ -846,7 +846,7 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def, xmlXPathContextPtr ctxt) { xmlNodePtr *nodes = NULL; - xmlNodePtr oldNode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); char *tmp = NULL; int n; size_t i, j; @@ -963,7 +963,6 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def, ret = 0; cleanup: - ctxt->node = oldNode; VIR_FREE(nodes); VIR_FREE(tmp); return ret; diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index 98c296b2764454e30bac1921533a0981ab49d7ae..857d04c476a90535401dc7d5371f49f9a79cfac1 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -144,7 +144,7 @@ virDomainSnapshotDiskDefParseXML(xmlNodePtr node, char *type = NULL; char *driver = NULL; xmlNodePtr cur; - xmlNodePtr saved = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); ctxt->node = node; @@ -205,7 +205,6 @@ virDomainSnapshotDiskDefParseXML(xmlNodePtr node, ret = 0; cleanup: - ctxt->node = saved; VIR_FREE(driver); VIR_FREE(snapshot); diff --git a/src/conf/storage_adapter_conf.c b/src/conf/storage_adapter_conf.c index 18bcb5eb9e845f68559303d2f629a8878e5fb65b..015e572630e2d7b7fb9a45d577e26bd709e91894 100644 --- a/src/conf/storage_adapter_conf.c +++ b/src/conf/storage_adapter_conf.c @@ -178,7 +178,7 @@ virStorageAdapterParseXML(virStorageAdapterPtr adapter, xmlXPathContextPtr ctxt) { int ret = -1; - xmlNodePtr relnode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); char *adapter_type = NULL; ctxt->node = node; @@ -208,7 +208,6 @@ virStorageAdapterParseXML(virStorageAdapterPtr adapter, ret = 0; cleanup: - ctxt->node = relnode; VIR_FREE(adapter_type); return ret; } diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 626ddd952802fab714aebc85a57349059802624f..5669b92f8ddd5102e7edbc3484653d435658ac10 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -727,7 +727,7 @@ virStorageDefParsePerms(xmlXPathContextPtr ctxt, { long long val; int ret = -1; - xmlNodePtr relnode; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr node; g_autofree char *mode = NULL; @@ -741,7 +741,6 @@ virStorageDefParsePerms(xmlXPathContextPtr ctxt, return 0; } - relnode = ctxt->node; ctxt->node = node; if ((mode = virXPathString("string(./mode)", ctxt))) { @@ -791,7 +790,6 @@ virStorageDefParsePerms(xmlXPathContextPtr ctxt, ret = 0; error: - ctxt->node = relnode; return ret; } diff --git a/src/conf/virsavecookie.c b/src/conf/virsavecookie.c index bdc22bb3245021d351a3e0d563ed1aa9e26abcd7..7fc951afe26991675cc9f035ecff0fbe6a36c0df 100644 --- a/src/conf/virsavecookie.c +++ b/src/conf/virsavecookie.c @@ -57,7 +57,7 @@ virSaveCookieParse(xmlXPathContextPtr ctxt, virObjectPtr *obj, virSaveCookieCallbacksPtr saveCookie) { - xmlNodePtr node = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int ret = -1; *obj = NULL; @@ -70,7 +70,6 @@ virSaveCookieParse(xmlXPathContextPtr ctxt, ret = virSaveCookieParseNode(ctxt, obj, saveCookie); cleanup: - ctxt->node = node; return ret; } diff --git a/src/cpu/cpu_map.c b/src/cpu/cpu_map.c index dffb6ea7e8d0cb617e30aadd15cbb12991054533..4465ebfa7ba58b418d78a094de49882b2daff1b2 100644 --- a/src/cpu/cpu_map.c +++ b/src/cpu/cpu_map.c @@ -40,14 +40,12 @@ loadData(const char *mapfile, void *data) { int ret = -1; - xmlNodePtr ctxt_node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr *nodes = NULL; int n; size_t i; int rv; - ctxt_node = ctxt->node; - if ((n = virXPathNodeSet(element, ctxt, &nodes)) < 0) goto cleanup; @@ -58,7 +56,6 @@ loadData(const char *mapfile, } for (i = 0; i < n; i++) { - xmlNodePtr old = ctxt->node; char *name = virXMLPropString(nodes[i], "name"); if (!name) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -68,7 +65,6 @@ loadData(const char *mapfile, VIR_DEBUG("Load %s name %s", element, name); ctxt->node = nodes[i]; rv = callback(ctxt, name, data); - ctxt->node = old; VIR_FREE(name); if (rv < 0) goto cleanup; @@ -77,7 +73,6 @@ loadData(const char *mapfile, ret = 0; cleanup: - ctxt->node = ctxt_node; VIR_FREE(nodes); return ret; @@ -135,13 +130,11 @@ loadIncludes(xmlXPathContextPtr ctxt, void *data) { int ret = -1; - xmlNodePtr ctxt_node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr *nodes = NULL; int n; size_t i; - ctxt_node = ctxt->node; - n = virXPathNodeSet("include", ctxt, &nodes); if (n < 0) goto cleanup; @@ -164,7 +157,6 @@ loadIncludes(xmlXPathContextPtr ctxt, ret = 0; cleanup: - ctxt->node = ctxt_node; VIR_FREE(nodes); return ret; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index e3c553e943c9417866a938bdb0909834a73fb825..bf26cf4e766d79ee954f98abdba8b07506fcd2d4 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -1486,7 +1486,7 @@ x86ModelParseSignatures(virCPUx86ModelPtr model, xmlXPathContextPtr ctxt) { g_autofree xmlNodePtr *nodes = NULL; - xmlNodePtr root = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); size_t i; int n; @@ -1527,7 +1527,6 @@ x86ModelParseSignatures(virCPUx86ModelPtr model, return -1; } - ctxt->node = root; return 0; } diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index bf82844fd294f554e7c113622c54064cc22d4972..d75942667cc28b63cef9c2d2d5cf7a19738d79d0 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -207,12 +207,11 @@ lxcDomainDefNamespaceParse(xmlXPathContextPtr ctxt, lxcDomainDefPtr lxcDef = g_new0(lxcDomainDef, 1); g_autofree xmlNodePtr *nodes = NULL; bool uses_lxc_ns = false; - xmlNodePtr node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); int feature; int n; size_t i; - node = ctxt->node; if ((n = virXPathNodeSet("./lxc:namespace/*", ctxt, &nodes)) < 0) goto error; uses_lxc_ns |= n > 0; @@ -249,7 +248,6 @@ lxcDomainDefNamespaceParse(xmlXPathContextPtr ctxt, goto error; } } - ctxt->node = node; if (uses_lxc_ns) *data = lxcDef; else diff --git a/src/util/virstorageencryption.c b/src/util/virstorageencryption.c index 6765fdc23ab73b73b7752f4edd3447082261de14..34c356b5a3b07fd2bd220ab1b7421f26f295e43c 100644 --- a/src/util/virstorageencryption.c +++ b/src/util/virstorageencryption.c @@ -143,7 +143,7 @@ static virStorageEncryptionSecretPtr virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, xmlNodePtr node) { - xmlNodePtr old_node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); virStorageEncryptionSecretPtr ret; char *type_str = NULL; char *uuidstr = NULL; @@ -152,7 +152,6 @@ virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, if (VIR_ALLOC(ret) < 0) return NULL; - old_node = ctxt->node; ctxt->node = node; if (!(type_str = virXPathString("string(./@type)", ctxt))) { @@ -173,7 +172,6 @@ virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, VIR_FREE(type_str); - ctxt->node = old_node; return ret; cleanup: @@ -181,7 +179,6 @@ virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, virStorageEncryptionSecretFree(ret); VIR_FREE(uuidstr); VIR_FREE(usagestr); - ctxt->node = old_node; return NULL; } @@ -244,7 +241,7 @@ virStorageEncryptionPtr virStorageEncryptionParseNode(xmlNodePtr node, xmlXPathContextPtr ctxt) { - xmlNodePtr saveNode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); xmlNodePtr *nodes = NULL; virStorageEncryptionPtr encdef = NULL; virStorageEncryptionPtr ret = NULL; @@ -313,7 +310,6 @@ virStorageEncryptionParseNode(xmlNodePtr node, VIR_FREE(format_str); VIR_FREE(nodes); virStorageEncryptionFree(encdef); - ctxt->node = saveNode; return ret; } diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 535a94e2398fdab71ad9927802a4de02f6a799de..a6357abb08e00de54966d8b810b89d7d562dd0bd 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -1781,7 +1781,7 @@ virStorageAuthDefPtr virStorageAuthDefParse(xmlNodePtr node, xmlXPathContextPtr ctxt) { - xmlNodePtr saveNode = ctxt->node; + VIR_XPATH_NODE_AUTORESTORE(ctxt); virStorageAuthDefPtr ret = NULL; xmlNodePtr secretnode = NULL; g_autoptr(virStorageAuthDef) authdef = NULL; @@ -1832,7 +1832,6 @@ virStorageAuthDefParse(xmlNodePtr node, ret = g_steal_pointer(&authdef); cleanup: - ctxt->node = saveNode; return ret; } diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 61cd72f714760a6f0a79af3642c2665901050b6c..52229495661606e87c329e67dc34a2367309b3f2 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -6818,7 +6818,6 @@ virshDomainGetVcpuBitmap(vshControl *ctl, xmlDocPtr xml = NULL; xmlXPathContextPtr ctxt = NULL; xmlNodePtr *nodes = NULL; - xmlNodePtr old; int nnodes; size_t i; unsigned int curvcpus = 0; @@ -6853,8 +6852,6 @@ virshDomainGetVcpuBitmap(vshControl *ctl, goto cleanup; } - old = ctxt->node; - for (i = 0; i < nnodes; i++) { ctxt->node = nodes[i]; @@ -6868,8 +6865,6 @@ virshDomainGetVcpuBitmap(vshControl *ctl, VIR_FREE(online); } - ctxt->node = old; - if (virBitmapCountBits(ret) != curvcpus) { vshError(ctl, "%s", _("Failed to retrieve vcpu state bitmap")); virBitmapFree(ret);