提交 e1761593 编写于 作者: E Eric Blake

maint: improve VIR_ERR_INVALID_NETWORK usage

When checking for a valid network, we weren't consistent on
whether we reported an invalid network or a connection.  Similar
to previous patches such as commit 6e130ddc, the difference
between VIR_IS_NETWORK and VIR_IS_CONNECTED_NETWORK is moot (due
to reference counting, any valid network must be tied to a valid
connection).  Use a common macro to make the error reporting
for invalid networks nicer.

* src/datatypes.h (virCheckNetworkReturn, virCheckNetworkGoto): New
macros.
(VIR_IS_NETWORK, VIR_IS_CONNECTED_NETWORK): Drop unused macros.
* src/libvirt.c: Use macro throughout.
(virLibNetworkError): Drop unused macro.
Signed-off-by: NEric Blake <eblake@redhat.com>
上级 6f989485
...@@ -84,10 +84,31 @@ extern virClassPtr virStoragePoolClass; ...@@ -84,10 +84,31 @@ extern virClassPtr virStoragePoolClass;
} \ } \
} while (0) } while (0)
# define VIR_IS_NETWORK(obj) \ # define virCheckNetworkReturn(obj, retval) \
(virObjectIsClass((obj), virNetworkClass)) do { \
# define VIR_IS_CONNECTED_NETWORK(obj) \ virNetworkPtr _net = (obj); \
(VIR_IS_NETWORK(obj) && virObjectIsClass((obj)->conn, virConnectClass)) if (!virObjectIsClass(_net, virNetworkClass) || \
!virObjectIsClass(_net->conn, virConnectClass)) { \
virReportErrorHelper(VIR_FROM_NETWORK, \
VIR_ERR_INVALID_NETWORK, \
__FILE__, __FUNCTION__, __LINE__, \
__FUNCTION__); \
virDispatchError(NULL); \
return retval; \
} \
} while (0)
# define virCheckNetworkGoto(obj, label) \
do { \
virNetworkPtr _net = (obj); \
if (!virObjectIsClass(_net, virNetworkClass) || \
!virObjectIsClass(_net->conn, virConnectClass)) { \
virReportErrorHelper(VIR_FROM_NETWORK, \
VIR_ERR_INVALID_NETWORK, \
__FILE__, __FUNCTION__, __LINE__, \
__FUNCTION__); \
goto label; \
} \
} while (0)
# define VIR_IS_INTERFACE(obj) \ # define VIR_IS_INTERFACE(obj) \
(virObjectIsClass((obj), virInterfaceClass)) (virObjectIsClass((obj), virInterfaceClass))
......
...@@ -528,9 +528,6 @@ DllMain(HINSTANCE instance ATTRIBUTE_UNUSED, ...@@ -528,9 +528,6 @@ DllMain(HINSTANCE instance ATTRIBUTE_UNUSED,
#define virLibDomainError(code, ...) \ #define virLibDomainError(code, ...) \
virReportErrorHelper(VIR_FROM_DOM, code, __FILE__, \ virReportErrorHelper(VIR_FROM_DOM, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__) __FUNCTION__, __LINE__, __VA_ARGS__)
#define virLibNetworkError(code, ...) \
virReportErrorHelper(VIR_FROM_NETWORK, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__)
#define virLibStoragePoolError(code, ...) \ #define virLibStoragePoolError(code, ...) \
virReportErrorHelper(VIR_FROM_STORAGE, code, __FILE__, \ virReportErrorHelper(VIR_FROM_STORAGE, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__) __FUNCTION__, __LINE__, __VA_ARGS__)
...@@ -10528,11 +10525,8 @@ virNetworkGetConnect(virNetworkPtr net) ...@@ -10528,11 +10525,8 @@ virNetworkGetConnect(virNetworkPtr net)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(net)) { virCheckNetworkReturn(net, NULL);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
return net->conn; return net->conn;
} }
...@@ -10953,12 +10947,9 @@ virNetworkUndefine(virNetworkPtr network) ...@@ -10953,12 +10947,9 @@ virNetworkUndefine(virNetworkPtr network)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = network->conn; conn = network->conn;
virCheckReadOnlyGoto(conn->flags, error); virCheckReadOnlyGoto(conn->flags, error);
if (conn->networkDriver && conn->networkDriver->networkUndefine) { if (conn->networkDriver && conn->networkDriver->networkUndefine) {
...@@ -11010,14 +11001,10 @@ virNetworkUpdate(virNetworkPtr network, ...@@ -11010,14 +11001,10 @@ virNetworkUpdate(virNetworkPtr network,
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = network->conn; conn = network->conn;
virCheckReadOnlyGoto(conn->flags, error);
virCheckReadOnlyGoto(conn->flags, error);
virCheckNonNullArgGoto(xml, error); virCheckNonNullArgGoto(xml, error);
if (conn->networkDriver && conn->networkDriver->networkUpdate) { if (conn->networkDriver && conn->networkDriver->networkUpdate) {
...@@ -11054,12 +11041,9 @@ virNetworkCreate(virNetworkPtr network) ...@@ -11054,12 +11041,9 @@ virNetworkCreate(virNetworkPtr network)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = network->conn; conn = network->conn;
virCheckReadOnlyGoto(conn->flags, error); virCheckReadOnlyGoto(conn->flags, error);
if (conn->networkDriver && conn->networkDriver->networkCreate) { if (conn->networkDriver && conn->networkDriver->networkCreate) {
...@@ -11097,13 +11081,9 @@ virNetworkDestroy(virNetworkPtr network) ...@@ -11097,13 +11081,9 @@ virNetworkDestroy(virNetworkPtr network)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = network->conn; conn = network->conn;
virCheckReadOnlyGoto(conn->flags, error); virCheckReadOnlyGoto(conn->flags, error);
if (conn->networkDriver && conn->networkDriver->networkDestroy) { if (conn->networkDriver && conn->networkDriver->networkDestroy) {
...@@ -11138,11 +11118,8 @@ virNetworkFree(virNetworkPtr network) ...@@ -11138,11 +11118,8 @@ virNetworkFree(virNetworkPtr network)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virObjectUnref(network); virObjectUnref(network);
return 0; return 0;
} }
...@@ -11173,11 +11150,8 @@ virNetworkRef(virNetworkPtr network) ...@@ -11173,11 +11150,8 @@ virNetworkRef(virNetworkPtr network)
virResetLastError(); virResetLastError();
if ((!VIR_IS_CONNECTED_NETWORK(network))) { virCheckNetworkReturn(network, -1);
virLibConnError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virObjectRef(network); virObjectRef(network);
return 0; return 0;
} }
...@@ -11199,11 +11173,8 @@ virNetworkGetName(virNetworkPtr network) ...@@ -11199,11 +11173,8 @@ virNetworkGetName(virNetworkPtr network)
virResetLastError(); virResetLastError();
if (!VIR_IS_NETWORK(network)) { virCheckNetworkReturn(network, NULL);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
return network->name; return network->name;
} }
...@@ -11224,11 +11195,7 @@ virNetworkGetUUID(virNetworkPtr network, unsigned char *uuid) ...@@ -11224,11 +11195,7 @@ virNetworkGetUUID(virNetworkPtr network, unsigned char *uuid)
virResetLastError(); virResetLastError();
if (!VIR_IS_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virCheckNonNullArgGoto(uuid, error); virCheckNonNullArgGoto(uuid, error);
memcpy(uuid, &network->uuid[0], VIR_UUID_BUFLEN); memcpy(uuid, &network->uuid[0], VIR_UUID_BUFLEN);
...@@ -11258,11 +11225,7 @@ virNetworkGetUUIDString(virNetworkPtr network, char *buf) ...@@ -11258,11 +11225,7 @@ virNetworkGetUUIDString(virNetworkPtr network, char *buf)
virResetLastError(); virResetLastError();
if (!VIR_IS_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virCheckNonNullArgGoto(buf, error); virCheckNonNullArgGoto(buf, error);
virUUIDFormat(network->uuid, buf); virUUIDFormat(network->uuid, buf);
...@@ -11298,12 +11261,7 @@ virNetworkGetXMLDesc(virNetworkPtr network, unsigned int flags) ...@@ -11298,12 +11261,7 @@ virNetworkGetXMLDesc(virNetworkPtr network, unsigned int flags)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, NULL);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
conn = network->conn; conn = network->conn;
if (conn->networkDriver && conn->networkDriver->networkGetXMLDesc) { if (conn->networkDriver && conn->networkDriver->networkGetXMLDesc) {
...@@ -11340,12 +11298,7 @@ virNetworkGetBridgeName(virNetworkPtr network) ...@@ -11340,12 +11298,7 @@ virNetworkGetBridgeName(virNetworkPtr network)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, NULL);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
conn = network->conn; conn = network->conn;
if (conn->networkDriver && conn->networkDriver->networkGetBridgeName) { if (conn->networkDriver && conn->networkDriver->networkGetBridgeName) {
...@@ -11384,11 +11337,7 @@ virNetworkGetAutostart(virNetworkPtr network, ...@@ -11384,11 +11337,7 @@ virNetworkGetAutostart(virNetworkPtr network,
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virCheckNonNullArgGoto(autostart, error); virCheckNonNullArgGoto(autostart, error);
conn = network->conn; conn = network->conn;
...@@ -11428,16 +11377,11 @@ virNetworkSetAutostart(virNetworkPtr network, ...@@ -11428,16 +11377,11 @@ virNetworkSetAutostart(virNetworkPtr network,
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(network)) { virCheckNetworkReturn(network, -1);
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virCheckReadOnlyGoto(network->conn->flags, error);
conn = network->conn; conn = network->conn;
virCheckReadOnlyGoto(conn->flags, error);
if (conn->networkDriver && conn->networkDriver->networkSetAutostart) { if (conn->networkDriver && conn->networkDriver->networkSetAutostart) {
int ret; int ret;
ret = conn->networkDriver->networkSetAutostart(network, autostart); ret = conn->networkDriver->networkSetAutostart(network, autostart);
...@@ -16772,11 +16716,8 @@ virNetworkIsActive(virNetworkPtr net) ...@@ -16772,11 +16716,8 @@ virNetworkIsActive(virNetworkPtr net)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(net)) { virCheckNetworkReturn(net, -1);
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
if (net->conn->networkDriver->networkIsActive) { if (net->conn->networkDriver->networkIsActive) {
int ret; int ret;
ret = net->conn->networkDriver->networkIsActive(net); ret = net->conn->networkDriver->networkIsActive(net);
...@@ -16808,11 +16749,8 @@ virNetworkIsPersistent(virNetworkPtr net) ...@@ -16808,11 +16749,8 @@ virNetworkIsPersistent(virNetworkPtr net)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_NETWORK(net)) { virCheckNetworkReturn(net, -1);
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
if (net->conn->networkDriver->networkIsPersistent) { if (net->conn->networkDriver->networkIsPersistent) {
int ret; int ret;
ret = net->conn->networkDriver->networkIsPersistent(net); ret = net->conn->networkDriver->networkIsPersistent(net);
...@@ -18159,11 +18097,14 @@ virConnectNetworkEventRegisterAny(virConnectPtr conn, ...@@ -18159,11 +18097,14 @@ virConnectNetworkEventRegisterAny(virConnectPtr conn,
virResetLastError(); virResetLastError();
virCheckConnectReturn(conn, -1); virCheckConnectReturn(conn, -1);
if (net != NULL && if (net) {
!(VIR_IS_CONNECTED_NETWORK(net) && net->conn == conn)) { virCheckNetworkGoto(net, error);
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__); if (net->conn != conn) {
virDispatchError(conn); virReportInvalidArg(net,
return -1; _("network '%s' in %s must match connection"),
net->name, __FUNCTION__);
goto error;
}
} }
virCheckNonNullArgGoto(cb, error); virCheckNonNullArgGoto(cb, error);
virCheckNonNegativeArgGoto(eventID, error); virCheckNonNegativeArgGoto(eventID, error);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册