On Mon, May 21, 2012 at 04:42:41PM -0600, Eric Blake wrote:
> +int virConnectListAllDomains (virConnectPtr
conn,
> + virDomainPtr **domains,
Hmm - time for me to think out loud. Your signature differs from mine.
I proposed:
virDomainPtr *domains
aka
virDomain **domains
where my return value would be an array of virDomain objects, and the
caller would have to do:
virDomainPtr dom, first;
virConnectListAllDomains(conn, &first, flags);
dom = first;
while (dom) {
use dom;
virDomainFree(dom);
dom++;
}
free(first);
But that would only work if virDomain is not an opaque type.
You proposed:
virDomainPtr **domains
aka
virDomain ***domains
where the return is an array of virDomainPtr pointers. The caller would
then do:
virDomainPtr *array;
virDomainPtr dom;
int i = 0;
virConnectListAllDomains(conn, &array, flags);
dom = array[0];
do {
use dom;
virDomainFree(dom);
dom = array[i++];
} while (dom);
free(array);
(Of course, you could use a for (i=0; i < ret; i++) loop instead of a
while loop; I chose that style to constrast the difference between the
number of pointer dereferences needed). In conclusion, I think your
style is right. But it also means that we ought to document a sample
usage as part of the API call :)
I agree that Michal's style is nicer & of course docs are always great
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|