[PATCH 0/5] Introduce 'virDomainQemuMonitorCommandWithFiles'
by Peter Krempa
I needed to do some tests where I wanted to pass FDs to qemu to see
how 'add-fd' and 'getfd' behave.
It may be useful for others who wish for any reason to pass FDs to QMP
commands.
Peter Krempa (5):
lib: Introduce 'virDomainQemuMonitorCommandWithFiles'
cmdStartGetFDs: Modernize
virsh-domain: Move and rename cmdStartGetFDs to virshFetchPassFdsList
virsh: Implement support for virDomainQemuMonitorCommandWithFiles
qemu: Implement qemuDomainQemuMonitorCommandWithFiles
docs/manpages/virsh.rst | 6 +-
include/libvirt/libvirt-qemu.h | 6 ++
src/driver-hypervisor.h | 8 +++
src/libvirt-qemu.c | 71 ++++++++++++++++++
src/libvirt_qemu.syms | 5 ++
src/qemu/qemu_driver.c | 34 +++++++--
src/qemu/qemu_monitor.c | 7 +-
src/qemu/qemu_monitor.h | 1 +
src/qemu/qemu_monitor_json.c | 6 +-
src/qemu/qemu_monitor_json.h | 2 +
src/qemu/qemu_monitor_text.c | 8 +--
src/qemu_protocol-structs | 9 +++
src/remote/qemu_protocol.x | 20 +++++-
src/remote/remote_daemon_dispatch.c | 42 +++++++++++
src/remote/remote_driver.c | 40 +++++++++++
tools/virsh-domain.c | 108 ++++++++++++++++------------
16 files changed, 313 insertions(+), 60 deletions(-)
--
2.34.1
2 years, 9 months
[PATCH v2 0/3] src: use virDomainJobData
by Kristina Hanicova
v1 is here:
https://listman.redhat.com/archives/libvir-list/2022-January/msg00958.html
diff to v1:
* rebase onto the current master
(bellow are the ones suggested by Jirka, thanks)
* removed check if callbacks exists when cb struct exists
* renamed functions from qemuDomainJobInfoX to qemuDomainJobDataX
* moved qemuDomainJobSetStatsType to qemu_domainjob.c, dropped "Private"
from the name and changed the prototype to take virDomainJobData*
I did not move qemuDomainJobDataUpdateTime to domain_job.c as Jirka
suggested, because I plan to move more functions to domain_job.c in the
next series. Stay tuned.
Kristina Hanicova (3):
qemu: use generalized virDomainJobData instead of qemuDomainJobInfo
qemu: make separate function for setting statsType of privateData
libxl: use virDomainJobData instead of virDomainJobInfo
src/hypervisor/domain_job.c | 78 ++++++++++
src/hypervisor/domain_job.h | 72 ++++++++++
src/hypervisor/meson.build | 1 +
src/libvirt_private.syms | 7 +
src/libxl/libxl_domain.c | 10 +-
src/libxl/libxl_domain.h | 3 +-
src/libxl/libxl_driver.c | 14 +-
src/qemu/qemu_backup.c | 42 +++---
src/qemu/qemu_backup.h | 4 +-
src/qemu/qemu_domainjob.c | 237 ++++++++++++++++---------------
src/qemu/qemu_domainjob.h | 57 ++------
src/qemu/qemu_driver.c | 111 ++++++++-------
src/qemu/qemu_migration.c | 189 ++++++++++++------------
src/qemu/qemu_migration.h | 4 +-
src/qemu/qemu_migration_cookie.c | 60 ++++----
src/qemu/qemu_migration_cookie.h | 2 +-
src/qemu/qemu_process.c | 23 +--
src/qemu/qemu_snapshot.c | 3 +-
18 files changed, 544 insertions(+), 373 deletions(-)
create mode 100644 src/hypervisor/domain_job.c
create mode 100644 src/hypervisor/domain_job.h
--
2.34.1
2 years, 9 months
[libvirt PATCH 00/11] virnetclient: Cleanups and improvement
by Andrea Bolognani
I initially started looking into this because of
https://gitlab.com/libvirt/libvirt/-/issues/273
I have now convinced myself that we don't need to change the way we
quote things, but in the process I have accumulated several
improvements and one bug fix.
Andrea Bolognani (11):
virbuftest: Increase coverage
virbuffer: Simplify virBufferEscapeShell()
virnetsockettest: Drop unnecessary backslash
virnetsockettest: Move opening quote
virnetsockettest: Improve indentation
virnetclient: Improve spacing of ssh script
virnetclient: Use 'if' consistently
virnetsockettest: Tweak input for test 7
virnetsockettest: Allow changing the proxy parameter
virnetsockettest: Increase coverage
virnetclient: Escape socket path
src/rpc/virnetclient.c | 20 +++---
src/util/virbuffer.c | 17 ++---
tests/virbuftest.c | 9 ++-
tests/virnetsockettest.c | 149 ++++++++++++++++++++++++++++-----------
4 files changed, 133 insertions(+), 62 deletions(-)
--
2.34.1
2 years, 9 months
[PATCH 0/3] ci: regenerate wit new lcitool and replace centos 8
by Peter Krempa
Centos-8 was killed off, so lcitool suggests using AlmaLinux 8 as a
replacement.
Re-generate the manifests with new lcitool.
Pipeline with these patches:
https://gitlab.com/pipo.sk/libvirt/-/pipelines/470699381
Peter Krempa (3):
ci: Regenerate with new lcitool
ci: Move from 'centos-8' to 'almalinux-8'
ci: Regenerate with new lcitool
.gitlab-ci.yml | 6 +-
...os-8.Dockerfile => almalinux-8.Dockerfile} | 2 +-
ci/containers/centos-stream-9.Dockerfile | 3 +
.../debian-10-cross-aarch64.Dockerfile | 3 +-
.../debian-10-cross-armv6l.Dockerfile | 3 +-
.../debian-10-cross-armv7l.Dockerfile | 3 +-
ci/containers/debian-10-cross-i686.Dockerfile | 3 +-
ci/containers/debian-10-cross-mips.Dockerfile | 3 +-
.../debian-10-cross-mips64el.Dockerfile | 3 +-
.../debian-10-cross-mipsel.Dockerfile | 3 +-
.../debian-10-cross-ppc64le.Dockerfile | 3 +-
.../debian-10-cross-s390x.Dockerfile | 3 +-
ci/containers/debian-10.Dockerfile | 3 +-
ci/containers/opensuse-leap-152.Dockerfile | 3 +-
ci/containers/ubuntu-1804.Dockerfile | 3 +-
ci/containers/ubuntu-2004.Dockerfile | 3 +-
ci/gitlab.yml | 74 ++++++++++---------
ci/manifest.yml | 2 +-
18 files changed, 59 insertions(+), 67 deletions(-)
rename ci/containers/{centos-8.Dockerfile => almalinux-8.Dockerfile} (98%)
--
2.34.1
2 years, 9 months
[libvirt PATCH v2 0/6] virnetclient: Cleanups and improvements
by Andrea Bolognani
Changes from [v1]:
* most patches have been pushed;
* reduce quoting for most users by only using it when it's
actually necessary to do so.
[v1] https://listman.redhat.com/archives/libvir-list/2022-February/msg00477.html
Andrea Bolognani (6):
virnetclient: Improve spacing of ssh script
virnetclient: Use 'if' consistently
virnetclient: Handle netcatPath presence all at once
virnetclient: Don't unnecessarily quote user-provided values
virnetsockettest: Test more socket paths
virnetclient: Escape socket path
src/rpc/virnetclient.c | 78 +++++++++++++++++++------------
tests/virnetsockettest.c | 99 ++++++++++++++++++++--------------------
2 files changed, 99 insertions(+), 78 deletions(-)
--
2.35.1
2 years, 9 months
[PATCH 0/6] qemu: Clean up monitor structs and assume QEMU_CAPS_CHARDEV_FD_PASS_COMMANDLINE in the hotplug test
by Peter Krempa
qemu-2.11 is the last one which couldn't do FD passing of unix listening
sockets. Since it's approaching time to remove the support for such old
version we need to make sure that some tests don't break.
Peter Krempa (6):
qemu: monitor: Drop old monitor fields from 'struct
_qemuMonitorMessage'
qemu: Privatize 'struct _qemuMonitorMessage'
qemu: monitor: Move declaration of struct _qemuMonitor to
qemu_monitor_priv.h
syntax-check: sc_avoid_write: Don't use blanket file exceptions
qemuhotplugmock: Mock fd passing to qemu via 'SCM_RIGHTS'
qemuhotplugtest: Assume QEMU_CAPS_CHARDEV_FD_PASS_COMMANDLINE
build-aux/syntax-check.mk | 6 +--
src/locking/lock_daemon.c | 4 +-
src/logging/log_daemon.c | 4 +-
src/lxc/lxc_controller.c | 2 +-
src/qemu/qemu_monitor.c | 54 +-----------------------
src/qemu/qemu_monitor.h | 19 ---------
src/qemu/qemu_monitor_json.c | 3 ++
src/qemu/qemu_monitor_priv.h | 77 ++++++++++++++++++++++++++++++++++
src/remote/remote_ssh_helper.c | 2 +-
src/rpc/virnetsocket.c | 4 +-
src/util/vircommand.c | 4 +-
src/util/virfdstream.c | 2 +-
src/util/virfile.c | 10 ++---
tests/qemucapsprobemock.c | 3 ++
tests/qemuhotplugmock.c | 14 +++++++
tests/qemuhotplugtest.c | 3 ++
tests/shunloadtest.c | 2 +-
tests/vircgroupmock.c | 2 +-
tests/virnettlssessiontest.c | 2 +-
tools/virsh-console.c | 2 +-
20 files changed, 124 insertions(+), 95 deletions(-)
--
2.34.1
2 years, 9 months
[PATCH 0/5] qemu: Test case modernization
by Peter Krempa
This is split out and updated based on comments on my RFC series bumping
minimum supported qemu version to 3.1.
- commit 1 is new
- commit 2 is a separated update to 'disk-error-policy' case as pure
update to 4.1 (as with others) would camouflage changes in placing of
rerror/werror properties
- commit 3 is a separated update to test cases having 'device_id' of
SCSI disk due to same reason as above
- commit 4 is now an update of disk test cases using qemu-2.12 caps to
qemu 4.1 caps. Now only test cases which which are not related to
disks are contained in this commit
- commit 5 is a similar update to a sev test case that was missing
Peter Krempa (5):
qemu: command: Inline qemuBuildDiskFrontendAttributeErrorPolicy
qemuxml2argvtest: Add pre-blockdev post-werror-move version of
'disk-error-policy'
qemuxml2argvtest: Update disk test cases having 'device_id' argument
of SCSI disk
qemuxml2argvtest: Bump versioned test variants for pre-blockdev disk
tests to 4.1.0
qemuxml2argvtest: Add newer variant of
'launch-security-sev-missing-platform-info'
src/qemu/qemu_command.c | 29 ++++------
...2.12.0.args => disk-aio.x86_64-4.1.0.args} | 4 +-
...sk-backing-chains-index.x86_64-2.12.0.args | 1 -
...sk-backing-chains-index.x86_64-4.1.0.args} | 4 +-
...k-backing-chains-noindex.x86_64-4.1.0.args | 1 +
...12.0.args => disk-cache.x86_64-3.1.0.args} | 4 +-
.../disk-cache.x86_64-4.1.0.args | 42 +++++++++++++++
...s => disk-cdrom-network.x86_64-4.1.0.args} | 4 +-
...args => disk-cdrom-tray.x86_64-4.1.0.args} | 4 +-
...12.0.args => disk-cdrom.x86_64-4.1.0.args} | 4 +-
...gs => disk-copy_on_read.x86_64-4.1.0.args} | 4 +-
...s => disk-detect-zeroes.x86_64-4.1.0.args} | 4 +-
.../disk-error-policy-s390x.s390x-4.0.0.args | 35 ++++++++++++
.../disk-error-policy.x86_64-4.1.0.args | 37 +++++++++++++
...args => disk-floppy-q35.x86_64-4.1.0.args} | 4 +-
...2.0.args => disk-floppy.x86_64-4.1.0.args} | 4 +-
...=> disk-network-gluster.x86_64-4.1.0.args} | 4 +-
...s => disk-network-iscsi.x86_64-4.1.0.args} | 4 +-
...rgs => disk-network-nbd.x86_64-4.1.0.args} | 4 +-
...rgs => disk-network-rbd.x86_64-4.1.0.args} | 4 +-
...> disk-network-sheepdog.x86_64-4.1.0.args} | 4 +-
...isk-network-source-auth.x86_64-4.1.0.args} | 4 +-
...isk-network-tlsx509-nbd.x86_64-4.1.0.args} | 4 +-
...sk-network-tlsx509-vxhs.x86_64-4.1.0.args} | 4 +-
...s => disk-readonly-disk.x86_64-4.1.0.args} | 4 +-
...2.0.args => disk-shared.x86_64-3.1.0.args} | 4 +-
.../disk-shared.x86_64-4.1.0.args | 41 ++++++++++++++
...irtio-scsi-reservations.x86_64-4.1.0.args} | 4 +-
...rgs => floppy-drive-fat.x86_64-4.1.0.args} | 4 +-
...ev-missing-platform-info.x86_64-6.0.0.args | 37 +++++++++++++
tests/qemuxml2argvtest.c | 53 +++++++++++--------
31 files changed, 278 insertions(+), 86 deletions(-)
rename tests/qemuxml2argvdata/{disk-aio.x86_64-2.12.0.args => disk-aio.x86_64-4.1.0.args} (94%)
delete mode 120000 tests/qemuxml2argvdata/disk-backing-chains-index.x86_64-2.12.0.args
rename tests/qemuxml2argvdata/{disk-backing-chains-noindex.x86_64-2.12.0.args => disk-backing-chains-index.x86_64-4.1.0.args} (96%)
create mode 120000 tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-4.1.0.args
rename tests/qemuxml2argvdata/{disk-cache.x86_64-2.12.0.args => disk-cache.x86_64-3.1.0.args} (96%)
create mode 100644 tests/qemuxml2argvdata/disk-cache.x86_64-4.1.0.args
rename tests/qemuxml2argvdata/{disk-cdrom-network.x86_64-2.12.0.args => disk-cdrom-network.x86_64-4.1.0.args} (94%)
rename tests/qemuxml2argvdata/{disk-cdrom-tray.x86_64-2.12.0.args => disk-cdrom-tray.x86_64-4.1.0.args} (94%)
rename tests/qemuxml2argvdata/{disk-cdrom.x86_64-2.12.0.args => disk-cdrom.x86_64-4.1.0.args} (94%)
rename tests/qemuxml2argvdata/{disk-copy_on_read.x86_64-2.12.0.args => disk-copy_on_read.x86_64-4.1.0.args} (95%)
rename tests/qemuxml2argvdata/{disk-detect-zeroes.x86_64-2.12.0.args => disk-detect-zeroes.x86_64-4.1.0.args} (94%)
create mode 100644 tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-4.0.0.args
create mode 100644 tests/qemuxml2argvdata/disk-error-policy.x86_64-4.1.0.args
rename tests/qemuxml2argvdata/{disk-floppy-q35.x86_64-2.12.0.args => disk-floppy-q35.x86_64-4.1.0.args} (94%)
rename tests/qemuxml2argvdata/{disk-floppy.x86_64-2.12.0.args => disk-floppy.x86_64-4.1.0.args} (94%)
rename tests/qemuxml2argvdata/{disk-network-gluster.x86_64-2.12.0.args => disk-network-gluster.x86_64-4.1.0.args} (95%)
rename tests/qemuxml2argvdata/{disk-network-iscsi.x86_64-2.12.0.args => disk-network-iscsi.x86_64-4.1.0.args} (97%)
rename tests/qemuxml2argvdata/{disk-network-nbd.x86_64-2.12.0.args => disk-network-nbd.x86_64-4.1.0.args} (95%)
rename tests/qemuxml2argvdata/{disk-network-rbd.x86_64-2.12.0.args => disk-network-rbd.x86_64-4.1.0.args} (97%)
rename tests/qemuxml2argvdata/{disk-network-sheepdog.x86_64-2.12.0.args => disk-network-sheepdog.x86_64-4.1.0.args} (94%)
rename tests/qemuxml2argvdata/{disk-network-source-auth.x86_64-2.12.0.args => disk-network-source-auth.x86_64-4.1.0.args} (96%)
rename tests/qemuxml2argvdata/{disk-network-tlsx509-nbd.x86_64-2.12.0.args => disk-network-tlsx509-nbd.x86_64-4.1.0.args} (95%)
rename tests/qemuxml2argvdata/{disk-network-tlsx509-vxhs.x86_64-2.12.0.args => disk-network-tlsx509-vxhs.x86_64-4.1.0.args} (97%)
rename tests/qemuxml2argvdata/{disk-readonly-disk.x86_64-2.12.0.args => disk-readonly-disk.x86_64-4.1.0.args} (94%)
rename tests/qemuxml2argvdata/{disk-shared.x86_64-2.12.0.args => disk-shared.x86_64-3.1.0.args} (95%)
create mode 100644 tests/qemuxml2argvdata/disk-shared.x86_64-4.1.0.args
rename tests/qemuxml2argvdata/{disk-virtio-scsi-reservations.x86_64-2.12.0.args => disk-virtio-scsi-reservations.x86_64-4.1.0.args} (95%)
rename tests/qemuxml2argvdata/{floppy-drive-fat.x86_64-2.12.0.args => floppy-drive-fat.x86_64-4.1.0.args} (93%)
create mode 100644 tests/qemuxml2argvdata/launch-security-sev-missing-platform-info.x86_64-6.0.0.args
--
2.34.1
2 years, 9 months
[PATCH 0/2] tests: Don't destroy locked mutexes
by Michal Privoznik
I've rewritten our virMutexes to check for failures [1] and saw couple
of problems. In most cases we are destroying a locked mutex which these
patches aim to fix. Then we have virLogLock() which is locked in
virFork() and then unlocked from child (a different process) which is
problematic. Pthread doesn't like it when one thread locks a mutex only
so that another one unlocks it. Semaphores don't care.
Anyway, leave virLogMutex aside, patches here fix problems at hand.
BTW: commits v8.0.0-267-g39ac285c6b and v8.0.0-236-ga7201789ab were
spotted because of this branch of mine.
1: https://gitlab.com/MichalPrivoznik/libvirt/-/commits/tests_mutext/
Michal Prívozník (2):
tests: Track if @vm was created by qemuMonitorCommonTestNew()
tests: Destroy domain object properly
tests/qemuhotplugtest.c | 13 +++++--------
tests/qemumonitortestutils.c | 7 ++++++-
tests/qemusecuritytest.c | 3 ++-
tests/qemuxml2argvtest.c | 22 +++++++++++++---------
4 files changed, 26 insertions(+), 19 deletions(-)
--
2.34.1
2 years, 9 months
[PATCH v3 0/7] support mode option for dirtyrate calculation
by huangy81@chinatelecom.cn
From: Hyman Huang(黄勇) <huangy81(a)chinatelecom.cn>
v3:
- Rebase the master
- [PATCH v2 2/6]: Fix the usage of virQEMUCapsGet
- [PATCH v2 4/6]: Fix the cleanup missed in qemuDomainStartDirtyRateCalc
- [PATCH v2 4/6]: Move all blocks below ACL check
- [PATCH v2 4/6]: Make the qemuMonitorJSONStartDirtyRateCalc cleaner by
merging the different case of qemuMonitorJSONMakeCommand
- [PATCH v2 4/6]: Code clean, make the error message not be line-broken
- [PATCH v2 5/6]: Abstract the enum definition into a standalone commit
- [PATCH v2 5/6]: Move the validations code above calculating flags block
- [PATCH v2 6/6]: Change the type of 'value' field to unsigned in
struct qemuMonitorDirtyRateVcpu
- [PATCH v2 6/6]: Rename the enum type qemuMonitorDirtyRateCalcMode to
virDomainDirtyRateCalcMode
- [PATCH v2 6/6]: Code clean, align the code in qemuDomainGetStatsDirtyRate
Thanks Peter for quick and precise response, please review.
Regards
Yong
v2:
Rebase master and fix confilicts with commit
"Introduce QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_PREALLOC"
Thanks !
v1:
This patchset introduce mode option as the supplement of
qemuDomainStartDirtyRateCalc api, add calc_mode for dirtyrate
statistics correspondingly.
Qemu add mode parameter for calc-dirty-rate command since >= 6.2.0,
either of these three mode "page-sampling, dirty-bitmap, dirty-ring"
can be specified when calculating dirty page rate.
Page sampling is the original mode and used as default mode.
Dirty bitmap mode use kvm log sync api to fetch the dirty-bitmap
and count the increased 1 bits number during measurement, thus,
calculate the dirty page rate.
Dirty ring mode use the dirty-ring mechanism implemented in Qemu
which can count the increased dirty page on virtual cpu granularity,
thus, calculate the per-vcpu dirty page rate.
These three calculation mode can be used in different scenarios, and
the dirty-bitmap, dirty-ring mode may be more accurate to a certain
degree. So maybe it's time to support the mode option for dirtyrate
calculation.
This series make main modifications as the following:
1. introduce QEMU_CAPS_CALC_DIRTY_RATE capability to probe
calc-dirty-rate command in case of failure since it just
introduced since >= 5.2.0
2. introduce QEMU_CAPS_DIRTYRATE_MODE capability to probe
mode option of calc-dirty-rate command in case of failure, same
as 1.
3. implement mode option support for dirtyrate calculation.
Please review, thanks !
Best Regards !
Hyman Huang(黄勇) (7):
qemu_capabilities: Introduce QEMU_CAPS_CALC_DIRTY_RATE capability
qemu_driver: Probe capability before calculating dirty page rate
qemu_capabilities: Introduce QEMU_CAPS_DIRTYRATE_MODE capability
include: Introduce enum for qemuDomainStartDirtyRateCalc
qemu_driver: Add mode parameter to qemuDomainStartDirtyRateCalc
virsh: Add mode option to domdirtyrate-calc virsh api
qemu_driver: Add calc_mode for dirtyrate statistics
docs/manpages/virsh.rst | 7 ++-
include/libvirt/libvirt-domain.h | 24 ++++++++
src/libvirt-domain.c | 17 +++++-
src/qemu/qemu_capabilities.c | 4 ++
src/qemu/qemu_capabilities.h | 2 +
src/qemu/qemu_driver.c | 48 +++++++++++++++-
src/qemu/qemu_monitor.c | 5 +-
src/qemu/qemu_monitor.h | 13 ++++-
src/qemu/qemu_monitor_json.c | 69 ++++++++++++++++++++++-
src/qemu/qemu_monitor_json.h | 3 +-
tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml | 1 +
tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml | 1 +
tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml | 1 +
tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml | 2 +
tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml | 2 +
tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml | 2 +
tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml | 2 +
tools/virsh-domain.c | 28 ++++++++-
25 files changed, 226 insertions(+), 12 deletions(-)
--
1.8.3.1
2 years, 9 months
[PATCH 0/2] qemu: domain: Move and rename qemuDomainStorageIdNew/Reset
by Peter Krempa
In a review adding similar APIs I was asked to use 'ID' instead of 'Id'.
Rename the existing helpers.
Patch 1 is a second version as 'qemuDomainStorageIdNew' can be
unexported too.
Peter Krempa (2):
qemu: domain: Move and unexport 'qemuDomainStorageIdNew/Reset'
qemu: domain: Change 'Id' to 'ID' in qemuDomainStorageIdNew/Reset
src/qemu/qemu_domain.c | 62 +++++++++++++++++++++---------------------
src/qemu/qemu_domain.h | 3 --
2 files changed, 31 insertions(+), 34 deletions(-)
--
2.34.1
2 years, 9 months