[libvirt] [PATCH 1/8] hellolibvirt: Update hellolibvirt example
Dave Allan
dallan at redhat.com
Tue Feb 19 14:43:59 UTC 2013
On Tue, Feb 19, 2013 at 11:26:34AM +0100, Michal Privoznik wrote:
> On 19.02.2013 03:14, John Ferlan wrote:
> > Add a list of active domains, list of active/inactive networks, and
> > list of active/inactive storage pools
> > ---
> > examples/hellolibvirt/hellolibvirt.c | 201 ++++++++++++++++++++++++++++++-----
> > 1 file changed, 173 insertions(+), 28 deletions(-)
> >
> > diff --git a/examples/hellolibvirt/hellolibvirt.c b/examples/hellolibvirt/hellolibvirt.c
> > index 234637e..f191782 100644
> > --- a/examples/hellolibvirt/hellolibvirt.c
> > +++ b/examples/hellolibvirt/hellolibvirt.c
> > @@ -85,65 +85,200 @@ out:
> > return ret;
> > }
> >
> > -
> > +typedef int (*virFunction)(virConnectPtr conn,
> > + char **nameList,
> > + int maxnames);
> > static int
> > -showDomains(virConnectPtr conn)
> > +listObject(virConnectPtr conn, int maxnames, const char *objNameStr,
> > + virFunction fcn)
> > {
> > - int ret = 0, i, numNames, numInactiveDomains, numActiveDomains;
> > + int ret = 0, i, numNames;
> > char **nameList = NULL;
> >
> > - numActiveDomains = virConnectNumOfDomains(conn);
> > - if (-1 == numActiveDomains) {
> > + nameList = malloc(sizeof(*nameList) * maxnames);
> > +
> > + if (NULL == nameList) {
>
> If blue is the sky .... These Yoda conditions should really be made
> inverted. But there are some even outside of the hellolibvirt.c.
Yeah, this was my coding style from before libvirt, but it's clearly
not libvirt standard and they should be removed.
Dave
> > ret = 1;
> > - printf("Failed to get number of active domains\n");
> > + printf("Could not allocate memory for list of %s\n", objNameStr);
> > + goto out;
> > + }
> > +
> > + numNames = (*fcn)(conn, nameList, maxnames);
> > +
> > + if (-1 == numNames) {
> > + ret = 1;
> > + printf("Could not get list of %s from hypervisor\n", objNameStr);
> > showError(conn);
> > goto out;
> > }
> >
> > - numInactiveDomains = virConnectNumOfDefinedDomains(conn);
> > - if (-1 == numInactiveDomains) {
> > + printf(" %s: \n", objNameStr);
> > + for (i = 0; i < numNames; i++) {
> > + printf("\t%s\n", *(nameList + i));
> > + /* The API documentation doesn't say so, but the names
> > + * returned by are strdup'd and must be freed here.
> > + */
>
> The docs should be fixed then.
>
> > + free(*(nameList + i));
> > + }
> > +
> > +out:
> > + free(nameList);
> > + return ret;
> > +}
>
> I wonder if we should advise users to use the other list APIs that are
> around for a while (virConnectListAll. I guess it all boils down to
> question if the hellolibvirt binary is supposed to work with ancient
> libvirts or is just an example shipped within a release.
> In case it is supposed to work with prehistoric versions, we must add a
> fallback code. If we are satisfied with the example working with current
> libvirt, there's no need for fallbacking code then.
>
> Michal
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list