[PATCH 13/36] admin: convert virAdmServer to GObject
Jonathon Jongsma
jjongsma at redhat.com
Wed Apr 8 20:47:41 UTC 2020
On Fri, 2020-04-03 at 17:15 +0200, Rafael Fonseca wrote:
> Signed-off-by: Rafael Fonseca <r4f4rfs at 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 */
> };
More information about the libvir-list
mailing list