[libvirt] [PATCH v2 15/23] util: convert virIdentity class to use GObject

Ján Tomko jtomko at redhat.com
Tue Oct 8 17:08:25 UTC 2019


On Mon, Oct 07, 2019 at 06:14:17PM +0100, Daniel P. Berrangé wrote:
>Converting from virObject to GObject is reasonably straightforward,
>as illustrated by this patch for virIdentity
>
>In the header file
>
> - Remove
>
>     typedef struct _virIdentity virIdentity
>
> - Add
>
>     #define VIR_TYPE_IDENTITY virIdentity_get_type ()
>     G_DECLARE_FINAL_TYPE (virIdentity, virIdentity, VIR, IDENTITY, GObject);
>
>   Which provides the typedef we just removed, and class
>   declaration boilerplate and various other constants/macros.
>
>In the source file
>
> - Change 'virObject parent' to 'GObject parent' in the struct
> - Remove the virClass variable and its initializing call
> - Add
>
>      G_DEFINE_TYPE(virIdentity, virIdentity, G_TYPE_OBJECT)
>
>   which declares the instance & class constructor functions
>
> - Add an impl of the instance & class constructors
>   wiring up the finalize method to point to our dispose impl
>
>In all files
>
> - Replace VIR_AUTOUNREF(virIdentityPtr) with g_autoptr(virIdentity)
>
> - Replace virObjectRef/Unref with g_object_ref/unref. Note
>   the latter functions do *NOT* accept a NULL object where as
>   libvirt's do. If you replace g_object_unref with g_clear_object
>   it is NULL safe, but also clears the pointer.
>
>Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
>---
> m4/virt-glib.m4              |  4 +--
> src/qemu/qemu_process.c      |  4 +--
> src/rpc/virnetserverclient.c | 10 +++----
> src/util/viridentity.c       | 57 ++++++++++++++++++++++--------------
> src/util/viridentity.h       |  9 +++---
> tests/viridentitytest.c      |  5 +---
> 6 files changed, 50 insertions(+), 39 deletions(-)
>
>diff --git a/src/util/viridentity.c b/src/util/viridentity.c
>index a24704b690..c6299a6b09 100644
>--- a/src/util/viridentity.c
>+++ b/src/util/viridentity.c
>@@ -43,25 +43,29 @@
>-static void virIdentityDispose(void *object)
>+static void virIdentityFinalize(GObject *object)
> {
>-    virIdentityPtr ident = object;
>+    virIdentityPtr ident = VIR_IDENTITY(object);
>
>     virTypedParamsFree(ident->params, ident->nparams);
>+
>+    G_OBJECT_CLASS(virIdentity_parent_class)->finalize(object);
> }
>
>
>+

Extra whitespace

> /*
>  * Returns: 0 if not present, 1 if present, -1 on error
>  */
>diff --git a/src/util/viridentity.h b/src/util/viridentity.h
>index 7513dd4e35..df658ea844 100644
>--- a/src/util/viridentity.h
>+++ b/src/util/viridentity.h
>@@ -21,12 +21,13 @@
>
> #pragma once
>
>-#include "virobject.h"
>+#include "internal.h"
>+#include <glib-object.h>
>
>-typedef struct _virIdentity virIdentity;
>-typedef virIdentity *virIdentityPtr;
>+#define VIR_TYPE_IDENTITY virIdentity_get_type()

Consider not mixing camel case with snake case.

>+G_DECLARE_FINAL_TYPE(virIdentity, virIdentity, VIR, IDENTITY, GObject);
>
>-G_DEFINE_AUTOPTR_CLEANUP_FUNC(virIdentity, virObjectUnref);
>+typedef virIdentity *virIdentityPtr;
>
> virIdentityPtr virIdentityGetCurrent(void);
> int virIdentitySetCurrent(virIdentityPtr ident);

Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20191008/5270f490/attachment-0001.sig>


More information about the libvir-list mailing list