This series mainly focuses on removal of virStringListAdd which tries to promote the use of a string list without counter variable as a dynamic array. This means that every operation counts the number of elements and when used in a loop resutls in O(n^2) algorithms. To discourage it's future buggy use remove the helpers completely. The end of the series then replaces some libvirt helpers for string lists by the glib equivalents. Patches: 1-3,18,24-25,28: cleanups 4-6: fix buggy iteration and memory handling in qemuNamespaceUnlinkPaths 7: helpers for easy use of GSList + char * 8-17,19-20: Don't use virStringListAdd inside of loops and prepare for removal 21: Remove virStringListAdd and virStringListRemove 22-23: Open-code and remove virStringListGetFirstWithPrefix 26-27: Replace virStringListHasString by g_strv_contains 29-34: Preparation and removal of virStringListLength (mostly inefficient iteration) 35-37,40: Replace/reimplement virStringSplit(Count) by g_strsplit 38-39: Replace virStringListJoin by g_strjoinv Peter Krempa (40): qemuMonitorJSONObjectProperty: Make 'str' member const util: virmacmap: Use g_autofree for virJSONValue util: macmap: Remove unused cleanup labels and 'ret' variables qemuDomainGetPreservedMounts: Refactor to return NULL-terminated string lists qemuNamespaceUnlinkPaths: Fix wrong use of iterator variable qemuNamespaceUnlinkPaths: Fix inconsistent cleanup handling util: Add helpers for auto-freeing GSList filled with strings qemu: namespace: Don't use 'virStringListAdd' inside loops virHookCall: Don't use 'virStringListAdd' to construct list in loop qemuInteropFetchConfigs: Don't use 'virStringListAdd' to construct list virCPUDefCheckFeatures: Don't use 'virStringListAdd' to construct list x86ModelParseFeatures: Don't construct list using 'virStringListAdd' virResctrlInfoGetMonitorPrefix: Don't use 'virStringListAdd' to construct list virResctrlMonitorGetStats: Don't use 'virStringListAdd' qemu: Convert 'priv->dbusVMStateIds' to a GSList util: macmap: Convert to use GSList for storing macs instead of string lists xenParseXLNamespaceData: Pre-calculate the length of array virfirewalltest: Shuffle the code around to remove a loop virfirewalltest: Avoid use of 'virStringListAdd' qemusecuritytest: Store 'notRestored' files in a hash table util: virstring: Remove virStringListAdd and virStringListRemove virCgroupGetValueForBlkDev: Rewrite lookup of returned string virStringListGetFirstWithPrefix: Remove unused helper vz: Replace virStringSplitCount(, , , NULL) with virStringSplit qemuProcessUpdateDevices: Refactor cleanup and memory handling Replace virStringListHasString by g_strv_contains util: virstring: Remove virStringListHasString virStorageBackendSheepdogAddVolume: Clean up memory handling qemufirmwaretest: Base iteration on string lists qemuvhostusertest: Base iteration on string lists Replace virStringListLength where actual lenght is not needed virPolkitCheckAuth: Avoid virStringListLength in loop condition Replace virStringListLength by g_strv_length util: virstring: Remove virStringListLength Replace virStringSplit with g_strsplit util: virstring: Remove virStringSplit virStringSplitCount: Reimplement using g_strsplit and g_strv_length Replace virStringListJoin by g_strjoinv util: virstring: Remove virStringListJoin virstringtest: Remove testing of virStringSplitCount src/bhyve/bhyve_command.c | 2 +- src/bhyve/bhyve_parse_command.c | 4 +- src/conf/cpu_conf.c | 14 +- src/conf/storage_conf.c | 2 +- src/cpu/cpu_arm.c | 2 +- src/cpu/cpu_x86.c | 8 +- src/libvirt_private.syms | 11 +- src/libxl/libxl_conf.c | 8 +- src/libxl/xen_common.c | 8 +- src/libxl/xen_xl.c | 49 +-- src/lxc/lxc_native.c | 14 +- src/qemu/qemu_capabilities.c | 8 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_conf.c | 4 +- src/qemu/qemu_dbus.c | 19 +- src/qemu/qemu_dbus.h | 2 +- src/qemu/qemu_domain.c | 4 +- src/qemu/qemu_domain.h | 2 +- src/qemu/qemu_driver.c | 4 +- src/qemu/qemu_firmware.c | 5 +- src/qemu/qemu_interop_config.c | 13 +- src/qemu/qemu_migration.c | 10 +- src/qemu/qemu_monitor.c | 19 +- src/qemu/qemu_monitor.h | 2 +- src/qemu/qemu_monitor_json.c | 5 +- src/qemu/qemu_monitor_json.h | 4 +- src/qemu/qemu_namespace.c | 283 +++++++++--------- src/qemu/qemu_process.c | 37 +-- src/qemu/qemu_qapi.c | 2 +- src/qemu/qemu_slirp.c | 7 +- src/qemu/qemu_vhost_user.c | 4 +- src/rpc/virnetsocket.c | 4 +- src/storage/storage_backend_sheepdog.c | 15 +- src/storage/storage_backend_zfs.c | 6 +- .../storage_source_backingstore.c | 8 +- src/util/meson.build | 1 + src/util/vircgroup.c | 26 +- src/util/vircgroupv2.c | 2 +- src/util/vircommand.c | 2 +- src/util/virdevmapper.c | 2 +- src/util/virfile.c | 2 +- src/util/virfirewall.c | 2 +- src/util/virfirmware.c | 4 +- src/util/virglibutil.c | 27 ++ src/util/virglibutil.h | 28 ++ src/util/virhook.c | 15 +- src/util/virmacmap.c | 175 ++++++----- src/util/virmacmap.h | 6 +- src/util/virpolkit.c | 13 +- src/util/virprocess.c | 5 +- src/util/virresctrl.c | 17 +- src/util/virstring.c | 226 +------------- src/util/virstring.h | 24 +- src/vz/vz_sdk.c | 2 +- tests/qemufirmwaretest.c | 24 +- tests/qemumonitorjsontest.c | 6 +- tests/qemusecuritymock.c | 19 +- tests/qemusecuritytest.c | 14 +- tests/qemusecuritytest.h | 4 +- tests/qemuvhostusertest.c | 24 +- tests/qemuxml2argvtest.c | 2 +- tests/vboxsnapshotxmltest.c | 2 +- tests/virconftest.c | 4 +- tests/virfirewalltest.c | 30 +- tests/virmacmaptest.c | 21 +- tests/virstringtest.c | 211 +------------ tools/virsh-completer.c | 7 +- tools/virsh-domain.c | 14 +- tools/virsh-host.c | 4 +- tools/virt-login-shell-helper.c | 2 +- tools/vsh.c | 2 +- 71 files changed, 595 insertions(+), 965 deletions(-) create mode 100644 src/util/virglibutil.c create mode 100644 src/util/virglibutil.h -- 2.29.2