On Mon, Nov 30, 2020 at 11:16 PM Michal Privoznik <mprivozn@xxxxxxxxxx> wrote: > > On 11/20/20 7:09 PM, marcandre.lureau@xxxxxxxxxx wrote: > > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > > > > There might be more potential users around, I haven't looked thoroughly. > > > Quick git grep showed two more: qemuAgentSSHGetAuthorizedKeys() and > qemuMonitorJSONGetStringListProperty(). But that can be done in a > separate patch. > > > > > Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > > --- > > src/qemu/qemu_monitor_json.c | 34 ++++++---------------------------- > > 1 file changed, 6 insertions(+), 28 deletions(-) > > > > diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c > > index 723bdb4426..3588a0c426 100644 > > --- a/src/qemu/qemu_monitor_json.c > > +++ b/src/qemu/qemu_monitor_json.c > > @@ -7533,10 +7533,7 @@ qemuMonitorJSONGetStringArray(qemuMonitorPtr mon, const char *qmpCmd, > > int ret = -1; > > virJSONValuePtr cmd; > > virJSONValuePtr reply = NULL; > > - virJSONValuePtr data; > > - char **list = NULL; > > - size_t n = 0; > > - size_t i; > > + g_auto(GStrv) list = NULL; > > > > *array = NULL; > > > > @@ -7554,32 +7551,13 @@ qemuMonitorJSONGetStringArray(qemuMonitorPtr mon, const char *qmpCmd, > > if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0) > > goto cleanup; > > > > - data = virJSONValueObjectGetArray(reply, "return"); > > - n = virJSONValueArraySize(data); > > - > > - /* null-terminated list */ > > - list = g_new0(char *, n + 1); > > - > > - 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; > > - } > > - > > - list[i] = g_strdup(tmp); > > - } > > - > > - ret = n; > > - *array = list; > > - list = NULL; > > + list = virJSONValueObjectGetStringArray(reply, "return"); > > We can ditch the @list variable and assign to *array directly. > > > + if (!list) > > + goto cleanup; > > + ret = g_strv_length(list); > > + *array = g_steal_pointer(&list); > > > > cleanup: > > - g_strfreev(list); > > virJSONValueFree(cmd); > > virJSONValueFree(reply); > > return ret; > > > > > How about this squashed in: > > > diff --git c/src/qemu/qemu_monitor_json.c i/src/qemu/qemu_monitor_json.c > index 3588a0c426..e7aa6b6ffd 100644 > --- c/src/qemu/qemu_monitor_json.c > +++ i/src/qemu/qemu_monitor_json.c > @@ -7533,7 +7533,6 @@ qemuMonitorJSONGetStringArray(qemuMonitorPtr mon, > const char *qmpCmd, > int ret = -1; > virJSONValuePtr cmd; > virJSONValuePtr reply = NULL; > - g_auto(GStrv) list = NULL; > > *array = NULL; > > @@ -7551,11 +7550,10 @@ qemuMonitorJSONGetStringArray(qemuMonitorPtr > mon, const char *qmpCmd, > if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0) > goto cleanup; > > - list = virJSONValueObjectGetStringArray(reply, "return"); > - if (!list) > + if (!(*array = virJSONValueObjectGetStringArray(reply, "return"))) > goto cleanup; > - ret = g_strv_length(list); > - *array = g_steal_pointer(&list); > + > + ret = g_strv_length(*array); > > cleanup: > virJSONValueFree(cmd); > Looks good to me, thanks