Signed-off-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2.0 KiB
Adoption of GLib APIs
Libvirt has adopted use of the GLib library. Due to libvirt's long history of development, there are many APIs in libvirt, for which GLib provides an alternative solution. The general rule to follow is that the standard GLib solution will be preferred over historical libvirt APIs. Existing code will be ported over to use GLib APIs over time, but new code should use the GLib APIs straight away where possible.
The following is a list of libvirt APIs that should no longer be used in new code, and their suggested GLib replacements:
- Memory allocation
VIR_ALLOC
,VIR_REALLOC
,VIR_RESIZE_N
,VIR_EXPAND_N
,VIR_SHRINK_N
,VIR_FREE
https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html
Prefer the GLib APIs
g_new0
/g_renew
/g_free
in most cases. There should rarely be a need to useg_malloc
/g_realloc
. NEVER MIX use of the classic libvirt memory allocation APIs and GLib APIs within a single method. Keep the style consistent, converting existing code to GLib style in a separate, prior commit.- Array operations
VIR_APPEND_ELEMENT
,VIR_INSERT_ELEMENT
,VIR_DELETE_ELEMENT
https://developer.gnome.org/glib/stable/glib-Arrays.html
Instead of using plain C arrays, it is preferrable to use one of the GLib types,
GArray
,GPtrArray
orGByteArray
. These all use a struct to track the array memory and size together and efficiently resize.- String arrays
virStringList*
,virStringListCount*
https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html
Prefer the NULL-terminated variant instead of storing the count separately. Prefer
g_str*v
functions instead of theirvir*
counterparts. For use withg_auto
GLib provides theGStrv
type.- Objects
virObject
https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html
Prefer
GObject
instead.