Use a pointer and the virDomainChrSourceDefNew() function in order to
allocate the structure for _virDomainSmartcardDef.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/domain_audit.c | 2 +-
src/conf/domain_conf.c | 25 ++++++++++++++++---------
src/conf/domain_conf.h | 2 +-
src/qemu/qemu_command.c | 2 +-
src/security/security_selinux.c | 4 ++--
5 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
index 314dee7..2decf02 100644
--- a/src/conf/domain_audit.c
+++ b/src/conf/domain_audit.c
@@ -218,7 +218,7 @@ virDomainAuditSmartcard(virDomainObjPtr vm,
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
virDomainAuditGenericDev(vm, "smartcard", NULL,
-
virDomainAuditChardevPath(&def->data.passthru),
+ virDomainAuditChardevPath(def->data.passthru),
reason, success);
break;
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 748ffd5..7e2cc0c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2146,7 +2146,7 @@ void virDomainSmartcardDefFree(virDomainSmartcardDefPtr def)
break;
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- virDomainChrSourceDefClear(&def->data.passthru);
+ virDomainChrSourceDefFree(def->data.passthru);
break;
default:
@@ -10489,7 +10489,8 @@ virDomainChrDefParseXML(virDomainXMLOptionPtr xmlopt,
}
static virDomainSmartcardDefPtr
-virDomainSmartcardDefParseXML(xmlNodePtr node,
+virDomainSmartcardDefParseXML(virDomainXMLOptionPtr xmlopt,
+ xmlNodePtr node,
unsigned int flags)
{
xmlNodePtr cur;
@@ -10569,7 +10570,11 @@ virDomainSmartcardDefParseXML(xmlNodePtr node,
"device type attribute"));
goto error;
}
- if ((def->data.passthru.type = virDomainChrTypeFromString(type)) < 0) {
+
+ if (!(def->data.passthru = virDomainChrSourceDefNew(xmlopt)))
+ goto error;
+
+ if ((def->data.passthru->type = virDomainChrTypeFromString(type)) < 0)
{
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown type presented to host for "
"character device: %s"), type);
@@ -10577,12 +10582,12 @@ virDomainSmartcardDefParseXML(xmlNodePtr node,
}
cur = node->children;
- if (virDomainChrSourceDefParseXML(&def->data.passthru, cur, flags,
+ if (virDomainChrSourceDefParseXML(def->data.passthru, cur, flags,
NULL, NULL, NULL, 0) < 0)
goto error;
- if (def->data.passthru.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) {
- def->data.passthru.data.spicevmc
+ if (def->data.passthru->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) {
+ def->data.passthru->data.spicevmc
= VIR_DOMAIN_CHR_SPICEVMC_SMARTCARD;
}
@@ -13595,7 +13600,8 @@ virDomainDeviceDefParse(const char *xmlStr,
goto error;
break;
case VIR_DOMAIN_DEVICE_SMARTCARD:
- if (!(dev->data.smartcard = virDomainSmartcardDefParseXML(node, flags)))
+ if (!(dev->data.smartcard = virDomainSmartcardDefParseXML(xmlopt, node,
+ flags)))
goto error;
break;
case VIR_DOMAIN_DEVICE_MEMBALLOON:
@@ -17189,7 +17195,8 @@ virDomainDefParseXML(xmlDocPtr xml,
goto error;
for (i = 0; i < n; i++) {
- virDomainSmartcardDefPtr card = virDomainSmartcardDefParseXML(nodes[i],
+ virDomainSmartcardDefPtr card = virDomainSmartcardDefParseXML(xmlopt,
+ nodes[i],
flags);
if (!card)
goto error;
@@ -21661,7 +21668,7 @@ virDomainSmartcardDefFormat(virBufferPtr buf,
break;
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- if (virDomainChrSourceDefFormat(buf, NULL, &def->data.passthru, false,
+ if (virDomainChrSourceDefFormat(buf, NULL, def->data.passthru, false,
flags) < 0)
return -1;
break;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 8738c80..c6654c2 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1159,7 +1159,7 @@ struct _virDomainSmartcardDef {
char *file[VIR_DOMAIN_SMARTCARD_NUM_CERTIFICATES];
char *database;
} cert; /* 'host-certificates' */
- virDomainChrSourceDef passthru; /* 'passthrough' */
+ virDomainChrSourceDefPtr passthru; /* 'passthrough' */
} data;
virDomainDeviceInfo info;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index be3796d..760c685 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8346,7 +8346,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
}
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
- &smartcard->data.passthru,
+ smartcard->data.passthru,
smartcard->info.alias,
qemuCaps, true))) {
virBufferFreeAndReset(&opt);
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
index a98e0c0..5dad22c 100644
--- a/src/security/security_selinux.c
+++ b/src/security/security_selinux.c
@@ -1957,7 +1957,7 @@ virSecuritySELinuxRestoreSecuritySmartcardCallback(virDomainDefPtr
def,
return virSecuritySELinuxRestoreFileLabel(mgr, database);
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- return virSecuritySELinuxRestoreChardevLabel(mgr, def, NULL,
&dev->data.passthru);
+ return virSecuritySELinuxRestoreChardevLabel(mgr, def, NULL,
dev->data.passthru);
default:
virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -2348,7 +2348,7 @@ virSecuritySELinuxSetSecuritySmartcardCallback(virDomainDefPtr def,
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
return virSecuritySELinuxSetChardevLabel(mgr, def, NULL,
- &dev->data.passthru);
+ dev->data.passthru);
default:
virReportError(VIR_ERR_INTERNAL_ERROR,
--
2.7.4