diff --git a/tools/virsh.c b/tools/virsh.c
index 7db48d9..95f5801 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -7025,6 +7026,121 @@ cmdCPUCompare(vshControl *ctl, const vshCmd *cmd)
...
+static int
+cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd)
+{
...
+ for (i = 0;i < obj->nodesetval->nodeNr;i++) {
+ buf = xmlBufferCreate();
+ if (buf == NULL)
+ goto no_memory;
+ sctxt = xmlSaveToBuffer(buf, NULL, 0);
+ if (sctxt == NULL)
Hmm, we would leak buf here, wouldn't we?
+ goto no_memory;
+
+ xmlSaveTree(sctxt, obj->nodesetval->nodeTab[i]);
+ xmlSaveClose(sctxt);
+
+ list = vshRealloc(ctl, list, sizeof(char *) * (count + 1));
+ list[count++] = (char *) buf->content;
+ buf->content = NULL;
+ buf = NULL;
+ }
+
+ if (count == 0) {
+ vshError(ctl, _("No host CPU specified in '%s'"), from);
+ ret = FALSE;
+ goto cleanup;
+ }
+
+ result = virConnectBaselineCPU(ctl->conn, list, count, 0);
+
+ if (result)
+ vshPrint(ctl, "%s", result);
+ else
+ ret = FALSE;
+
+cleanup:
+ xmlXPathFreeObject(obj);
+ xmlXPathFreeContext(ctxt);
+ xmlFreeDoc(doc);
+ VIR_FREE(result);
+ if ((list != NULL) && (count > 0)) {
+ for (i = 0;i < count;i++)
+ VIR_FREE(list[i]);
+ }
+ VIR_FREE(list);
+ VIR_FREE(buffer);
This would fix the leak:
xmlBufferFree(buf);
+ return ret;
+
+no_memory:
+ vshError(ctl, "%s", _("Out of memory"));
+ ret = FALSE;
+}
Except for the leak on error path, the patch looks good. ACK for the fixed
version.
Jirka