On Fri, 2020-04-03 at 17:15 +0200, Rafael Fonseca wrote:
Signed-off-by: Rafael Fonseca <r4f4rfs(a)gmail.com>
---
src/admin/libvirt-admin.c | 2 +-
src/admin/libvirt_admin_private.syms | 1 -
src/datatypes.c | 42 ++++++++++++++++++------
----
src/datatypes.h | 20 +++++++------
4 files changed, 40 insertions(+), 25 deletions(-)
[snip]
@@ -44,9 +46,11 @@ extern virClassPtr virStorageVolClass;
extern virClassPtr virStoragePoolClass;
extern virClassPtr virAdmConnectClass;
-extern virClassPtr virAdmServerClass;
extern virClassPtr virAdmClientClass;
+#define VIR_TYPE_ADM_SERVER vir_adm_server_get_type()
+G_DECLARE_FINAL_TYPE(virAdmServer, vir_adm_server, VIR, ADM_SERVER,
GObject);
+
#define virCheckConnectReturn(obj, retval) \
do { \
if (!virObjectIsClass(obj, virConnectClass)) { \
@@ -419,8 +423,8 @@ extern virClassPtr virAdmClientClass;
#define virCheckAdmServerReturn(obj, retval) \
do { \
- virAdmServerPtr _srv = (obj); \
- if (!virObjectIsClass(_srv, virAdmServerClass) || \
+ virAdmServerPtr _srv = VIR_ADM_SERVER(obj); \
+ if (!G_IS_OBJECT(_srv) || !(G_OBJECT_TYPE(_srv) ==
VIR_TYPE_ADM_SERVER) || \
This additional check is unnecessary with GObject. The VIR_ADM_SERVER()
casting macro that is provided by G_DECLARE_FINAL_TYPE() does this
internally. This function already checks that the type of obj is
correct and castable. If the pointer is not castable to the type, it
emits a warning and returns NULL. So you can just check for (_srv ==
NULL).
!virObjectIsClass(_srv->conn, virAdmConnectClass)) {
\
virReportErrorHelper(VIR_FROM_THIS,
VIR_ERR_INVALID_CONN, \
__FILE__, __FUNCTION__, __LINE__, \
@@ -431,8 +435,8 @@ extern virClassPtr virAdmClientClass;
} while (0)
#define virCheckAdmServerGoto(obj, label) \
do { \
- virAdmServerPtr _srv = (obj); \
- if (!virObjectIsClass(_srv, virAdmServerClass) || \
+ virAdmServerPtr _srv = VIR_ADM_SERVER(obj); \
+ if (!G_IS_OBJECT(_srv) || !(G_OBJECT_TYPE(_srv) ==
VIR_TYPE_ADM_SERVER) || \
same here
!virObjectIsClass(_srv->conn, virAdmConnectClass)) {
\
virReportErrorHelper(VIR_FROM_THIS,
VIR_ERR_INVALID_CONN, \
__FILE__, __FUNCTION__, __LINE__, \
@@ -445,7 +449,7 @@ extern virClassPtr virAdmClientClass;
do { \
virAdmClientPtr _clt = (obj); \
if (!virObjectIsClass(_clt, virAdmClientClass) || \
- !virObjectIsClass(_clt->srv, virAdmServerClass) || \
+ !G_IS_OBJECT(_clt->srv) || !(G_OBJECT_TYPE(_clt->srv) ==
VIR_TYPE_ADM_SERVER) || \
Here you should be able to use the macro VIR_IS_ADM_SERVER() that is
automatically provided by G_DECLARE_FINAL_TYPE().
!virObjectIsClass(_clt->srv->conn,
virAdmConnectClass))
{ \
virReportErrorHelper(VIR_FROM_THIS,
VIR_ERR_INVALID_CONN, \
__FILE__, __FUNCTION__, __LINE__, \
@@ -458,7 +462,7 @@ extern virClassPtr virAdmClientClass;
do { \
virAdmClientPtr _clt = (obj); \
if (!virObjectIsClass(_clt, virAdmClientClass) || \
- !virObjectIsClass(_clt->srv, virAdmServerClass) || \
+ !G_IS_OBJECT(_clt->srv) || !(G_OBJECT_TYPE(_clt->srv) ==
VIR_TYPE_ADM_SERVER) || \
same here
!virObjectIsClass(_clt->srv->conn,
virAdmConnectClass))
{ \
virReportErrorHelper(VIR_FROM_THIS,
VIR_ERR_INVALID_CONN, \
__FILE__, __FUNCTION__, __LINE__, \
@@ -573,7 +577,7 @@ struct _virAdmConnect {
* Internal structure associated to a daemon server
*/
struct _virAdmServer {
- virObject parent;
+ GObject parent;
virAdmConnectPtr conn; /* pointer back to the admin
connection */
char *name; /* the server external name */
};