This patch merges all exit paths in the remote driver APIs so we more or
less always have a single exit path in every method. NB we don't quite
follow the HACKING guideline of naming cleanup paths 'cleanup', since
we will need two possible cleanup points in some methods. So I've got a
slightly different pattern
cleanup:
....release data we allocated, typically free'ing the XDR object
done:
return ret;
}
In the next patch, the 'done' label will also unlock the driver.
diff --git a/src/remote_internal.c b/src/remote_internal.c
--- a/src/remote_internal.c
+++ b/src/remote_internal.c
@@ -1253,12 +1253,16 @@ static int
static int
remoteSupportsFeature (virConnectPtr conn, int feature)
{
+ int rv = -1;
remote_supports_feature_args args;
remote_supports_feature_ret ret;
struct private_data *priv = conn->privateData;
/* VIR_DRV_FEATURE_REMOTE* features are handled directly. */
- if (feature == VIR_DRV_FEATURE_REMOTE) return 1;
+ if (feature == VIR_DRV_FEATURE_REMOTE) {
+ rv = 1;
+ goto done;
+ }
args.feature = feature;
@@ -1266,9 +1270,12 @@ remoteSupportsFeature (virConnectPtr con
if (call (conn, priv, 0, REMOTE_PROC_SUPPORTS_FEATURE,
(xdrproc_t) xdr_remote_supports_feature_args, (char *) &args,
(xdrproc_t) xdr_remote_supports_feature_ret, (char *) &ret) == -1)
- return -1;
-
- return ret.supported;
+ goto done;
+
+ rv = ret.supported;
+
+done:
+ return rv;
}
/* Unfortunately this function is defined to return a static string.
@@ -1282,25 +1289,33 @@ static const char *
static const char *
remoteType (virConnectPtr conn)
{
+ char *rv = NULL;
remote_get_type_ret ret;
struct private_data *priv = conn->privateData;
/* Cached? */
- if (priv->type) return priv->type;
+ if (priv->type) {
+ rv = priv->type;
+ goto done;
+ }
memset (&ret, 0, sizeof ret);
if (call (conn, priv, 0, REMOTE_PROC_GET_TYPE,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_get_type_ret, (char *) &ret) == -1)
- return NULL;
+ goto done;
/* Stash. */
- return priv->type = ret.type;
+ rv = priv->type = ret.type;
+
+done:
+ return rv;
}
static int
remoteGetVersion (virConnectPtr conn, unsigned long *hvVer)
{
+ int rv = -1;
remote_get_version_ret ret;
struct private_data *priv = conn->privateData;
@@ -1308,15 +1323,19 @@ remoteGetVersion (virConnectPtr conn, un
if (call (conn, priv, 0, REMOTE_PROC_GET_VERSION,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_get_version_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (hvVer) *hvVer = ret.hv_ver;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static char *
remoteGetHostname (virConnectPtr conn)
{
+ char *rv = NULL;
remote_get_hostname_ret ret;
struct private_data *priv = conn->privateData;
@@ -1324,15 +1343,19 @@ remoteGetHostname (virConnectPtr conn)
if (call (conn, priv, 0, REMOTE_PROC_GET_HOSTNAME,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_get_hostname_ret, (char *) &ret) == -1)
- return NULL;
+ goto done;
/* Caller frees this. */
- return ret.hostname;
+ rv = ret.hostname;
+
+done:
+ return rv;
}
static int
remoteGetMaxVcpus (virConnectPtr conn, const char *type)
{
+ int rv = -1;
remote_get_max_vcpus_args args;
remote_get_max_vcpus_ret ret;
struct private_data *priv = conn->privateData;
@@ -1342,14 +1365,18 @@ remoteGetMaxVcpus (virConnectPtr conn, c
if (call (conn, priv, 0, REMOTE_PROC_GET_MAX_VCPUS,
(xdrproc_t) xdr_remote_get_max_vcpus_args, (char *) &args,
(xdrproc_t) xdr_remote_get_max_vcpus_ret, (char *) &ret) == -1)
- return -1;
-
- return ret.max_vcpus;
+ goto done;
+
+ rv = ret.max_vcpus;
+
+done:
+ return rv;
}
static int
remoteNodeGetInfo (virConnectPtr conn, virNodeInfoPtr info)
{
+ int rv = -1;
remote_node_get_info_ret ret;
struct private_data *priv = conn->privateData;
@@ -1357,7 +1384,7 @@ remoteNodeGetInfo (virConnectPtr conn, v
if (call (conn, priv, 0, REMOTE_PROC_NODE_GET_INFO,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_node_get_info_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
strncpy (info->model, ret.model, 32);
info->model[31] = '\0';
@@ -1368,12 +1395,16 @@ remoteNodeGetInfo (virConnectPtr conn, v
info->sockets = ret.sockets;
info->cores = ret.cores;
info->threads = ret.threads;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static char *
remoteGetCapabilities (virConnectPtr conn)
{
+ char *rv = NULL;
remote_get_capabilities_ret ret;
struct private_data *priv = conn->privateData;
@@ -1381,10 +1412,13 @@ remoteGetCapabilities (virConnectPtr con
if (call (conn, priv, 0, REMOTE_PROC_GET_CAPABILITIES,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_get_capabilities_ret, (char *)&ret) == -1)
- return NULL;
+ goto done;
/* Caller frees this. */
- return ret.capabilities;
+ rv = ret.capabilities;
+
+done:
+ return rv;
}
static int
@@ -1393,6 +1427,7 @@ remoteNodeGetCellsFreeMemory(virConnectP
int startCell,
int maxCells)
{
+ int rv = -1;
remote_node_get_cells_free_memory_args args;
remote_node_get_cells_free_memory_ret ret;
int i;
@@ -1403,7 +1438,7 @@ remoteNodeGetCellsFreeMemory(virConnectP
_("too many NUMA cells: %d > %d"),
maxCells,
REMOTE_NODE_MAX_CELLS);
- return -1;
+ goto done;
}
args.startCell = startCell;
@@ -1413,19 +1448,23 @@ remoteNodeGetCellsFreeMemory(virConnectP
if (call (conn, priv, 0, REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY,
(xdrproc_t) xdr_remote_node_get_cells_free_memory_args, (char *)&args,
(xdrproc_t) xdr_remote_node_get_cells_free_memory_ret, (char *)&ret) ==
-1)
- return -1;
+ goto done;
for (i = 0 ; i < ret.freeMems.freeMems_len ; i++)
freeMems[i] = ret.freeMems.freeMems_val[i];
xdr_free((xdrproc_t) xdr_remote_node_get_cells_free_memory_ret, (char *) &ret);
- return ret.freeMems.freeMems_len;
+ rv = ret.freeMems.freeMems_len;
+
+done:
+ return rv;
}
static unsigned long long
remoteNodeGetFreeMemory (virConnectPtr conn)
{
+ unsigned long long rv = 0; /* 0 is error value this special function*/
remote_node_get_free_memory_ret ret;
struct private_data *priv = conn->privateData;
@@ -1433,15 +1472,19 @@ remoteNodeGetFreeMemory (virConnectPtr c
if (call (conn, priv, 0, REMOTE_PROC_NODE_GET_FREE_MEMORY,
(xdrproc_t) xdr_void, NULL,
(xdrproc_t) xdr_remote_node_get_free_memory_ret, (char *)&ret) == -1)
- return 0;
-
- return ret.freeMem;
+ goto done;
+
+ rv = ret.freeMem;
+
+done:
+ return rv;
}
static int
remoteListDomains (virConnectPtr conn, int *ids, int maxids)
{
+ int rv = -1;
int i;
remote_list_domains_args args;
remote_list_domains_ret ret;
@@ -1451,7 +1494,7 @@ remoteListDomains (virConnectPtr conn, i
errorf (conn, VIR_ERR_RPC,
_("too many remote domain IDs: %d > %d"),
maxids, REMOTE_DOMAIN_ID_LIST_MAX);
- return -1;
+ goto done;
}
args.maxids = maxids;
@@ -1459,27 +1502,31 @@ remoteListDomains (virConnectPtr conn, i
if (call (conn, priv, 0, REMOTE_PROC_LIST_DOMAINS,
(xdrproc_t) xdr_remote_list_domains_args, (char *) &args,
(xdrproc_t) xdr_remote_list_domains_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.ids.ids_len > maxids) {
errorf (conn, VIR_ERR_RPC,
_("too many remote domain IDs: %d > %d"),
ret.ids.ids_len, maxids);
- xdr_free ((xdrproc_t) xdr_remote_list_domains_ret, (char *) &ret);
- return -1;
+ goto cleanup;
}
for (i = 0; i < ret.ids.ids_len; ++i)
ids[i] = ret.ids.ids_val[i];
+ rv = ret.ids.ids_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_list_domains_ret, (char *) &ret);
- return ret.ids.ids_len;
+done:
+ return rv;
}
static int
remoteNumOfDomains (virConnectPtr conn)
{
+ int rv = -1;
remote_num_of_domains_ret ret;
struct private_data *priv = conn->privateData;
@@ -1487,9 +1534,12 @@ remoteNumOfDomains (virConnectPtr conn)
if (call (conn, priv, 0, REMOTE_PROC_NUM_OF_DOMAINS,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_num_of_domains_ret, (char *) &ret) == -1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static virDomainPtr
@@ -1497,7 +1547,7 @@ remoteDomainCreateXML (virConnectPtr con
const char *xmlDesc,
unsigned int flags)
{
- virDomainPtr dom;
+ virDomainPtr dom = NULL;
remote_domain_create_xml_args args;
remote_domain_create_xml_ret ret;
struct private_data *priv = conn->privateData;
@@ -1509,18 +1559,19 @@ remoteDomainCreateXML (virConnectPtr con
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_CREATE_XML,
(xdrproc_t) xdr_remote_domain_create_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_create_xml_ret, (char *) &ret) == -1)
- return NULL;
+ goto done;
dom = get_nonnull_domain (conn, ret.dom);
xdr_free ((xdrproc_t) &xdr_remote_domain_create_xml_ret, (char *) &ret);
+done:
return dom;
}
static virDomainPtr
remoteDomainLookupByID (virConnectPtr conn, int id)
{
- virDomainPtr dom;
+ virDomainPtr dom = NULL;
remote_domain_lookup_by_id_args args;
remote_domain_lookup_by_id_ret ret;
struct private_data *priv = conn->privateData;
@@ -1531,18 +1582,19 @@ remoteDomainLookupByID (virConnectPtr co
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_ID,
(xdrproc_t) xdr_remote_domain_lookup_by_id_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_lookup_by_id_ret, (char *) &ret) == -1)
- return NULL;
+ goto done;
dom = get_nonnull_domain (conn, ret.dom);
xdr_free ((xdrproc_t) &xdr_remote_domain_lookup_by_id_ret, (char *) &ret);
+done:
return dom;
}
static virDomainPtr
remoteDomainLookupByUUID (virConnectPtr conn, const unsigned char *uuid)
{
- virDomainPtr dom;
+ virDomainPtr dom = NULL;
remote_domain_lookup_by_uuid_args args;
remote_domain_lookup_by_uuid_ret ret;
struct private_data *priv = conn->privateData;
@@ -1553,17 +1605,19 @@ remoteDomainLookupByUUID (virConnectPtr
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID,
(xdrproc_t) xdr_remote_domain_lookup_by_uuid_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_lookup_by_uuid_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
dom = get_nonnull_domain (conn, ret.dom);
xdr_free ((xdrproc_t) &xdr_remote_domain_lookup_by_uuid_ret, (char *) &ret);
+
+done:
return dom;
}
static virDomainPtr
remoteDomainLookupByName (virConnectPtr conn, const char *name)
{
- virDomainPtr dom;
+ virDomainPtr dom = NULL;
remote_domain_lookup_by_name_args args;
remote_domain_lookup_by_name_ret ret;
struct private_data *priv = conn->privateData;
@@ -1574,17 +1628,19 @@ remoteDomainLookupByName (virConnectPtr
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_NAME,
(xdrproc_t) xdr_remote_domain_lookup_by_name_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_lookup_by_name_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
dom = get_nonnull_domain (conn, ret.dom);
xdr_free ((xdrproc_t) &xdr_remote_domain_lookup_by_name_ret, (char *) &ret);
+done:
return dom;
}
static int
remoteDomainSuspend (virDomainPtr domain)
{
+ int rv = -1;
remote_domain_suspend_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1593,14 +1649,18 @@ remoteDomainSuspend (virDomainPtr domain
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SUSPEND,
(xdrproc_t) xdr_remote_domain_suspend_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainResume (virDomainPtr domain)
{
+ int rv = -1;
remote_domain_resume_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1609,14 +1669,18 @@ remoteDomainResume (virDomainPtr domain)
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_RESUME,
(xdrproc_t) xdr_remote_domain_resume_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainShutdown (virDomainPtr domain)
{
+ int rv = -1;
remote_domain_shutdown_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1625,14 +1689,18 @@ remoteDomainShutdown (virDomainPtr domai
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SHUTDOWN,
(xdrproc_t) xdr_remote_domain_shutdown_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainReboot (virDomainPtr domain, unsigned int flags)
{
+ int rv = -1;
remote_domain_reboot_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1642,14 +1710,18 @@ remoteDomainReboot (virDomainPtr domain,
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_REBOOT,
(xdrproc_t) xdr_remote_domain_reboot_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainDestroy (virDomainPtr domain)
{
+ int rv = -1;
remote_domain_destroy_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1658,14 +1730,18 @@ remoteDomainDestroy (virDomainPtr domain
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_DESTROY,
(xdrproc_t) xdr_remote_domain_destroy_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static char *
remoteDomainGetOSType (virDomainPtr domain)
{
+ char *rv = NULL;
remote_domain_get_os_type_args args;
remote_domain_get_os_type_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -1676,15 +1752,19 @@ remoteDomainGetOSType (virDomainPtr doma
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_OS_TYPE,
(xdrproc_t) xdr_remote_domain_get_os_type_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_get_os_type_ret, (char *) &ret) == -1)
- return NULL;
-
- /* Caller frees. */
- return ret.type;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.type;
+
+done:
+ return rv;
}
static unsigned long
remoteDomainGetMaxMemory (virDomainPtr domain)
{
+ unsigned long rv = 0;
remote_domain_get_max_memory_args args;
remote_domain_get_max_memory_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -1695,14 +1775,18 @@ remoteDomainGetMaxMemory (virDomainPtr d
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_MAX_MEMORY,
(xdrproc_t) xdr_remote_domain_get_max_memory_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_get_max_memory_ret, (char *) &ret) ==
-1)
- return 0;
-
- return ret.memory;
+ goto done;
+
+ rv = ret.memory;
+
+done:
+ return rv;
}
static int
remoteDomainSetMaxMemory (virDomainPtr domain, unsigned long memory)
{
+ int rv = -1;
remote_domain_set_max_memory_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1712,14 +1796,18 @@ remoteDomainSetMaxMemory (virDomainPtr d
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MAX_MEMORY,
(xdrproc_t) xdr_remote_domain_set_max_memory_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainSetMemory (virDomainPtr domain, unsigned long memory)
{
+ int rv = -1;
remote_domain_set_memory_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1729,14 +1817,18 @@ remoteDomainSetMemory (virDomainPtr doma
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MEMORY,
(xdrproc_t) xdr_remote_domain_set_memory_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainGetInfo (virDomainPtr domain, virDomainInfoPtr info)
{
+ int rv = -1;
remote_domain_get_info_args args;
remote_domain_get_info_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -1747,7 +1839,7 @@ remoteDomainGetInfo (virDomainPtr domain
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_INFO,
(xdrproc_t) xdr_remote_domain_get_info_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_get_info_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
info->state = ret.state;
info->maxMem = ret.max_mem;
@@ -1755,12 +1847,16 @@ remoteDomainGetInfo (virDomainPtr domain
info->nrVirtCpu = ret.nr_virt_cpu;
info->cpuTime = ret.cpu_time;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainSave (virDomainPtr domain, const char *to)
{
+ int rv = -1;
remote_domain_save_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1770,14 +1866,18 @@ remoteDomainSave (virDomainPtr domain, c
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SAVE,
(xdrproc_t) xdr_remote_domain_save_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainRestore (virConnectPtr conn, const char *from)
{
+ int rv = -1;
remote_domain_restore_args args;
struct private_data *priv = conn->privateData;
@@ -1786,14 +1886,18 @@ remoteDomainRestore (virConnectPtr conn,
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_RESTORE,
(xdrproc_t) xdr_remote_domain_restore_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainCoreDump (virDomainPtr domain, const char *to, int flags)
{
+ int rv = -1;
remote_domain_core_dump_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1804,14 +1908,18 @@ remoteDomainCoreDump (virDomainPtr domai
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_CORE_DUMP,
(xdrproc_t) xdr_remote_domain_core_dump_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainSetVcpus (virDomainPtr domain, unsigned int nvcpus)
{
+ int rv = -1;
remote_domain_set_vcpus_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1821,9 +1929,12 @@ remoteDomainSetVcpus (virDomainPtr domai
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_VCPUS,
(xdrproc_t) xdr_remote_domain_set_vcpus_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
@@ -1832,6 +1943,7 @@ remoteDomainPinVcpu (virDomainPtr domain
unsigned char *cpumap,
int maplen)
{
+ int rv = -1;
remote_domain_pin_vcpu_args args;
struct private_data *priv = domain->conn->privateData;
@@ -1839,7 +1951,7 @@ remoteDomainPinVcpu (virDomainPtr domain
errorf (domain->conn, VIR_ERR_RPC,
_("map length greater than maximum: %d > %d"),
maplen, REMOTE_CPUMAP_MAX);
- return -1;
+ goto done;
}
make_nonnull_domain (&args.dom, domain);
@@ -1850,9 +1962,12 @@ remoteDomainPinVcpu (virDomainPtr domain
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_PIN_VCPU,
(xdrproc_t) xdr_remote_domain_pin_vcpu_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
@@ -1862,6 +1977,7 @@ remoteDomainGetVcpus (virDomainPtr domai
unsigned char *cpumaps,
int maplen)
{
+ int rv = -1;
int i;
remote_domain_get_vcpus_args args;
remote_domain_get_vcpus_ret ret;
@@ -1871,13 +1987,13 @@ remoteDomainGetVcpus (virDomainPtr domai
errorf (domain->conn, VIR_ERR_RPC,
_("vCPU count exceeds maximum: %d > %d"),
maxinfo, REMOTE_VCPUINFO_MAX);
- return -1;
+ goto done;
}
if (maxinfo * maplen > REMOTE_CPUMAPS_MAX) {
errorf (domain->conn, VIR_ERR_RPC,
_("vCPU map buffer length exceeds maximum: %d > %d"),
maxinfo * maplen, REMOTE_CPUMAPS_MAX);
- return -1;
+ goto done;
}
make_nonnull_domain (&args.dom, domain);
@@ -1888,21 +2004,19 @@ remoteDomainGetVcpus (virDomainPtr domai
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_VCPUS,
(xdrproc_t) xdr_remote_domain_get_vcpus_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_get_vcpus_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.info.info_len > maxinfo) {
errorf (domain->conn, VIR_ERR_RPC,
_("host reports too many vCPUs: %d > %d"),
ret.info.info_len, maxinfo);
- xdr_free ((xdrproc_t) xdr_remote_domain_get_vcpus_ret, (char *) &ret);
- return -1;
+ goto cleanup;
}
if (ret.cpumaps.cpumaps_len > maxinfo * maplen) {
errorf (domain->conn, VIR_ERR_RPC,
_("host reports map buffer length exceeds maximum: %d >
%d"),
ret.cpumaps.cpumaps_len, maxinfo * maplen);
- xdr_free ((xdrproc_t) xdr_remote_domain_get_vcpus_ret, (char *) &ret);
- return -1;
+ goto cleanup;
}
memset (info, 0, sizeof (virVcpuInfo) * maxinfo);
@@ -1918,13 +2032,19 @@ remoteDomainGetVcpus (virDomainPtr domai
for (i = 0; i < ret.cpumaps.cpumaps_len; ++i)
cpumaps[i] = ret.cpumaps.cpumaps_val[i];
+ rv = ret.info.info_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_domain_get_vcpus_ret, (char *) &ret);
- return ret.info.info_len;
+
+done:
+ return rv;
}
static int
remoteDomainGetMaxVcpus (virDomainPtr domain)
{
+ int rv = -1;
remote_domain_get_max_vcpus_args args;
remote_domain_get_max_vcpus_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -1935,14 +2055,18 @@ remoteDomainGetMaxVcpus (virDomainPtr do
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_MAX_VCPUS,
(xdrproc_t) xdr_remote_domain_get_max_vcpus_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_get_max_vcpus_ret, (char *) &ret) == -1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static char *
remoteDomainDumpXML (virDomainPtr domain, int flags)
{
+ char *rv = NULL;
remote_domain_dump_xml_args args;
remote_domain_dump_xml_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -1954,10 +2078,13 @@ remoteDomainDumpXML (virDomainPtr domain
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_DUMP_XML,
(xdrproc_t) xdr_remote_domain_dump_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_dump_xml_ret, (char *) &ret) == -1)
- return NULL;
-
- /* Caller frees. */
- return ret.xml;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.xml;
+
+done:
+ return rv;
}
static int
@@ -1967,6 +2094,7 @@ remoteDomainMigratePrepare (virConnectPt
unsigned long flags, const char *dname,
unsigned long resource)
{
+ int rv = -1;
remote_domain_migrate_prepare_args args;
remote_domain_migrate_prepare_ret ret;
struct private_data *priv = dconn->privateData;
@@ -1980,7 +2108,7 @@ remoteDomainMigratePrepare (virConnectPt
if (call (dconn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PREPARE,
(xdrproc_t) xdr_remote_domain_migrate_prepare_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_migrate_prepare_ret, (char *) &ret) ==
-1)
- return -1;
+ goto done;
if (ret.cookie.cookie_len > 0) {
*cookie = ret.cookie.cookie_val; /* Caller frees. */
@@ -1989,7 +2117,10 @@ remoteDomainMigratePrepare (virConnectPt
if (ret.uri_out)
*uri_out = *ret.uri_out; /* Caller frees. */
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static int
@@ -2001,6 +2132,7 @@ remoteDomainMigratePerform (virDomainPtr
const char *dname,
unsigned long resource)
{
+ int rv = -1;
remote_domain_migrate_perform_args args;
struct private_data *priv = domain->conn->privateData;
@@ -2015,9 +2147,12 @@ remoteDomainMigratePerform (virDomainPtr
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PERFORM,
(xdrproc_t) xdr_remote_domain_migrate_perform_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static virDomainPtr
@@ -2028,7 +2163,7 @@ remoteDomainMigrateFinish (virConnectPtr
const char *uri,
unsigned long flags)
{
- virDomainPtr ddom;
+ virDomainPtr ddom = NULL;
remote_domain_migrate_finish_args args;
remote_domain_migrate_finish_ret ret;
struct private_data *priv = dconn->privateData;
@@ -2043,11 +2178,12 @@ remoteDomainMigrateFinish (virConnectPtr
if (call (dconn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH,
(xdrproc_t) xdr_remote_domain_migrate_finish_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_migrate_finish_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
ddom = get_nonnull_domain (dconn, ret.ddom);
xdr_free ((xdrproc_t) &xdr_remote_domain_migrate_finish_ret, (char *) &ret);
+done:
return ddom;
}
@@ -2059,6 +2195,7 @@ remoteDomainMigratePrepare2 (virConnectP
unsigned long resource,
const char *dom_xml)
{
+ int rv = -1;
remote_domain_migrate_prepare2_args args;
remote_domain_migrate_prepare2_ret ret;
struct private_data *priv = dconn->privateData;
@@ -2073,7 +2210,7 @@ remoteDomainMigratePrepare2 (virConnectP
if (call (dconn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PREPARE2,
(xdrproc_t) xdr_remote_domain_migrate_prepare2_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_migrate_prepare2_ret, (char *) &ret) ==
-1)
- return -1;
+ goto done;
if (ret.cookie.cookie_len > 0) {
*cookie = ret.cookie.cookie_val; /* Caller frees. */
@@ -2082,7 +2219,10 @@ remoteDomainMigratePrepare2 (virConnectP
if (ret.uri_out)
*uri_out = *ret.uri_out; /* Caller frees. */
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static virDomainPtr
@@ -2094,7 +2234,7 @@ remoteDomainMigrateFinish2 (virConnectPt
unsigned long flags,
int retcode)
{
- virDomainPtr ddom;
+ virDomainPtr ddom = NULL;
remote_domain_migrate_finish2_args args;
remote_domain_migrate_finish2_ret ret;
struct private_data *priv = dconn->privateData;
@@ -2110,17 +2250,19 @@ remoteDomainMigrateFinish2 (virConnectPt
if (call (dconn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH2,
(xdrproc_t) xdr_remote_domain_migrate_finish2_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_migrate_finish2_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
ddom = get_nonnull_domain (dconn, ret.ddom);
xdr_free ((xdrproc_t) &xdr_remote_domain_migrate_finish2_ret, (char *)
&ret);
+done:
return ddom;
}
static int
remoteListDefinedDomains (virConnectPtr conn, char **const names, int maxnames)
{
+ int rv = -1;
int i;
remote_list_defined_domains_args args;
remote_list_defined_domains_ret ret;
@@ -2130,7 +2272,7 @@ remoteListDefinedDomains (virConnectPtr
errorf (conn, VIR_ERR_RPC,
_("too many remote domain names: %d > %d"),
maxnames, REMOTE_DOMAIN_NAME_LIST_MAX);
- return -1;
+ goto done;
}
args.maxnames = maxnames;
@@ -2138,32 +2280,36 @@ remoteListDefinedDomains (virConnectPtr
if (call (conn, priv, 0, REMOTE_PROC_LIST_DEFINED_DOMAINS,
(xdrproc_t) xdr_remote_list_defined_domains_args, (char *) &args,
(xdrproc_t) xdr_remote_list_defined_domains_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
errorf (conn, VIR_ERR_RPC,
_("too many remote domain names: %d > %d"),
ret.names.names_len, maxnames);
- xdr_free ((xdrproc_t) xdr_remote_list_defined_domains_ret, (char *) &ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_list_defined_domains_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
static int
remoteNumOfDefinedDomains (virConnectPtr conn)
{
+ int rv = -1;
remote_num_of_defined_domains_ret ret;
struct private_data *priv = conn->privateData;
@@ -2171,14 +2317,18 @@ remoteNumOfDefinedDomains (virConnectPtr
if (call (conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_DOMAINS,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_num_of_defined_domains_ret, (char *) &ret) ==
-1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static int
remoteDomainCreate (virDomainPtr domain)
{
+ int rv = -1;
remote_domain_create_args args;
struct private_data *priv = domain->conn->privateData;
@@ -2187,15 +2337,18 @@ remoteDomainCreate (virDomainPtr domain)
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_CREATE,
(xdrproc_t) xdr_remote_domain_create_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static virDomainPtr
remoteDomainDefineXML (virConnectPtr conn, const char *xml)
{
- virDomainPtr dom;
+ virDomainPtr dom = NULL;
remote_domain_define_xml_args args;
remote_domain_define_xml_ret ret;
struct private_data *priv = conn->privateData;
@@ -2206,17 +2359,19 @@ remoteDomainDefineXML (virConnectPtr con
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_DEFINE_XML,
(xdrproc_t) xdr_remote_domain_define_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_define_xml_ret, (char *) &ret) == -1)
- return NULL;
+ goto done;
dom = get_nonnull_domain (conn, ret.dom);
xdr_free ((xdrproc_t) xdr_remote_domain_define_xml_ret, (char *) &ret);
+done:
return dom;
}
static int
remoteDomainUndefine (virDomainPtr domain)
{
+ int rv = -1;
remote_domain_undefine_args args;
struct private_data *priv = domain->conn->privateData;
@@ -2225,14 +2380,18 @@ remoteDomainUndefine (virDomainPtr domai
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_UNDEFINE,
(xdrproc_t) xdr_remote_domain_undefine_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainAttachDevice (virDomainPtr domain, const char *xml)
{
+ int rv = -1;
remote_domain_attach_device_args args;
struct private_data *priv = domain->conn->privateData;
@@ -2242,14 +2401,18 @@ remoteDomainAttachDevice (virDomainPtr d
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_ATTACH_DEVICE,
(xdrproc_t) xdr_remote_domain_attach_device_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainDetachDevice (virDomainPtr domain, const char *xml)
{
+ int rv = -1;
remote_domain_detach_device_args args;
struct private_data *priv = domain->conn->privateData;
@@ -2259,14 +2422,18 @@ remoteDomainDetachDevice (virDomainPtr d
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_DETACH_DEVICE,
(xdrproc_t) xdr_remote_domain_detach_device_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainGetAutostart (virDomainPtr domain, int *autostart)
{
+ int rv = -1;
remote_domain_get_autostart_args args;
remote_domain_get_autostart_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -2277,15 +2444,19 @@ remoteDomainGetAutostart (virDomainPtr d
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_AUTOSTART,
(xdrproc_t) xdr_remote_domain_get_autostart_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_get_autostart_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (autostart) *autostart = ret.autostart;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainSetAutostart (virDomainPtr domain, int autostart)
{
+ int rv = -1;
remote_domain_set_autostart_args args;
struct private_data *priv = domain->conn->privateData;
@@ -2295,14 +2466,18 @@ remoteDomainSetAutostart (virDomainPtr d
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_AUTOSTART,
(xdrproc_t) xdr_remote_domain_set_autostart_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static char *
remoteDomainGetSchedulerType (virDomainPtr domain, int *nparams)
{
+ char *rv = NULL;
remote_domain_get_scheduler_type_args args;
remote_domain_get_scheduler_type_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -2313,21 +2488,25 @@ remoteDomainGetSchedulerType (virDomainP
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_SCHEDULER_TYPE,
(xdrproc_t) xdr_remote_domain_get_scheduler_type_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_get_scheduler_type_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
if (nparams) *nparams = ret.nparams;
/* Caller frees this. */
- return ret.type;
+ rv = ret.type;
+
+done:
+ return rv;
}
static int
remoteDomainGetSchedulerParameters (virDomainPtr domain,
virSchedParameterPtr params, int *nparams)
{
+ int rv = -1;
remote_domain_get_scheduler_parameters_args args;
remote_domain_get_scheduler_parameters_ret ret;
- int i;
+ int i = -1;
struct private_data *priv = domain->conn->privateData;
make_nonnull_domain (&args.dom, domain);
@@ -2337,16 +2516,15 @@ remoteDomainGetSchedulerParameters (virD
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS,
(xdrproc_t) xdr_remote_domain_get_scheduler_parameters_args, (char *)
&args,
(xdrproc_t) xdr_remote_domain_get_scheduler_parameters_ret, (char *)
&ret) == -1)
- return -1;
+ goto done;
/* Check the length of the returned list carefully. */
if (ret.params.params_len > REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX ||
ret.params.params_len > *nparams) {
- xdr_free ((xdrproc_t) xdr_remote_domain_get_scheduler_parameters_ret, (char *)
&ret);
error (domain->conn, VIR_ERR_RPC,
_("remoteDomainGetSchedulerParameters: "
"returned number of parameters exceeds limit"));
- return -1;
+ goto cleanup;
}
*nparams = ret.params.params_len;
@@ -2370,22 +2548,31 @@ remoteDomainGetSchedulerParameters (virD
case VIR_DOMAIN_SCHED_FIELD_BOOLEAN:
params[i].value.b =
ret.params.params_val[i].value.remote_sched_param_value_u.b; break;
default:
- xdr_free ((xdrproc_t) xdr_remote_domain_get_scheduler_parameters_ret, (char
*) &ret);
error (domain->conn, VIR_ERR_RPC,
_("remoteDomainGetSchedulerParameters: "
"unknown parameter type"));
- return -1;
- }
- }
-
+ goto cleanup;
+ }
+ }
+
+ rv = 0;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_domain_get_scheduler_parameters_ret, (char *)
&ret);
- return 0;
+ if (rv != 0) {
+ for ( ; i >= 0 ; i--)
+ VIR_FREE(params[i].field);
+ }
+
+done:
+ return rv;
}
static int
remoteDomainSetSchedulerParameters (virDomainPtr domain,
virSchedParameterPtr params, int nparams)
{
+ int rv = -1;
remote_domain_set_scheduler_parameters_args args;
int i, do_error;
struct private_data *priv = domain->conn->privateData;
@@ -2396,7 +2583,7 @@ remoteDomainSetSchedulerParameters (virD
args.params.params_len = nparams;
if (VIR_ALLOC_N(args.params.params_val, nparams) < 0) {
error (domain->conn, VIR_ERR_RPC, _("out of memory allocating
array"));
- return -1;
+ goto done;
}
do_error = 0;
@@ -2429,21 +2616,25 @@ remoteDomainSetSchedulerParameters (virD
if (do_error) {
xdr_free ((xdrproc_t) xdr_remote_domain_set_scheduler_parameters_args, (char *)
&args);
- return -1;
+ goto done;
}
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS,
(xdrproc_t) xdr_remote_domain_set_scheduler_parameters_args, (char *)
&args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainBlockStats (virDomainPtr domain, const char *path,
struct _virDomainBlockStats *stats)
{
+ int rv = -1;
remote_domain_block_stats_args args;
remote_domain_block_stats_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -2456,7 +2647,7 @@ remoteDomainBlockStats (virDomainPtr dom
(xdrproc_t) xdr_remote_domain_block_stats_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_block_stats_ret, (char *) &ret)
== -1)
- return -1;
+ goto done;
stats->rd_req = ret.rd_req;
stats->rd_bytes = ret.rd_bytes;
@@ -2464,13 +2655,17 @@ remoteDomainBlockStats (virDomainPtr dom
stats->wr_bytes = ret.wr_bytes;
stats->errs = ret.errs;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteDomainInterfaceStats (virDomainPtr domain, const char *path,
struct _virDomainInterfaceStats *stats)
{
+ int rv = -1;
remote_domain_interface_stats_args args;
remote_domain_interface_stats_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -2484,7 +2679,7 @@ remoteDomainInterfaceStats (virDomainPtr
(char *) &args,
(xdrproc_t) xdr_remote_domain_interface_stats_ret,
(char *) &ret) == -1)
- return -1;
+ goto done;
stats->rx_bytes = ret.rx_bytes;
stats->rx_packets = ret.rx_packets;
@@ -2495,7 +2690,10 @@ remoteDomainInterfaceStats (virDomainPtr
stats->tx_errs = ret.tx_errs;
stats->tx_drop = ret.tx_drop;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static int
@@ -2506,6 +2704,7 @@ remoteDomainBlockPeek (virDomainPtr doma
void *buffer,
unsigned int flags)
{
+ int rv = -1;
remote_domain_block_peek_args args;
remote_domain_block_peek_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -2514,7 +2713,7 @@ remoteDomainBlockPeek (virDomainPtr doma
errorf (domain->conn, VIR_ERR_RPC,
_("block peek request too large for remote protocol, %zi >
%d"),
size, REMOTE_DOMAIN_BLOCK_PEEK_BUFFER_MAX);
- return -1;
+ goto done;
}
make_nonnull_domain (&args.dom, domain);
@@ -2529,19 +2728,22 @@ remoteDomainBlockPeek (virDomainPtr doma
(char *) &args,
(xdrproc_t) xdr_remote_domain_block_peek_ret,
(char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.buffer.buffer_len != size) {
- errorf (domain->conn, VIR_ERR_RPC,
- "%s", _("returned buffer is not same size as
requested"));
- free (ret.buffer.buffer_val);
- return -1;
+ errorf (domain->conn, VIR_ERR_RPC,
+ "%s", _("returned buffer is not same size as
requested"));
+ goto cleanup;
}
memcpy (buffer, ret.buffer.buffer_val, size);
+ rv = 0;
+
+cleanup:
free (ret.buffer.buffer_val);
- return 0;
+done:
+ return rv;
}
static int
@@ -2551,6 +2753,7 @@ remoteDomainMemoryPeek (virDomainPtr dom
void *buffer,
unsigned int flags)
{
+ int rv = -1;
remote_domain_memory_peek_args args;
remote_domain_memory_peek_ret ret;
struct private_data *priv = domain->conn->privateData;
@@ -2559,7 +2762,7 @@ remoteDomainMemoryPeek (virDomainPtr dom
errorf (domain->conn, VIR_ERR_RPC,
_("memory peek request too large for remote protocol, %zi >
%d"),
size, REMOTE_DOMAIN_MEMORY_PEEK_BUFFER_MAX);
- return -1;
+ goto done;
}
make_nonnull_domain (&args.dom, domain);
@@ -2573,19 +2776,22 @@ remoteDomainMemoryPeek (virDomainPtr dom
(char *) &args,
(xdrproc_t) xdr_remote_domain_memory_peek_ret,
(char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.buffer.buffer_len != size) {
- errorf (domain->conn, VIR_ERR_RPC,
- "%s", _("returned buffer is not same size as
requested"));
- free (ret.buffer.buffer_val);
- return -1;
+ errorf (domain->conn, VIR_ERR_RPC,
+ "%s", _("returned buffer is not same size as
requested"));
+ goto cleanup;
}
memcpy (buffer, ret.buffer.buffer_val, size);
+ rv = 0;
+
+cleanup:
free (ret.buffer.buffer_val);
- return 0;
+done:
+ return rv;
}
/*----------------------------------------------------------------------*/
@@ -2639,23 +2845,24 @@ static int
static int
remoteNetworkClose (virConnectPtr conn)
{
- int ret = 0;
+ int rv = 0;
struct private_data *priv = conn->networkPrivateData;
if (priv->localUses) {
priv->localUses--;
if (!priv->localUses) {
- ret = doRemoteClose(conn, priv);
+ rv = doRemoteClose(conn, priv);
VIR_FREE(priv);
conn->networkPrivateData = NULL;
}
}
- return ret;
+ return rv;
}
static int
remoteNumOfNetworks (virConnectPtr conn)
{
+ int rv = -1;
remote_num_of_networks_ret ret;
struct private_data *priv = conn->networkPrivateData;
@@ -2663,14 +2870,18 @@ remoteNumOfNetworks (virConnectPtr conn)
if (call (conn, priv, 0, REMOTE_PROC_NUM_OF_NETWORKS,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_num_of_networks_ret, (char *) &ret) == -1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static int
remoteListNetworks (virConnectPtr conn, char **const names, int maxnames)
{
+ int rv = -1;
int i;
remote_list_networks_args args;
remote_list_networks_ret ret;
@@ -2680,7 +2891,7 @@ remoteListNetworks (virConnectPtr conn,
errorf (conn, VIR_ERR_RPC,
_("too many remote networks: %d > %d"),
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
- return -1;
+ goto done;
}
args.maxnames = maxnames;
@@ -2688,32 +2899,36 @@ remoteListNetworks (virConnectPtr conn,
if (call (conn, priv, 0, REMOTE_PROC_LIST_NETWORKS,
(xdrproc_t) xdr_remote_list_networks_args, (char *) &args,
(xdrproc_t) xdr_remote_list_networks_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
errorf (conn, VIR_ERR_RPC,
_("too many remote networks: %d > %d"),
ret.names.names_len, maxnames);
- xdr_free ((xdrproc_t) xdr_remote_list_networks_ret, (char *) &ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_list_networks_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
static int
remoteNumOfDefinedNetworks (virConnectPtr conn)
{
+ int rv = -1;
remote_num_of_defined_networks_ret ret;
struct private_data *priv = conn->networkPrivateData;
@@ -2721,15 +2936,19 @@ remoteNumOfDefinedNetworks (virConnectPt
if (call (conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_NETWORKS,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_num_of_defined_networks_ret, (char *) &ret) ==
-1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static int
remoteListDefinedNetworks (virConnectPtr conn,
char **const names, int maxnames)
{
+ int rv = -1;
int i;
remote_list_defined_networks_args args;
remote_list_defined_networks_ret ret;
@@ -2739,7 +2958,7 @@ remoteListDefinedNetworks (virConnectPtr
errorf (conn, VIR_ERR_RPC,
_("too many remote networks: %d > %d"),
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
- return -1;
+ goto done;
}
args.maxnames = maxnames;
@@ -2747,34 +2966,37 @@ remoteListDefinedNetworks (virConnectPtr
if (call (conn, priv, 0, REMOTE_PROC_LIST_DEFINED_NETWORKS,
(xdrproc_t) xdr_remote_list_defined_networks_args, (char *) &args,
(xdrproc_t) xdr_remote_list_defined_networks_ret, (char *) &ret) ==
-1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
errorf (conn, VIR_ERR_RPC,
_("too many remote networks: %d > %d"),
ret.names.names_len, maxnames);
- xdr_free ((xdrproc_t) xdr_remote_list_defined_networks_ret, (char *) &ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_list_defined_networks_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
static virNetworkPtr
remoteNetworkLookupByUUID (virConnectPtr conn,
const unsigned char *uuid)
{
- virNetworkPtr net;
+ virNetworkPtr net = NULL;
remote_network_lookup_by_uuid_args args;
remote_network_lookup_by_uuid_ret ret;
struct private_data *priv = conn->networkPrivateData;
@@ -2785,11 +3007,12 @@ remoteNetworkLookupByUUID (virConnectPtr
if (call (conn, priv, 0, REMOTE_PROC_NETWORK_LOOKUP_BY_UUID,
(xdrproc_t) xdr_remote_network_lookup_by_uuid_args, (char *) &args,
(xdrproc_t) xdr_remote_network_lookup_by_uuid_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
net = get_nonnull_network (conn,
ret.net);
xdr_free ((xdrproc_t) &xdr_remote_network_lookup_by_uuid_ret, (char *)
&ret);
+done:
return net;
}
@@ -2797,7 +3020,7 @@ remoteNetworkLookupByName (virConnectPtr
remoteNetworkLookupByName (virConnectPtr conn,
const char *name)
{
- virNetworkPtr net;
+ virNetworkPtr net = NULL;
remote_network_lookup_by_name_args args;
remote_network_lookup_by_name_ret ret;
struct private_data *priv = conn->networkPrivateData;
@@ -2808,18 +3031,19 @@ remoteNetworkLookupByName (virConnectPtr
if (call (conn, priv, 0, REMOTE_PROC_NETWORK_LOOKUP_BY_NAME,
(xdrproc_t) xdr_remote_network_lookup_by_name_args, (char *) &args,
(xdrproc_t) xdr_remote_network_lookup_by_name_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
net = get_nonnull_network (conn,
ret.net);
xdr_free ((xdrproc_t) &xdr_remote_network_lookup_by_name_ret, (char *)
&ret);
+done:
return net;
}
static virNetworkPtr
remoteNetworkCreateXML (virConnectPtr conn, const char *xmlDesc)
{
- virNetworkPtr net;
+ virNetworkPtr net = NULL;
remote_network_create_xml_args args;
remote_network_create_xml_ret ret;
struct private_data *priv = conn->networkPrivateData;
@@ -2830,18 +3054,19 @@ remoteNetworkCreateXML (virConnectPtr co
if (call (conn, priv, 0, REMOTE_PROC_NETWORK_CREATE_XML,
(xdrproc_t) xdr_remote_network_create_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_network_create_xml_ret, (char *) &ret) == -1)
- return NULL;
+ goto done;
net = get_nonnull_network (conn,
ret.net);
xdr_free ((xdrproc_t) &xdr_remote_network_create_xml_ret, (char *) &ret);
+done:
return net;
}
static virNetworkPtr
remoteNetworkDefineXML (virConnectPtr conn, const char *xml)
{
- virNetworkPtr net;
+ virNetworkPtr net = NULL;
remote_network_define_xml_args args;
remote_network_define_xml_ret ret;
struct private_data *priv = conn->networkPrivateData;
@@ -2852,17 +3077,19 @@ remoteNetworkDefineXML (virConnectPtr co
if (call (conn, priv, 0, REMOTE_PROC_NETWORK_DEFINE_XML,
(xdrproc_t) xdr_remote_network_define_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_network_define_xml_ret, (char *) &ret) == -1)
- return NULL;
+ goto done;
net = get_nonnull_network (conn,
ret.net);
xdr_free ((xdrproc_t) &xdr_remote_network_define_xml_ret, (char *) &ret);
+done:
return net;
}
static int
remoteNetworkUndefine (virNetworkPtr network)
{
+ int rv = -1;
remote_network_undefine_args args;
struct private_data *priv = network->conn->networkPrivateData;
@@ -2871,14 +3098,18 @@ remoteNetworkUndefine (virNetworkPtr net
if (call (network->conn, priv, 0, REMOTE_PROC_NETWORK_UNDEFINE,
(xdrproc_t) xdr_remote_network_undefine_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteNetworkCreate (virNetworkPtr network)
{
+ int rv = -1;
remote_network_create_args args;
struct private_data *priv = network->conn->networkPrivateData;
@@ -2887,14 +3118,18 @@ remoteNetworkCreate (virNetworkPtr netwo
if (call (network->conn, priv, 0, REMOTE_PROC_NETWORK_CREATE,
(xdrproc_t) xdr_remote_network_create_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteNetworkDestroy (virNetworkPtr network)
{
+ int rv = -1;
remote_network_destroy_args args;
struct private_data *priv = network->conn->networkPrivateData;
@@ -2903,14 +3138,18 @@ remoteNetworkDestroy (virNetworkPtr netw
if (call (network->conn, priv, 0, REMOTE_PROC_NETWORK_DESTROY,
(xdrproc_t) xdr_remote_network_destroy_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static char *
remoteNetworkDumpXML (virNetworkPtr network, int flags)
{
+ char *rv = NULL;
remote_network_dump_xml_args args;
remote_network_dump_xml_ret ret;
struct private_data *priv = network->conn->networkPrivateData;
@@ -2922,15 +3161,19 @@ remoteNetworkDumpXML (virNetworkPtr netw
if (call (network->conn, priv, 0, REMOTE_PROC_NETWORK_DUMP_XML,
(xdrproc_t) xdr_remote_network_dump_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_network_dump_xml_ret, (char *) &ret) == -1)
- return NULL;
-
- /* Caller frees. */
- return ret.xml;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.xml;
+
+done:
+ return rv;
}
static char *
remoteNetworkGetBridgeName (virNetworkPtr network)
{
+ char *rv = NULL;
remote_network_get_bridge_name_args args;
remote_network_get_bridge_name_ret ret;
struct private_data *priv = network->conn->networkPrivateData;
@@ -2941,15 +3184,19 @@ remoteNetworkGetBridgeName (virNetworkPt
if (call (network->conn, priv, 0, REMOTE_PROC_NETWORK_GET_BRIDGE_NAME,
(xdrproc_t) xdr_remote_network_get_bridge_name_args, (char *) &args,
(xdrproc_t) xdr_remote_network_get_bridge_name_ret, (char *) &ret) ==
-1)
- return NULL;
-
- /* Caller frees. */
- return ret.name;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.name;
+
+done:
+ return rv;
}
static int
remoteNetworkGetAutostart (virNetworkPtr network, int *autostart)
{
+ int rv = -1;
remote_network_get_autostart_args args;
remote_network_get_autostart_ret ret;
struct private_data *priv = network->conn->networkPrivateData;
@@ -2960,16 +3207,20 @@ remoteNetworkGetAutostart (virNetworkPtr
if (call (network->conn, priv, 0, REMOTE_PROC_NETWORK_GET_AUTOSTART,
(xdrproc_t) xdr_remote_network_get_autostart_args, (char *) &args,
(xdrproc_t) xdr_remote_network_get_autostart_ret, (char *) &ret) ==
-1)
- return -1;
+ goto done;
if (autostart) *autostart = ret.autostart;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteNetworkSetAutostart (virNetworkPtr network, int autostart)
{
+ int rv = -1;
remote_network_set_autostart_args args;
struct private_data *priv = network->conn->networkPrivateData;
@@ -2979,9 +3230,12 @@ remoteNetworkSetAutostart (virNetworkPtr
if (call (network->conn, priv, 0, REMOTE_PROC_NETWORK_SET_AUTOSTART,
(xdrproc_t) xdr_remote_network_set_autostart_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
@@ -3054,12 +3308,14 @@ remoteStorageClose (virConnectPtr conn)
conn->storagePrivateData = NULL;
}
}
+
return ret;
}
static int
remoteNumOfStoragePools (virConnectPtr conn)
{
+ int rv = -1;
remote_num_of_storage_pools_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3067,14 +3323,18 @@ remoteNumOfStoragePools (virConnectPtr c
if (call (conn, priv, 0, REMOTE_PROC_NUM_OF_STORAGE_POOLS,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_num_of_storage_pools_ret, (char *) &ret) == -1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static int
remoteListStoragePools (virConnectPtr conn, char **const names, int maxnames)
{
+ int rv = -1;
int i;
remote_list_storage_pools_args args;
remote_list_storage_pools_ret ret;
@@ -3082,7 +3342,7 @@ remoteListStoragePools (virConnectPtr co
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
error (conn, VIR_ERR_RPC, _("too many storage pools requested"));
- return -1;
+ goto done;
}
args.maxnames = maxnames;
@@ -3090,30 +3350,34 @@ remoteListStoragePools (virConnectPtr co
if (call (conn, priv, 0, REMOTE_PROC_LIST_STORAGE_POOLS,
(xdrproc_t) xdr_remote_list_storage_pools_args, (char *) &args,
(xdrproc_t) xdr_remote_list_storage_pools_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
error (conn, VIR_ERR_RPC, _("too many storage pools received"));
- xdr_free ((xdrproc_t) xdr_remote_list_storage_pools_ret, (char *) &ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_list_storage_pools_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
static int
remoteNumOfDefinedStoragePools (virConnectPtr conn)
{
+ int rv = -1;
remote_num_of_defined_storage_pools_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3121,15 +3385,19 @@ remoteNumOfDefinedStoragePools (virConne
if (call (conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_STORAGE_POOLS,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_remote_num_of_defined_storage_pools_ret, (char *) &ret)
== -1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static int
remoteListDefinedStoragePools (virConnectPtr conn,
char **const names, int maxnames)
{
+ int rv = -1;
int i;
remote_list_defined_storage_pools_args args;
remote_list_defined_storage_pools_ret ret;
@@ -3137,7 +3405,7 @@ remoteListDefinedStoragePools (virConnec
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
error (conn, VIR_ERR_RPC, _("too many storage pools requested"));
- return -1;
+ goto done;
}
args.maxnames = maxnames;
@@ -3145,25 +3413,28 @@ remoteListDefinedStoragePools (virConnec
if (call (conn, priv, 0, REMOTE_PROC_LIST_DEFINED_STORAGE_POOLS,
(xdrproc_t) xdr_remote_list_defined_storage_pools_args, (char *)
&args,
(xdrproc_t) xdr_remote_list_defined_storage_pools_ret, (char *) &ret)
== -1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
error (conn, VIR_ERR_RPC, _("too many storage pools received"));
- xdr_free ((xdrproc_t) xdr_remote_list_defined_storage_pools_ret, (char *)
&ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_list_defined_storage_pools_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
static char *
@@ -3172,11 +3443,11 @@ remoteFindStoragePoolSources (virConnect
const char *srcSpec,
unsigned int flags)
{
+ char *rv = NULL;
remote_find_storage_pool_sources_args args;
remote_find_storage_pool_sources_ret ret;
struct private_data *priv = conn->storagePrivateData;
const char *emptyString = "";
- char *retval;
args.type = (char*)type;
/*
@@ -3197,21 +3468,22 @@ remoteFindStoragePoolSources (virConnect
if (call (conn, priv, 0, REMOTE_PROC_FIND_STORAGE_POOL_SOURCES,
(xdrproc_t) xdr_remote_find_storage_pool_sources_args, (char *) &args,
(xdrproc_t) xdr_remote_find_storage_pool_sources_ret, (char *) &ret) ==
-1)
- return NULL;
-
- retval = ret.xml;
+ goto done;
+
+ rv = ret.xml;
ret.xml = NULL; /* To stop xdr_free free'ing it */
xdr_free ((xdrproc_t) xdr_remote_find_storage_pool_sources_ret, (char *) &ret);
- return retval;
+done:
+ return rv;
}
static virStoragePoolPtr
remoteStoragePoolLookupByUUID (virConnectPtr conn,
const unsigned char *uuid)
{
- virStoragePoolPtr pool;
+ virStoragePoolPtr pool = NULL;
remote_storage_pool_lookup_by_uuid_args args;
remote_storage_pool_lookup_by_uuid_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3222,11 +3494,12 @@ remoteStoragePoolLookupByUUID (virConnec
if (call (conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_UUID,
(xdrproc_t) xdr_remote_storage_pool_lookup_by_uuid_args, (char *)
&args,
(xdrproc_t) xdr_remote_storage_pool_lookup_by_uuid_ret, (char *) &ret)
== -1)
- return NULL;
+ goto done;
pool = get_nonnull_storage_pool (conn, ret.pool);
xdr_free ((xdrproc_t) &xdr_remote_storage_pool_lookup_by_uuid_ret, (char *)
&ret);
+done:
return pool;
}
@@ -3234,7 +3507,7 @@ remoteStoragePoolLookupByName (virConnec
remoteStoragePoolLookupByName (virConnectPtr conn,
const char *name)
{
- virStoragePoolPtr pool;
+ virStoragePoolPtr pool = NULL;
remote_storage_pool_lookup_by_name_args args;
remote_storage_pool_lookup_by_name_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3245,18 +3518,19 @@ remoteStoragePoolLookupByName (virConnec
if (call (conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_NAME,
(xdrproc_t) xdr_remote_storage_pool_lookup_by_name_args, (char *)
&args,
(xdrproc_t) xdr_remote_storage_pool_lookup_by_name_ret, (char *) &ret)
== -1)
- return NULL;
+ goto done;
pool = get_nonnull_storage_pool (conn, ret.pool);
xdr_free ((xdrproc_t) &xdr_remote_storage_pool_lookup_by_name_ret, (char *)
&ret);
+done:
return pool;
}
static virStoragePoolPtr
remoteStoragePoolLookupByVolume (virStorageVolPtr vol)
{
- virStoragePoolPtr pool;
+ virStoragePoolPtr pool = NULL;
remote_storage_pool_lookup_by_volume_args args;
remote_storage_pool_lookup_by_volume_ret ret;
struct private_data *priv = vol->conn->storagePrivateData;
@@ -3267,11 +3541,12 @@ remoteStoragePoolLookupByVolume (virStor
if (call (vol->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_VOLUME,
(xdrproc_t) xdr_remote_storage_pool_lookup_by_volume_args, (char *)
&args,
(xdrproc_t) xdr_remote_storage_pool_lookup_by_volume_ret, (char *)
&ret) == -1)
- return NULL;
+ goto done;
pool = get_nonnull_storage_pool (vol->conn, ret.pool);
xdr_free ((xdrproc_t) &xdr_remote_storage_pool_lookup_by_volume_ret, (char *)
&ret);
+done:
return pool;
}
@@ -3279,7 +3554,7 @@ static virStoragePoolPtr
static virStoragePoolPtr
remoteStoragePoolCreateXML (virConnectPtr conn, const char *xmlDesc, unsigned int flags)
{
- virStoragePoolPtr pool;
+ virStoragePoolPtr pool = NULL;
remote_storage_pool_create_xml_args args;
remote_storage_pool_create_xml_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3291,18 +3566,19 @@ remoteStoragePoolCreateXML (virConnectPt
if (call (conn, priv, 0, REMOTE_PROC_STORAGE_POOL_CREATE_XML,
(xdrproc_t) xdr_remote_storage_pool_create_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_pool_create_xml_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
pool = get_nonnull_storage_pool (conn, ret.pool);
xdr_free ((xdrproc_t) &xdr_remote_storage_pool_create_xml_ret, (char *)
&ret);
+done:
return pool;
}
static virStoragePoolPtr
remoteStoragePoolDefineXML (virConnectPtr conn, const char *xml, unsigned int flags)
{
- virStoragePoolPtr pool;
+ virStoragePoolPtr pool = NULL;
remote_storage_pool_define_xml_args args;
remote_storage_pool_define_xml_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3314,17 +3590,19 @@ remoteStoragePoolDefineXML (virConnectPt
if (call (conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DEFINE_XML,
(xdrproc_t) xdr_remote_storage_pool_define_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_pool_define_xml_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
pool = get_nonnull_storage_pool (conn, ret.pool);
xdr_free ((xdrproc_t) &xdr_remote_storage_pool_define_xml_ret, (char *)
&ret);
+done:
return pool;
}
static int
remoteStoragePoolUndefine (virStoragePoolPtr pool)
{
+ int rv = -1;
remote_storage_pool_undefine_args args;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3333,14 +3611,18 @@ remoteStoragePoolUndefine (virStoragePoo
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_UNDEFINE,
(xdrproc_t) xdr_remote_storage_pool_undefine_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolCreate (virStoragePoolPtr pool, unsigned int flags)
{
+ int rv = -1;
remote_storage_pool_create_args args;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3350,15 +3632,19 @@ remoteStoragePoolCreate (virStoragePoolP
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_CREATE,
(xdrproc_t) xdr_remote_storage_pool_create_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolBuild (virStoragePoolPtr pool,
unsigned int flags)
{
+ int rv = -1;
remote_storage_pool_build_args args;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3368,14 +3654,18 @@ remoteStoragePoolBuild (virStoragePoolPt
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_BUILD,
(xdrproc_t) xdr_remote_storage_pool_build_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolDestroy (virStoragePoolPtr pool)
{
+ int rv = -1;
remote_storage_pool_destroy_args args;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3384,15 +3674,19 @@ remoteStoragePoolDestroy (virStoragePool
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DESTROY,
(xdrproc_t) xdr_remote_storage_pool_destroy_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolDelete (virStoragePoolPtr pool,
unsigned int flags)
{
+ int rv = -1;
remote_storage_pool_delete_args args;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3402,15 +3696,19 @@ remoteStoragePoolDelete (virStoragePoolP
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DELETE,
(xdrproc_t) xdr_remote_storage_pool_delete_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolRefresh (virStoragePoolPtr pool,
unsigned int flags)
{
+ int rv = -1;
remote_storage_pool_refresh_args args;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3420,14 +3718,18 @@ remoteStoragePoolRefresh (virStoragePool
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_REFRESH,
(xdrproc_t) xdr_remote_storage_pool_refresh_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolGetInfo (virStoragePoolPtr pool, virStoragePoolInfoPtr info)
{
+ int rv = -1;
remote_storage_pool_get_info_args args;
remote_storage_pool_get_info_ret ret;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3438,20 +3740,24 @@ remoteStoragePoolGetInfo (virStoragePool
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_GET_INFO,
(xdrproc_t) xdr_remote_storage_pool_get_info_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_pool_get_info_ret, (char *) &ret) ==
-1)
- return -1;
+ goto done;
info->state = ret.state;
info->capacity = ret.capacity;
info->allocation = ret.allocation;
info->available = ret.available;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static char *
remoteStoragePoolDumpXML (virStoragePoolPtr pool,
unsigned int flags)
{
+ char *rv = NULL;
remote_storage_pool_dump_xml_args args;
remote_storage_pool_dump_xml_ret ret;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3463,15 +3769,19 @@ remoteStoragePoolDumpXML (virStoragePool
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DUMP_XML,
(xdrproc_t) xdr_remote_storage_pool_dump_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_pool_dump_xml_ret, (char *) &ret) ==
-1)
- return NULL;
-
- /* Caller frees. */
- return ret.xml;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.xml;
+
+done:
+ return rv;
}
static int
remoteStoragePoolGetAutostart (virStoragePoolPtr pool, int *autostart)
{
+ int rv = -1;
remote_storage_pool_get_autostart_args args;
remote_storage_pool_get_autostart_ret ret;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3482,16 +3792,20 @@ remoteStoragePoolGetAutostart (virStorag
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_GET_AUTOSTART,
(xdrproc_t) xdr_remote_storage_pool_get_autostart_args, (char *)
&args,
(xdrproc_t) xdr_remote_storage_pool_get_autostart_ret, (char *) &ret)
== -1)
- return -1;
+ goto done;
if (autostart) *autostart = ret.autostart;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolSetAutostart (virStoragePoolPtr pool, int autostart)
{
+ int rv = -1;
remote_storage_pool_set_autostart_args args;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3501,15 +3815,19 @@ remoteStoragePoolSetAutostart (virStorag
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_SET_AUTOSTART,
(xdrproc_t) xdr_remote_storage_pool_set_autostart_args, (char *)
&args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStoragePoolNumOfVolumes (virStoragePoolPtr pool)
{
+ int rv = -1;
remote_storage_pool_num_of_volumes_args args;
remote_storage_pool_num_of_volumes_ret ret;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3520,14 +3838,18 @@ remoteStoragePoolNumOfVolumes (virStorag
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_NUM_OF_VOLUMES,
(xdrproc_t) xdr_remote_storage_pool_num_of_volumes_args, (char *)
&args,
(xdrproc_t) xdr_remote_storage_pool_num_of_volumes_ret, (char *) &ret)
== -1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static int
remoteStoragePoolListVolumes (virStoragePoolPtr pool, char **const names, int maxnames)
{
+ int rv = -1;
int i;
remote_storage_pool_list_volumes_args args;
remote_storage_pool_list_volumes_ret ret;
@@ -3535,7 +3857,7 @@ remoteStoragePoolListVolumes (virStorage
if (maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
error (pool->conn, VIR_ERR_RPC, _("too many storage volumes
requested"));
- return -1;
+ goto done;
}
args.maxnames = maxnames;
make_nonnull_storage_pool(&args.pool, pool);
@@ -3544,25 +3866,28 @@ remoteStoragePoolListVolumes (virStorage
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LIST_VOLUMES,
(xdrproc_t) xdr_remote_storage_pool_list_volumes_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_pool_list_volumes_ret, (char *) &ret) ==
-1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
error (pool->conn, VIR_ERR_RPC, _("too many storage volumes
received"));
- xdr_free ((xdrproc_t) xdr_remote_storage_pool_list_volumes_ret, (char *)
&ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_storage_pool_list_volumes_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
@@ -3571,7 +3896,7 @@ remoteStorageVolLookupByName (virStorage
remoteStorageVolLookupByName (virStoragePoolPtr pool,
const char *name)
{
- virStorageVolPtr vol;
+ virStorageVolPtr vol = NULL;
remote_storage_vol_lookup_by_name_args args;
remote_storage_vol_lookup_by_name_ret ret;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3583,11 +3908,12 @@ remoteStorageVolLookupByName (virStorage
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_NAME,
(xdrproc_t) xdr_remote_storage_vol_lookup_by_name_args, (char *)
&args,
(xdrproc_t) xdr_remote_storage_vol_lookup_by_name_ret, (char *) &ret)
== -1)
- return NULL;
+ goto done;
vol = get_nonnull_storage_vol (pool->conn, ret.vol);
xdr_free ((xdrproc_t) &xdr_remote_storage_vol_lookup_by_name_ret, (char *)
&ret);
+done:
return vol;
}
@@ -3595,7 +3921,7 @@ remoteStorageVolLookupByKey (virConnectP
remoteStorageVolLookupByKey (virConnectPtr conn,
const char *key)
{
- virStorageVolPtr vol;
+ virStorageVolPtr vol = NULL;
remote_storage_vol_lookup_by_key_args args;
remote_storage_vol_lookup_by_key_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3606,11 +3932,12 @@ remoteStorageVolLookupByKey (virConnectP
if (call (conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_KEY,
(xdrproc_t) xdr_remote_storage_vol_lookup_by_key_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_vol_lookup_by_key_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
vol = get_nonnull_storage_vol (conn, ret.vol);
xdr_free ((xdrproc_t) &xdr_remote_storage_vol_lookup_by_key_ret, (char *)
&ret);
+done:
return vol;
}
@@ -3618,7 +3945,7 @@ remoteStorageVolLookupByPath (virConnect
remoteStorageVolLookupByPath (virConnectPtr conn,
const char *path)
{
- virStorageVolPtr vol;
+ virStorageVolPtr vol = NULL;
remote_storage_vol_lookup_by_path_args args;
remote_storage_vol_lookup_by_path_ret ret;
struct private_data *priv = conn->storagePrivateData;
@@ -3629,11 +3956,12 @@ remoteStorageVolLookupByPath (virConnect
if (call (conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH,
(xdrproc_t) xdr_remote_storage_vol_lookup_by_path_args, (char *)
&args,
(xdrproc_t) xdr_remote_storage_vol_lookup_by_path_ret, (char *) &ret)
== -1)
- return NULL;
+ goto done;
vol = get_nonnull_storage_vol (conn, ret.vol);
xdr_free ((xdrproc_t) &xdr_remote_storage_vol_lookup_by_path_ret, (char *)
&ret);
+done:
return vol;
}
@@ -3641,7 +3969,7 @@ remoteStorageVolCreateXML (virStoragePoo
remoteStorageVolCreateXML (virStoragePoolPtr pool, const char *xmlDesc,
unsigned int flags)
{
- virStorageVolPtr vol;
+ virStorageVolPtr vol = NULL;
remote_storage_vol_create_xml_args args;
remote_storage_vol_create_xml_ret ret;
struct private_data *priv = pool->conn->storagePrivateData;
@@ -3654,11 +3982,12 @@ remoteStorageVolCreateXML (virStoragePoo
if (call (pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_CREATE_XML,
(xdrproc_t) xdr_remote_storage_vol_create_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_vol_create_xml_ret, (char *) &ret) ==
-1)
- return NULL;
+ goto done;
vol = get_nonnull_storage_vol (pool->conn, ret.vol);
xdr_free ((xdrproc_t) &xdr_remote_storage_vol_create_xml_ret, (char *)
&ret);
+done:
return vol;
}
@@ -3666,6 +3995,7 @@ remoteStorageVolDelete (virStorageVolPtr
remoteStorageVolDelete (virStorageVolPtr vol,
unsigned int flags)
{
+ int rv = -1;
remote_storage_vol_delete_args args;
struct private_data *priv = vol->conn->storagePrivateData;
@@ -3675,14 +4005,18 @@ remoteStorageVolDelete (virStorageVolPtr
if (call (vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_DELETE,
(xdrproc_t) xdr_remote_storage_vol_delete_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
-
- return 0;
+ goto done;
+
+ rv = 0;
+
+done:
+ return rv;
}
static int
remoteStorageVolGetInfo (virStorageVolPtr vol, virStorageVolInfoPtr info)
{
+ int rv = -1;
remote_storage_vol_get_info_args args;
remote_storage_vol_get_info_ret ret;
struct private_data *priv = vol->conn->storagePrivateData;
@@ -3693,19 +4027,23 @@ remoteStorageVolGetInfo (virStorageVolPt
if (call (vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_GET_INFO,
(xdrproc_t) xdr_remote_storage_vol_get_info_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_vol_get_info_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
info->type = ret.type;
info->capacity = ret.capacity;
info->allocation = ret.allocation;
- return 0;
+ rv = 0;
+
+done:
+ return rv;
}
static char *
remoteStorageVolDumpXML (virStorageVolPtr vol,
unsigned int flags)
{
+ char *rv = NULL;
remote_storage_vol_dump_xml_args args;
remote_storage_vol_dump_xml_ret ret;
struct private_data *priv = vol->conn->storagePrivateData;
@@ -3717,15 +4055,19 @@ remoteStorageVolDumpXML (virStorageVolPt
if (call (vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_DUMP_XML,
(xdrproc_t) xdr_remote_storage_vol_dump_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_vol_dump_xml_ret, (char *) &ret) == -1)
- return NULL;
-
- /* Caller frees. */
- return ret.xml;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.xml;
+
+done:
+ return rv;
}
static char *
remoteStorageVolGetPath (virStorageVolPtr vol)
{
+ char *rv = NULL;
remote_storage_vol_get_path_args args;
remote_storage_vol_get_path_ret ret;
struct private_data *priv = vol->conn->storagePrivateData;
@@ -3736,10 +4078,13 @@ remoteStorageVolGetPath (virStorageVolPt
if (call (vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_GET_PATH,
(xdrproc_t) xdr_remote_storage_vol_get_path_args, (char *) &args,
(xdrproc_t) xdr_remote_storage_vol_get_path_ret, (char *) &ret) == -1)
- return NULL;
-
- /* Caller frees. */
- return ret.name;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.name;
+
+done:
+ return rv;
}
@@ -3785,6 +4130,7 @@ static int remoteNodeNumOfDevices(virCon
const char *cap,
unsigned int flags)
{
+ int rv = -1;
remote_node_num_of_devices_args args;
remote_node_num_of_devices_ret ret;
struct private_data *priv = conn->devMonPrivateData;
@@ -3796,9 +4142,12 @@ static int remoteNodeNumOfDevices(virCon
if (call (conn, priv, 0, REMOTE_PROC_NODE_NUM_OF_DEVICES,
(xdrproc_t) xdr_remote_node_num_of_devices_args, (char *) &args,
(xdrproc_t) xdr_remote_node_num_of_devices_ret, (char *) &ret) == -1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
@@ -3808,6 +4157,7 @@ static int remoteNodeListDevices(virConn
int maxnames,
unsigned int flags)
{
+ int rv = -1;
int i;
remote_node_list_devices_args args;
remote_node_list_devices_ret ret;
@@ -3815,7 +4165,7 @@ static int remoteNodeListDevices(virConn
if (maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
error (conn, VIR_ERR_RPC, _("too many device names requested"));
- return -1;
+ goto done;
}
args.cap = cap ? (char **)&cap : NULL;
args.maxnames = maxnames;
@@ -3825,25 +4175,28 @@ static int remoteNodeListDevices(virConn
if (call (conn, priv, 0, REMOTE_PROC_NODE_LIST_DEVICES,
(xdrproc_t) xdr_remote_node_list_devices_args, (char *) &args,
(xdrproc_t) xdr_remote_node_list_devices_ret, (char *) &ret) == -1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
error (conn, VIR_ERR_RPC, _("too many device names received"));
- xdr_free ((xdrproc_t) xdr_remote_node_list_devices_ret, (char *) &ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_node_list_devices_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
@@ -3852,7 +4205,7 @@ static virNodeDevicePtr remoteNodeDevice
{
remote_node_device_lookup_by_name_args args;
remote_node_device_lookup_by_name_ret ret;
- virNodeDevicePtr dev;
+ virNodeDevicePtr dev = NULL;
struct private_data *priv = conn->devMonPrivateData;
args.name = (char *)name;
@@ -3861,18 +4214,20 @@ static virNodeDevicePtr remoteNodeDevice
if (call (conn, priv, 0, REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME,
(xdrproc_t) xdr_remote_node_device_lookup_by_name_args, (char *)
&args,
(xdrproc_t) xdr_remote_node_device_lookup_by_name_ret, (char *) &ret)
== -1)
- return NULL;
+ goto done;
dev = get_nonnull_node_device(conn, ret.dev);
xdr_free ((xdrproc_t) xdr_remote_node_device_lookup_by_name_ret, (char *) &ret);
+done:
return dev;
}
static char *remoteNodeDeviceDumpXML(virNodeDevicePtr dev,
unsigned int flags)
{
+ char *rv = NULL;
remote_node_device_dump_xml_args args;
remote_node_device_dump_xml_ret ret;
struct private_data *priv = dev->conn->devMonPrivateData;
@@ -3884,14 +4239,18 @@ static char *remoteNodeDeviceDumpXML(vir
if (call (dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_DUMP_XML,
(xdrproc_t) xdr_remote_node_device_dump_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_node_device_dump_xml_ret, (char *) &ret) == -1)
- return NULL;
-
- /* Caller frees. */
- return ret.xml;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.xml;
+
+done:
+ return rv;
}
static char *remoteNodeDeviceGetParent(virNodeDevicePtr dev)
{
+ char *rv = NULL;
remote_node_device_get_parent_args args;
remote_node_device_get_parent_ret ret;
struct private_data *priv = dev->conn->devMonPrivateData;
@@ -3902,14 +4261,18 @@ static char *remoteNodeDeviceGetParent(v
if (call (dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_GET_PARENT,
(xdrproc_t) xdr_remote_node_device_get_parent_args, (char *) &args,
(xdrproc_t) xdr_remote_node_device_get_parent_ret, (char *) &ret) ==
-1)
- return NULL;
-
- /* Caller frees. */
- return ret.parent ? *ret.parent : NULL;
+ goto done;
+
+ /* Caller frees. */
+ rv = ret.parent ? *ret.parent : NULL;
+
+done:
+ return rv;
}
static int remoteNodeDeviceNumOfCaps(virNodeDevicePtr dev)
{
+ int rv = -1;
remote_node_device_num_of_caps_args args;
remote_node_device_num_of_caps_ret ret;
struct private_data *priv = dev->conn->devMonPrivateData;
@@ -3920,15 +4283,19 @@ static int remoteNodeDeviceNumOfCaps(vir
if (call (dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS,
(xdrproc_t) xdr_remote_node_device_num_of_caps_args, (char *) &args,
(xdrproc_t) xdr_remote_node_device_num_of_caps_ret, (char *) &ret) ==
-1)
- return -1;
-
- return ret.num;
+ goto done;
+
+ rv = ret.num;
+
+done:
+ return rv;
}
static int remoteNodeDeviceListCaps(virNodeDevicePtr dev,
char **const names,
int maxnames)
{
+ int rv = -1;
int i;
remote_node_device_list_caps_args args;
remote_node_device_list_caps_ret ret;
@@ -3936,7 +4303,7 @@ static int remoteNodeDeviceListCaps(virN
if (maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
error (dev->conn, VIR_ERR_RPC, _("too many capability names
requested"));
- return -1;
+ goto done;
}
args.maxnames = maxnames;
args.name = dev->name;
@@ -3945,25 +4312,28 @@ static int remoteNodeDeviceListCaps(virN
if (call (dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_LIST_CAPS,
(xdrproc_t) xdr_remote_node_device_list_caps_args, (char *) &args,
(xdrproc_t) xdr_remote_node_device_list_caps_ret, (char *) &ret) ==
-1)
- return -1;
+ goto done;
if (ret.names.names_len > maxnames) {
error (dev->conn, VIR_ERR_RPC, _("too many capability names
received"));
- xdr_free ((xdrproc_t) xdr_remote_node_device_list_caps_ret, (char *) &ret);
- return -1;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here.
- */
- for (i = 0; i < ret.names.names_len; ++i)
- names[i] = strdup (ret.names.names_val[i]);
-
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here.
+ */
+ for (i = 0; i < ret.names.names_len; ++i)
+ names[i] = strdup (ret.names.names_val[i]);
+
+ rv = ret.names.names_len;
+
+cleanup:
xdr_free ((xdrproc_t) xdr_remote_node_device_list_caps_ret, (char *) &ret);
- return ret.names.names_len;
+done:
+ return rv;
}
@@ -4620,6 +4990,7 @@ remoteAuthSASL (virConnectPtr conn, stru
remoteAuthFreeCredentials(cred, ncred);
if (ret != 0 && saslconn)
sasl_dispose(&saslconn);
+
return ret;
}
#endif /* HAVE_SASL */
@@ -4684,16 +5055,17 @@ static int remoteDomainEventRegister (vi
void *opaque ATTRIBUTE_UNUSED,
virFreeCallback freecb)
{
+ int rv = -1;
struct private_data *priv = conn->privateData;
if (priv->eventFlushTimer < 0) {
error (conn, VIR_ERR_NO_SUPPORT, _("no event support"));
- return -1;
+ goto done;
}
if (virDomainEventCallbackListAdd(conn, priv->callbackList,
callback, opaque, freecb) < 0) {
error (conn, VIR_ERR_RPC, _("adding cb to list"));
- return -1;
+ goto done;
}
if ( priv->callbackList->count == 1 ) {
@@ -4701,21 +5073,25 @@ static int remoteDomainEventRegister (vi
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_EVENTS_REGISTER,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
- }
-
- return 0;
+ goto done;
+ }
+
+ rv = 0;
+
+done:
+ return rv;
}
static int remoteDomainEventDeregister (virConnectPtr conn,
- void *callback ATTRIBUTE_UNUSED)
-{
+ void *callback ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
struct private_data *priv = conn->privateData;
if (virDomainEventCallbackListRemove(conn, priv->callbackList,
- callback) < 0) {
+ callback) < 0) {
error (conn, VIR_ERR_RPC, _("removing cb fron list"));
- return -1;
+ goto done;
}
if ( priv->callbackList->count == 0 ) {
@@ -4723,10 +5099,13 @@ static int remoteDomainEventDeregister (
if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_EVENTS_DEREGISTER,
(xdrproc_t) xdr_void, (char *) NULL,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
- return -1;
- }
-
- return 0;
+ goto done;
+ }
+
+ rv = 0;
+
+done:
+ return rv;
}
/*----------------------------------------------------------------------*/
@@ -5524,22 +5903,22 @@ remoteDomainEventFired(int watch,
DEBUG("%s : VIR_EVENT_HANDLE_HANGUP or "
"VIR_EVENT_HANDLE_ERROR encountered", __FUNCTION__);
virEventRemoveHandle(watch);
- return;
+ goto done;
}
if (fd != priv->sock) {
virEventRemoveHandle(watch);
- return;
+ goto done;
}
/* Read and deserialise length word. */
if (really_read (conn, priv, 0, buffer2, sizeof buffer2) == -1)
- return;
+ goto done;
xdrmem_create (&xdr, buffer2, sizeof buffer2, XDR_DECODE);
if (!xdr_int (&xdr, &len)) {
error (conn, VIR_ERR_RPC, _("xdr_int (length word, reply)"));
- return;
+ goto done;
}
xdr_destroy (&xdr);
@@ -5548,20 +5927,20 @@ remoteDomainEventFired(int watch,
if (len < 0 || len > REMOTE_MESSAGE_MAX) {
error (conn, VIR_ERR_RPC, _("packet received from server too large"));
- return;
+ goto done;
}
/* Read reply header and what follows (either a ret or an error). */
if (really_read (conn, priv, 0, buffer, len) == -1) {
error (conn, VIR_ERR_RPC, _("error reading buffer from memory"));
- return;
+ goto done;
}
/* Deserialise reply header. */
xdrmem_create (&xdr, buffer, len, XDR_DECODE);
if (!xdr_remote_message_header (&xdr, &hdr)) {
error (conn, VIR_ERR_RPC, _("invalid header in event firing"));
- return;
+ goto done;
}
if (hdr.proc == REMOTE_PROC_DOMAIN_EVENT &&
@@ -5572,6 +5951,9 @@ remoteDomainEventFired(int watch,
DEBUG0("invalid proc in event firing");
error (conn, VIR_ERR_RPC, _("invalid proc in event firing"));
}
+
+done:
+ return;
}
void
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|