[libvirt PATCH 01/15] cpu_map: Use g_auto* in loadData
Tim Wiederhake
twiederh at redhat.com
Tue Sep 8 06:45:05 UTC 2020
Hi Ján!
Am Montag, den 07.09.2020, 17:10 +0200 schrieb Ján Tomko:
> 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
Thanks for the explanation! And you are absolutely right about the
define. I did use g_autofree in a later patch, so I cannot really tell
why I thought the define was necessary here. Fixed (locally).
Tim
> > 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
> >
More information about the libvir-list
mailing list