Use the new handler to fetch the required data and do the extraction locally without conversion to string list.
Signed-off-by: Peter Krempa <pkre...@redhat.com> --- src/qemu/qemu_capabilities.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 538551e772..584bd21be3 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3226,28 +3226,32 @@ static int virQEMUCapsProbeQMPCommandLine(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon) { - bool found = false; - int nvalues; - char **values; - size_t i, j; + g_autoptr(GHashTable) options = NULL; + size_t i; + + if (!(options = qemuMonitorGetCommandLineOptions(mon))) + return -1; for (i = 0; i < G_N_ELEMENTS(virQEMUCapsCommandLine); i++) { - if ((nvalues = qemuMonitorGetCommandLineOptionParameters(mon, - virQEMUCapsCommandLine[i].option, - &values, - &found)) < 0) - return -1; + virJSONValuePtr option = g_hash_table_lookup(options, virQEMUCapsCommandLine[i].option); + size_t j; - if (found && !virQEMUCapsCommandLine[i].param) + if (!option) + continue; + + /* not looking for a specific argument */ + if (!virQEMUCapsCommandLine[i].param) { virQEMUCapsSet(qemuCaps, virQEMUCapsCommandLine[i].flag); + continue; + } - for (j = 0; j < nvalues; j++) { - if (STREQ_NULLABLE(virQEMUCapsCommandLine[i].param, values[j])) { + for (j = 0; j < virJSONValueArraySize(option); j++) { + virJSONValuePtr param = virJSONValueArrayGet(option, j); + const char *paramname = virJSONValueObjectGetString(param, "name"); + + if (STREQ_NULLABLE(virQEMUCapsCommandLine[i].param, paramname)) virQEMUCapsSet(qemuCaps, virQEMUCapsCommandLine[i].flag); - break; - } } - g_strfreev(values); } return 0; -- 2.28.0