static int testQEMUSchemaValidateObjectMergeVariantMember(size_t pos ATTRIBUTE_UNUSED, virJSONValuePtr item, void *opaque) { virJSONValuePtr array = opaque; virJSONValuePtr copy; if (!(copy = virJSONValueCopy(item))) return -1; if (virJSONValueArrayAppend(array, copy) < 0) return -1; return 1; }
virNetDaemonPtr virNetDaemonNewPostExecRestart(virJSONValuePtr object) { virNetDaemonPtr dmn = NULL; virJSONValuePtr servers = virJSONValueObjectGet(object, "servers"); bool new_version = virJSONValueObjectHasKey(object, "servers"); if (!(dmn = virNetDaemonNew())) goto error; if (new_version && !servers) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Malformed servers data in JSON document")); goto error; } if (!(dmn->srvObject = virJSONValueCopy(new_version ? servers : object))) goto error; return dmn; error: virObjectUnref(dmn); return NULL; }
static int testJSONCopy(const void *data) { const struct testInfo *info = data; virJSONValuePtr json = NULL; virJSONValuePtr jsonCopy = NULL; char *result = NULL; char *resultCopy = NULL; int ret = -1; json = virJSONValueFromString(info->doc); if (!json) { VIR_TEST_VERBOSE("Failed to parse %s\n", info->doc); goto cleanup; } jsonCopy = virJSONValueCopy(json); if (!jsonCopy) { VIR_TEST_VERBOSE("Failed to copy JSON data\n"); goto cleanup; } result = virJSONValueToString(json, false); if (!result) { VIR_TEST_VERBOSE("Failed to format original JSON data\n"); goto cleanup; } resultCopy = virJSONValueToString(json, false); if (!resultCopy) { VIR_TEST_VERBOSE("Failed to format copied JSON data\n"); goto cleanup; } if (STRNEQ(result, resultCopy)) { if (virTestGetVerbose()) virTestDifference(stderr, result, resultCopy); goto cleanup; } VIR_FREE(result); VIR_FREE(resultCopy); result = virJSONValueToString(json, true); if (!result) { VIR_TEST_VERBOSE("Failed to format original JSON data\n"); goto cleanup; } resultCopy = virJSONValueToString(json, true); if (!resultCopy) { VIR_TEST_VERBOSE("Failed to format copied JSON data\n"); goto cleanup; } if (STRNEQ(result, resultCopy)) { if (virTestGetVerbose()) virTestDifference(stderr, result, resultCopy); goto cleanup; } ret = 0; cleanup: VIR_FREE(result); VIR_FREE(resultCopy); virJSONValueFree(json); virJSONValueFree(jsonCopy); return ret; }