Signed-off-by: Luke Yue <lukedyue(a)gmail.com>
---
As persistent_state and is bool type and its default value is false, so I
guess it's fine that it's not explicitly assigned with false.
link to context:
https://listman.redhat.com/archives/libvir-list/2021-November/msg00874.html
---
src/conf/domain_conf.c | 67 ++++++++++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 6 ++++
src/libvirt_private.syms | 2 ++
3 files changed, 75 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e19e3deb17..27643cab16 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16768,6 +16768,73 @@ virDomainVsockDefEquals(const virDomainVsockDef *a,
}
+static bool
+virDomainTPMDefEquals(const virDomainTPMDef *a,
+ const virDomainTPMDef *b)
+{
+ if (a->type != b->type)
+ return false;
+
+ if (a->model != b->model && a->model !=
VIR_DOMAIN_TPM_MODEL_DEFAULT)
+ return false;
+
+ if (a->version != b->version && a->version !=
VIR_DOMAIN_TPM_MODEL_DEFAULT)
+ return false;
+
+ if (a->type == VIR_DOMAIN_TPM_TYPE_PASSTHROUGH) {
+ if (STRNEQ_NULLABLE(a->data.passthrough.source->data.file.path,
+ b->data.passthrough.source->data.file.path))
+ return false;
+ } else {
+ if (a->data.emulator.hassecretuuid != b->data.emulator.hassecretuuid)
+ return false;
+
+ if (a->data.emulator.hassecretuuid == true &&
+ memcmp(a->data.emulator.secretuuid,
+ b->data.emulator.secretuuid,
+ VIR_UUID_BUFLEN))
+ return false;
+
+ if (a->data.emulator.persistent_state !=
+ b->data.emulator.persistent_state)
+ return false;
+ }
+
+ if (a->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+ !virDomainDeviceInfoAddressIsEqual(&a->info, &b->info))
+ return false;
+
+ return true;
+}
+
+
+ssize_t
+virDomainTPMDefFind(const virDomainDef *def,
+ const virDomainTPMDef *tpm)
+{
+ size_t i;
+
+ for (i = 0; i < def->ntpms; i++) {
+ if (virDomainTPMDefEquals(tpm, def->tpms[i]))
+ return i;
+ }
+
+ return -1;
+}
+
+
+virDomainTPMDef *
+virDomainTPMDefRemove(virDomainDef *def,
+ size_t idx)
+{
+ virDomainTPMDef *ret = def->tpms[idx];
+
+ VIR_DELETE_ELEMENT(def->tpms, idx, def->ntpms);
+
+ return ret;
+}
+
+
char *
virDomainDefGetDefaultEmulator(virDomainDef *def,
virCaps *caps)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 3bb1092b60..89031639cb 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3941,6 +3941,12 @@ bool virDomainVsockDefEquals(const virDomainVsockDef *a,
const virDomainVsockDef *b)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
+ssize_t virDomainTPMDefFind(const virDomainDef *def,
+ const virDomainTPMDef *tpm)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
+virDomainTPMDef *virDomainTPMDefRemove(virDomainDef *def, size_t idx)
+ ATTRIBUTE_NONNULL(1);
+
VIR_ENUM_DECL(virDomainTaint);
VIR_ENUM_DECL(virDomainTaintMessage);
VIR_ENUM_DECL(virDomainVirt);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index abdc8eaef7..b6b8606063 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -667,7 +667,9 @@ virDomainTimerTrackTypeFromString;
virDomainTimerTrackTypeToString;
virDomainTPMBackendTypeFromString;
virDomainTPMBackendTypeToString;
+virDomainTPMDefFind;
virDomainTPMDefFree;
+virDomainTPMDefRemove;
virDomainTPMModelTypeFromString;
virDomainTPMModelTypeToString;
virDomainTPMPcrBankTypeFromString;
--
2.35.1