The parent array takes ownership of the inserted value once all checks pass. Don't make the callers second-guess when that happens and modify the function to take a double pointer so that it can be cleared once the ownership is taken. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/locking/lock_daemon.c | 3 +-- src/logging/log_handler.c | 3 +-- src/network/leaseshelper.c | 3 +-- src/node_device/node_device_driver.c | 2 +- src/qemu/qemu_agent.c | 7 ++----- src/qemu/qemu_block.c | 16 ++++------------ src/qemu/qemu_command.c | 3 +-- src/qemu/qemu_firmware.c | 4 +--- src/qemu/qemu_migration_params.c | 4 +--- src/qemu/qemu_monitor_json.c | 11 +++-------- src/rpc/virnetserver.c | 6 ++---- src/rpc/virnetserverservice.c | 3 +-- src/util/virjson.c | 12 +++++------- src/util/virjson.h | 3 ++- src/util/virlease.c | 2 +- src/util/virlockspace.c | 6 ++---- src/util/virmacmap.c | 6 ++---- tests/testutilsqemuschema.c | 3 +-- 18 files changed, 32 insertions(+), 65 deletions(-) diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c index 26905a462b..d68c61b099 100644 --- a/src/locking/lock_daemon.c +++ b/src/locking/lock_daemon.c @@ -728,9 +728,8 @@ virLockDaemonPreExecRestart(const char *state_file, if (!(child = virLockSpacePreExecRestart(lockspace))) return -1; - if (virJSONValueArrayAppend(lockspaces, child) < 0) + if (virJSONValueArrayAppend(lockspaces, &child) < 0) return -1; - child = NULL; tmp++; } diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c index d649c4d132..9e027c7579 100644 --- a/src/logging/log_handler.c +++ b/src/logging/log_handler.c @@ -642,9 +642,8 @@ virLogHandlerPreExecRestart(virLogHandlerPtr handler) return NULL; } - if (virJSONValueArrayAppend(files, file) < 0) + if (virJSONValueArrayAppend(files, &file) < 0) return NULL; - file = NULL; } if (virJSONValueObjectAppend(ret, "files", &files) < 0) diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c index c20e63efa9..ca2c640672 100644 --- a/src/network/leaseshelper.c +++ b/src/network/leaseshelper.c @@ -226,12 +226,11 @@ main(int argc, char **argv) case VIR_LEASE_ACTION_OLD: case VIR_LEASE_ACTION_ADD: - if (lease_new && virJSONValueArrayAppend(leases_array_new, lease_new) < 0) { + if (lease_new && virJSONValueArrayAppend(leases_array_new, &lease_new) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to create json")); goto cleanup; } - lease_new = NULL; G_GNUC_FALLTHROUGH; case VIR_LEASE_ACTION_DEL: diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index d946e64ad6..543e5bb90a 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -606,7 +606,7 @@ nodeDeviceDefToMdevctlConfig(virNodeDeviceDefPtr def, char **buf) if (virJSONValueObjectAppendString(jsonattr, attr->name, attr->value) < 0) return -1; - if (virJSONValueArrayAppend(attributes, g_steal_pointer(&jsonattr)) < 0) + if (virJSONValueArrayAppend(attributes, &jsonattr) < 0) return -1; } diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c index d6816ef9de..9aec0fdb4b 100644 --- a/src/qemu/qemu_agent.c +++ b/src/qemu/qemu_agent.c @@ -1180,9 +1180,8 @@ qemuAgentMakeStringsArray(const char **strings, unsigned int len) for (i = 0; i < len; i++) { g_autoptr(virJSONValue) str = virJSONValueNewString(strings[i]); - if (virJSONValueArrayAppend(ret, str) < 0) + if (virJSONValueArrayAppend(ret, &str) < 0) return NULL; - str = NULL; } return g_steal_pointer(&ret); @@ -1514,10 +1513,8 @@ qemuAgentSetVCPUsCommand(qemuAgentPtr agent, if (virJSONValueObjectAppendBoolean(cpu, "online", in->online) < 0) goto cleanup; - if (virJSONValueArrayAppend(cpus, cpu) < 0) + if (virJSONValueArrayAppend(cpus, &cpu) < 0) goto cleanup; - - cpu = NULL; } if (*nmodified == 0) { diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 1df51ba97b..94cbb1d12e 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -534,10 +534,8 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src, if (!(server = qemuBlockStorageSourceBuildJSONSocketAddress(host, legacy))) return NULL; - if (virJSONValueArrayAppend(servers, server) < 0) + if (virJSONValueArrayAppend(servers, &server) < 0) return NULL; - - server = NULL; } return g_steal_pointer(&servers); @@ -622,10 +620,8 @@ qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(virStorageSourcePtr src) if (!(server = qemuBlockStorageSourceBuildJSONInetSocketAddress(host))) return NULL; - if (virJSONValueArrayAppend(servers, server) < 0) + if (virJSONValueArrayAppend(servers, &server) < 0) return NULL; - - server = NULL; } return g_steal_pointer(&servers); @@ -912,16 +908,12 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src, authmodes = virJSONValueNewArray(); if (!(mode = virJSONValueNewString("cephx")) || - virJSONValueArrayAppend(authmodes, mode) < 0) + virJSONValueArrayAppend(authmodes, &mode) < 0) return NULL; - mode = NULL; - if (!(mode = virJSONValueNewString("none")) || - virJSONValueArrayAppend(authmodes, mode) < 0) + virJSONValueArrayAppend(authmodes, &mode) < 0) return NULL; - - mode = NULL; } if (virJSONValueObjectCreate(&ret, diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index d27d5eb55b..3037d1d5a5 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10200,9 +10200,8 @@ qemuBuildChannelGuestfwdNetdevProps(virDomainChrDefPtr chr) chr->info.alias) < 0) return NULL; - if (virJSONValueArrayAppend(guestfwdarr, guestfwdstrobj) < 0) + if (virJSONValueArrayAppend(guestfwdarr, &guestfwdstrobj) < 0) return NULL; - guestfwdstrobj = NULL; if (virJSONValueObjectCreate(&ret, "s:type", "user", diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index 5e8fdd0ff1..d3198e2d45 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -812,10 +812,8 @@ qemuFirmwareTargetFormat(virJSONValuePtr doc, if (virJSONValueObjectAppend(target, "machines", &machines) < 0) return -1; - if (virJSONValueArrayAppend(targetsJSON, target) < 0) + if (virJSONValueArrayAppend(targetsJSON, &target) < 0) return -1; - - target = NULL; } if (virJSONValueObjectAppend(doc, "targets", &targetsJSON) < 0) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c index 510dad783a..302a9933e1 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -770,10 +770,8 @@ qemuMigrationCapsToJSON(virBitmapPtr caps, NULL) < 0) return NULL; - if (virJSONValueArrayAppend(json, cap) < 0) + if (virJSONValueArrayAppend(json, &cap) < 0) return NULL; - - cap = NULL; } return g_steal_pointer(&json); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 924e03b4da..94365c775b 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -525,10 +525,9 @@ qemuMonitorJSONTransactionAdd(virJSONValuePtr actions, "A:data", &data, NULL) < 0) goto cleanup; - if (virJSONValueArrayAppend(actions, entry) < 0) + if (virJSONValueArrayAppend(actions, &entry) < 0) goto cleanup; - entry = NULL; ret = 0; cleanup: @@ -4976,11 +4975,8 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon, if (virJSONValueObjectAppendNumberInt(key, "data", keycodes[i]) < 0) goto cleanup; - if (virJSONValueArrayAppend(keys, key) < 0) + if (virJSONValueArrayAppend(keys, &key) < 0) goto cleanup; - - key = NULL; - } cmd = qemuMonitorJSONMakeCommand("send-key", @@ -9289,10 +9285,9 @@ qemuMonitorJSONTransactionBitmapMergeSourceAddBitmap(virJSONValuePtr sources, NULL) < 0) return -1; - if (virJSONValueArrayAppend(sources, sourceobj) < 0) + if (virJSONValueArrayAppend(sources, &sourceobj) < 0) return -1; - sourceobj = NULL; return 0; } diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index c2650ade09..30faa0190b 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -585,9 +585,8 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv) if (!(child = virNetServerServicePreExecRestart(srv->services[i]))) goto error; - if (virJSONValueArrayAppend(services, child) < 0) + if (virJSONValueArrayAppend(services, &child) < 0) goto error; - child = NULL; } if (virJSONValueObjectAppend(object, "services", &services) < 0) @@ -598,9 +597,8 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv) if (!(child = virNetServerClientPreExecRestart(srv->clients[i]))) goto error; - if (virJSONValueArrayAppend(clients, child) < 0) + if (virJSONValueArrayAppend(clients, &child) < 0) goto error; - child = NULL; } if (virJSONValueObjectAppend(object, "clients", &clients) < 0) diff --git a/src/rpc/virnetserverservice.c b/src/rpc/virnetserverservice.c index fece6305e8..ce2dd4f28b 100644 --- a/src/rpc/virnetserverservice.c +++ b/src/rpc/virnetserverservice.c @@ -352,9 +352,8 @@ virJSONValuePtr virNetServerServicePreExecRestart(virNetServerServicePtr svc) if (!(child = virNetSocketPreExecRestart(svc->socks[i]))) return NULL; - if (virJSONValueArrayAppend(socks, child) < 0) + if (virJSONValueArrayAppend(socks, &child) < 0) return NULL; - child = NULL; } if (virJSONValueObjectAppend(object, "socks", &socks) < 0) diff --git a/src/util/virjson.c b/src/util/virjson.c index 5b3aa49a7f..65215f03c5 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -774,7 +774,7 @@ virJSONValueObjectAppendNull(virJSONValuePtr object, int virJSONValueArrayAppend(virJSONValuePtr array, - virJSONValuePtr value) + virJSONValuePtr *value) { if (array->type != VIR_JSON_TYPE_ARRAY) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("expecting JSON array")); @@ -785,7 +785,7 @@ virJSONValueArrayAppend(virJSONValuePtr array, array->data.array.nvalues + 1) < 0) return -1; - array->data.array.values[array->data.array.nvalues] = value; + array->data.array.values[array->data.array.nvalues] = g_steal_pointer(value); array->data.array.nvalues++; return 0; @@ -798,9 +798,8 @@ virJSONValueArrayAppendString(virJSONValuePtr object, { g_autoptr(virJSONValue) jvalue = virJSONValueNewString(value); - if (virJSONValueArrayAppend(object, jvalue) < 0) + if (virJSONValueArrayAppend(object, &jvalue) < 0) return -1; - jvalue = NULL; return 0; } @@ -1243,9 +1242,8 @@ virJSONValueNewArrayFromBitmap(virBitmapPtr bitmap) while ((pos = virBitmapNextSetBit(bitmap, pos)) > -1) { g_autoptr(virJSONValue) newelem = virJSONValueNewNumberLong(pos); - if (virJSONValueArrayAppend(ret, newelem) < 0) + if (virJSONValueArrayAppend(ret, &newelem) < 0) return NULL; - newelem = NULL; } return g_steal_pointer(&ret); @@ -1588,7 +1586,7 @@ virJSONParserInsertValue(virJSONParserPtr parser, } if (virJSONValueArrayAppend(state->value, - value) < 0) + &value) < 0) return -1; } break; diff --git a/src/util/virjson.h b/src/util/virjson.h index ca99ae3b70..c22bc1fb45 100644 --- a/src/util/virjson.h +++ b/src/util/virjson.h @@ -72,7 +72,8 @@ virJSONValuePtr virJSONValueNewArrayFromBitmap(virBitmapPtr bitmap); int virJSONValueObjectAppend(virJSONValuePtr object, const char *key, virJSONValuePtr *value); -int virJSONValueArrayAppend(virJSONValuePtr object, virJSONValuePtr value); +int virJSONValueArrayAppend(virJSONValuePtr object, + virJSONValuePtr *value); int virJSONValueArrayConcat(virJSONValuePtr a, virJSONValuePtr c); diff --git a/src/util/virlease.c b/src/util/virlease.c index 3d68bb660c..59eaabd4d9 100644 --- a/src/util/virlease.c +++ b/src/util/virlease.c @@ -119,7 +119,7 @@ virLeaseReadCustomLeaseFile(virJSONValuePtr leases_array_new, } /* Move old lease to new array */ - if (virJSONValueArrayAppend(leases_array_new, lease_tmp) < 0) { + if (virJSONValueArrayAppend(leases_array_new, &lease_tmp) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to create json")); return -1; diff --git a/src/util/virlockspace.c b/src/util/virlockspace.c index 9ba6e83251..684a3320ed 100644 --- a/src/util/virlockspace.c +++ b/src/util/virlockspace.c @@ -455,17 +455,15 @@ virJSONValuePtr virLockSpacePreExecRestart(virLockSpacePtr lockspace) if (!owner) goto error; - if (virJSONValueArrayAppend(owners, owner) < 0) + if (virJSONValueArrayAppend(owners, &owner) < 0) goto error; - owner = NULL; } if (virJSONValueObjectAppend(child, "owners", &owners) < 0) goto error; - if (virJSONValueArrayAppend(resources, child) < 0) + if (virJSONValueArrayAppend(resources, &child) < 0) goto error; - child = NULL; tmp++; } diff --git a/src/util/virmacmap.c b/src/util/virmacmap.c index 12df325933..bb14513c30 100644 --- a/src/util/virmacmap.c +++ b/src/util/virmacmap.c @@ -216,18 +216,16 @@ virMACMapHashDumper(void *payload, for (next = macs; next; next = next->next) { g_autoptr(virJSONValue) m = virJSONValueNewString((const char *) next->data); - if (virJSONValueArrayAppend(arr, m) < 0) + if (virJSONValueArrayAppend(arr, &m) < 0) return -1; - m = NULL; } if (virJSONValueObjectAppendString(obj, "domain", name) < 0 || virJSONValueObjectAppend(obj, "macs", &arr) < 0) return -1; - if (virJSONValueArrayAppend(data, obj) < 0) + if (virJSONValueArrayAppend(data, &obj) < 0) return -1; - obj = NULL; return 0; } diff --git a/tests/testutilsqemuschema.c b/tests/testutilsqemuschema.c index 4bb303a427..a842a219e2 100644 --- a/tests/testutilsqemuschema.c +++ b/tests/testutilsqemuschema.c @@ -168,9 +168,8 @@ testQEMUSchemaValidateObjectMergeVariantMember(size_t pos G_GNUC_UNUSED, if (!(copy = virJSONValueCopy(item))) return -1; - if (virJSONValueArrayAppend(array, copy) < 0) + if (virJSONValueArrayAppend(array, ©) < 0) return -1; - copy = NULL; return 1; } -- 2.29.2