On 04/01/2013 03:45 PM, Corey Bryant wrote:
+ if (ret < 0)
+ goto cleanup;
+
+ ret = -1;
+
+ if (!(data = virJSONValueObjectGet(reply, "return"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("%s reply was missing return data"),
+ qmpCmd);
+ goto cleanup;
+ }
+
+ if ((n = virJSONValueArraySize(data)) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("%s reply data was not an array"),
+ qmpCmd);
+ goto cleanup;
+ }
+
+ /* null-terminated list */
+ if (VIR_ALLOC_N(list, n + 1) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ for (i = 0 ; i < n ; i++) {
+ virJSONValuePtr child = virJSONValueArrayGet(data, i);
+ const char *tmp;
+
+ if (!(tmp = virJSONValueGetString(child))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("%s array element does not contain data"),
+ qmpCmd);
+ goto cleanup;
+ }
+
+ if (!(list[i] = strdup(tmp))) {
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ ret = n;
+ *array = list;
+
+cleanup:
+ if (ret < 0)
+ virStringFreeList(list);
+ virJSONValueFree(cmd);
+ virJSONValueFree(reply);
+
Does data need to be freed?
It doesn't seem to be the case for the 'return' object. No other code
frees it, either.
Stefan
--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list