VIR_FROM_LOCKING = 42, /* Error from lock manager */
VIR_FROM_HYPERV = 43, /* Error from Hyper-V driver */
VIR_FROM_CAPABILITIES = 44, /* Error from capabilities */
+ VIR_FROM_URI = 45, /* Error from URI handling */
} virErrorDomain;
}
/* Parse migration URI */
- parsedUri = virURIParse(uri);
-
- if (parsedUri == NULL) {
- virReportOOMError();
+ if (!(parsedUri = virURIParse(uri)))
return -1;
- }
if (parsedUri->scheme == NULL || STRCASENEQ(parsedUri->scheme, "vpxmigr")) {
ESX_ERROR(VIR_ERR_INVALID_ARG, "%s",
virConnectOpenResolveURIAlias(conf, name, &alias) < 0)
goto failed;
- ret->uri = virURIParse (alias ? alias : name);
- if (!ret->uri) {
- virLibConnError(VIR_ERR_INVALID_ARG,
- _("could not parse connection URI %s"),
- alias ? alias : name);
+ if (!(ret->uri = virURIParse (alias ? alias : name))) {
VIR_FREE(alias);
goto failed;
}
return NULL;
}
- name = virURIFormat(conn->uri);
- if (!name) {
- virReportOOMError();
+ if (!(name = virURIFormat(conn->uri)))
goto error;
- }
+
return name;
error:
return -1;
}
- tempuri = virURIParse(dconnuri);
- if (!tempuri) {
- virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ if (!(tempuri = virURIParse(dconnuri))) {
virDispatchError(domain->conn);
return -1;
}
if (libxl_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = virURIParse("xen:///");
- if (!conn->uri) {
- virReportOOMError();
+ if (!(conn->uri = virURIParse("xen:///")))
return VIR_DRV_OPEN_ERROR;
- }
} else {
/* Only xen scheme */
if (conn->uri->scheme == NULL || STRNEQ(conn->uri->scheme, "xen"))
if (lxc_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = virURIParse("lxc:///");
- if (!conn->uri) {
- virReportOOMError();
+ if (!(conn->uri = virURIParse("lxc:///")))
return VIR_DRV_OPEN_ERROR;
- }
} else {
if (conn->uri->scheme == NULL ||
STRNEQ(conn->uri->scheme, "lxc"))
if (access("/proc/vz", W_OK) < 0)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = virURIParse("openvz:///system");
- if (conn->uri == NULL) {
- virReportOOMError();
+ if (!(conn->uri = virURIParse("openvz:///system")))
return VIR_DRV_OPEN_ERROR;
- }
} else {
/* If scheme isn't 'openvz', then its for another driver */
if (conn->uri->scheme == NULL ||
if (qemu_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = virURIParse(qemu_driver->privileged ?
- "qemu:///system" :
- "qemu:///session");
- if (!conn->uri) {
- virReportOOMError();
+ if (!(conn->uri = virURIParse(qemu_driver->privileged ?
+ "qemu:///system" :
+ "qemu:///session")))
return VIR_DRV_OPEN_ERROR;
- }
} else {
/* If URI isn't 'qemu' its definitely not for us */
if (conn->uri->scheme == NULL ||
} else {
uribits = virURIParse(uri);
}
- if (!uribits) {
- qemuReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot parse URI %s"), uri);
+ if (!uribits)
return -1;
- }
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATE_QEMU_FD))
spec.destType = MIGRATION_DEST_CONNECT_HOST;
(STREQ(conn->uri->scheme, "remote") ||
STRPREFIX(conn->uri->scheme, "remote+"))) {
/* Allow remote serve to probe */
- name = strdup("");
+ if (!(name = strdup("")))
+ goto out_of_memory;
} else {
virURI tmpuri = {
.scheme = conn->uri->scheme,
/* Restore transport scheme */
if (transport_str)
transport_str[-1] = '+';
+
+ if (!name)
+ goto failed;
}
}
vars = NULL;
} else {
/* Probe URI server side */
- name = strdup("");
- }
-
- if (!name) {
- virReportOOMError();
- goto failed;
+ if (!(name = strdup("")))
+ goto out_of_memory;
}
VIR_DEBUG("proceeding with name = %s", name);
VIR_DEBUG("Auto-probed URI is %s", uriret.uri);
conn->uri = virURIParse(uriret.uri);
VIR_FREE(uriret.uri);
- if (!conn->uri) {
- virReportOOMError();
+ if (!conn->uri)
goto failed;
- }
}
if (!(priv->domainEventState = virDomainEventStateNew()))
if (uml_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = virURIParse(uml_driver->privileged ?
- "uml:///system" :
- "uml:///session");
- if (!conn->uri) {
- virReportOOMError();
+ if (!(conn->uri = virURIParse(uml_driver->privileged ?
+ "uml:///system" :
+ "uml:///session")))
return VIR_DRV_OPEN_ERROR;
- }
} else {
if (conn->uri->scheme == NULL ||
STRNEQ (conn->uri->scheme, "uml"))
case VIR_FROM_CAPABILITIES:
dom = "Capabilities ";
break;
+ case VIR_FROM_URI:
+ dom = "URI ";
+ break;
}
return(dom);
}
#include "memory.h"
#include "util.h"
+#include "virterror_internal.h"
+
+#define VIR_FROM_THIS VIR_FROM_URI
+
+#define virURIReportError(code, ...) \
+ virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \
+ __FUNCTION__, __LINE__, __VA_ARGS__)
+
/**
* virURIParse:
{
virURIPtr ret = xmlParseURI(uri);
+ if (!ret) {
+ /* libxml2 does not tell us what failed. Grr :-( */
+ virURIReportError(VIR_ERR_INTERNAL_ERROR,
+ "Unable to parse URI %s", uri);
+ return NULL;
+ }
+
/* First check: does it even make sense to jump inside */
- if (ret != NULL &&
- ret->server != NULL &&
+ if (ret->server != NULL &&
ret->server[0] == '[') {
size_t length = strlen(ret->server);
char *ret;
/* First check: does it make sense to do anything */
- if (uri != NULL &&
- uri->server != NULL &&
+ if (uri->server != NULL &&
strchr(uri->server, ':') != NULL) {
backupserver = uri->server;
}
ret = (char *) xmlSaveUri(uri);
+ if (!ret) {
+ virReportOOMError();
+ goto cleanup;
+ }
+cleanup:
/* Put the fixed version back */
if (tmpserver) {
uri->server = backupserver;
typedef xmlURI virURI;
typedef xmlURIPtr virURIPtr;
-virURIPtr virURIParse(const char *uri);
-char *virURIFormat(virURIPtr uri);
+virURIPtr virURIParse(const char *uri)
+ ATTRIBUTE_NONNULL(1);
+char *virURIFormat(virURIPtr uri)
+ ATTRIBUTE_NONNULL(1);
void virURIFree(virURIPtr uri);
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
- if (conn->uri == NULL) {
- conn->uri = virURIParse(uid ? "vbox:///session" : "vbox:///system");
- if (conn->uri == NULL) {
- virReportOOMError();
- return VIR_DRV_OPEN_ERROR;
- }
- }
+ if (conn->uri == NULL &&
+ !(conn->uri = virURIParse(uid ? "vbox:///session" : "vbox:///system")))
+ return VIR_DRV_OPEN_ERROR;
if (conn->uri->scheme == NULL ||
STRNEQ (conn->uri->scheme, "vbox"))
(*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_TCP;
- parsedUri = virURIParse(fileName);
-
- if (parsedUri == NULL) {
- virReportOOMError();
+ if (!(parsedUri = virURIParse(fileName)))
goto cleanup;
- }
if (parsedUri->port == 0) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
if (!xenUnifiedProbe())
return VIR_DRV_OPEN_DECLINED;
- conn->uri = virURIParse("xen:///");
- if (!conn->uri) {
- virReportOOMError();
+ if (!(conn->uri = virURIParse("xen:///")))
return VIR_DRV_OPEN_ERROR;
- }
} else {
if (conn->uri->scheme) {
/* Decline any scheme which isn't "xen://" or "http://". */
* "hostname", "hostname:port" or "xenmigr://hostname[:port]/".
*/
if (strstr (uri, "//")) { /* Full URI. */
- virURIPtr uriptr = virURIParse (uri);
- if (!uriptr) {
- virXendError(VIR_ERR_INVALID_ARG,
- "%s", _("xenDaemonDomainMigrate: invalid URI"));
+ virURIPtr uriptr;
+ if (!(uriptr = virURIParse (uri)))
return -1;
- }
+
if (uriptr->scheme && STRCASENEQ (uriptr->scheme, "xenmigr")) {
virXendError(VIR_ERR_INVALID_ARG,
"%s", _("xenDaemonDomainMigrate: only xenmigr://"
const struct URIParseData *data = args;
char *uristr;
- if (!(uri = virURIParse(data->uri))) {
- virReportOOMError();
+ if (!(uri = virURIParse(data->uri)))
goto cleanup;
- }
- if (!(uristr = virURIFormat(uri))) {
- virReportOOMError();
+ if (!(uristr = virURIFormat(uri)))
goto cleanup;
- }
if (!STREQ(uristr, data->uri)) {
VIR_DEBUG("URI did not roundtrip, expect '%s', actual '%s'",