[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