On 2/6/21 9:32 AM, Peter Krempa wrote:
> 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
>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
except for the first patch.
Michal