
On Mon, Sep 30, 2019 at 03:04:38PM +0200, Ján Tomko wrote:
On Fri, Sep 27, 2019 at 06:17:29PM +0100, Daniel P. Berrangé wrote:
Converting from virObject to GObject is reasonably straightforward, as illustrated by this patch for virIdentity
The change would be much easier to see if this patch did not contain the g_autofree changes and the removal of cleanup/error labels, which generate a lot of churn.
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)
Is the idea to never mix VIR_ALLOC/VIR_AUTOFREE with g_alloc/g_auto*?
Functionally there shouldn't be any problem with mixing the cleanup / allocator APIs..
If not, this step could be separated by temporarily setting virObjectUnref as the cleanup function for g_autoptr.
I'll have more of a think about separating the changes. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|