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.
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