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