[libvirt PATCH 01/15] cpu_map: Use g_auto* in loadData

Ján Tomko jtomko at redhat.com
Mon Sep 7 15:10:19 UTC 2020


On a Monday in 2020, Tim Wiederhake wrote:
>Signed-off-by: Tim Wiederhake <twiederh at redhat.com>
>---
> src/cpu/cpu_map.c | 20 ++++++++------------
> 1 file changed, 8 insertions(+), 12 deletions(-)
>
>diff --git a/src/cpu/cpu_map.c b/src/cpu/cpu_map.c
>index cbf90d1395..c315ab32b2 100644
>--- a/src/cpu/cpu_map.c
>+++ b/src/cpu/cpu_map.c
>@@ -32,6 +32,8 @@
>
> VIR_LOG_INIT("cpu.cpu_map");
>
>+G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlNodePtr, g_free);
>+

To answer the question from the cover letter:

For internal types, we put the G_DEFINE_AUTO in the
header files introducing the particular type.

For types from external libraries (like libxml2), we
put them into the header file with our wrappers over it.

For public libvirt types, IIRC we only have defined
the cleanup functions privately in virsh (tools/virsh-util.h)

And this one does not need the define, we simply use
g_autofree for types that are freed by g_free.

Jano

> static int
> loadData(const char *mapfile,
>          xmlXPathContextPtr ctxt,
>@@ -39,20 +41,19 @@ loadData(const char *mapfile,
>          cpuMapLoadCallback callback,
>          void *data)
> {
>-    int ret = -1;
>     VIR_XPATH_NODE_AUTORESTORE(ctxt)
>-    xmlNodePtr *nodes = NULL;
>+    g_autoptr(xmlNodePtr) nodes = NULL;
>     int n;
>     size_t i;
>     int rv;
>
>     if ((n = virXPathNodeSet(element, ctxt, &nodes)) < 0)
>-        goto cleanup;
>+        return -1;
>
>     if (n > 0 && !callback) {
>         virReportError(VIR_ERR_INTERNAL_ERROR,
>                        _("Unexpected element '%s' in CPU map '%s'"), element, mapfile);
>-        goto cleanup;
>+        return -1;
>     }
>
>     for (i = 0; i < n; i++) {
>@@ -60,22 +61,17 @@ loadData(const char *mapfile,
>         if (!name) {
>             virReportError(VIR_ERR_INTERNAL_ERROR,
>                            _("cannot find %s name in CPU map '%s'"), element, mapfile);
>-            goto cleanup;
>+            return -1;
>         }
>         VIR_DEBUG("Load %s name %s", element, name);
>         ctxt->node = nodes[i];
>         rv = callback(ctxt, name, data);
>         VIR_FREE(name);
>         if (rv < 0)
>-            goto cleanup;
>+            return -1;
>     }
>
>-    ret = 0;
>-
>- cleanup:
>-    VIR_FREE(nodes);
>-
>-    return ret;
>+    return 0;
> }
>
> static int
>-- 
>2.26.2
>
-------------- 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/20200907/ab8b340f/attachment-0001.sig>


More information about the libvir-list mailing list