After previous cleanups, the virDomainFSDefParseXML() function
uses a mixture of virXMLProp*() and the old virXMLPropString() +
virXXXTypeFromString() patterns. Rework it so that virXMLProp*()
is used.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/bhyve/bhyve_command.c | 2 +-
src/conf/domain_conf.c | 127 +++++++++++++--------------------
src/conf/domain_conf.h | 10 +--
src/lxc/lxc_container.c | 3 +
src/qemu/qemu_domain_address.c | 2 +-
5 files changed, 60 insertions(+), 84 deletions(-)
diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
index 3368d20a04..af8ec30fe7 100644
--- a/src/bhyve/bhyve_command.c
+++ b/src/bhyve/bhyve_command.c
@@ -577,7 +577,7 @@ bhyveBuildFSArgStr(const virDomainDef *def G_GNUC_UNUSED,
{
g_auto(virBuffer) params = VIR_BUFFER_INITIALIZER;
- switch ((virDomainFSType) fs->type) {
+ switch (fs->type) {
case VIR_DOMAIN_FS_TYPE_MOUNT:
break;
case VIR_DOMAIN_FS_TYPE_BLOCK:
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 30f0a13e2a..f4b05b1c21 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9759,86 +9759,66 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt,
virDomainFSDef *def;
xmlNodePtr driver_node = NULL;
xmlNodePtr source_node = NULL;
- g_autofree char *type = NULL;
g_autofree char *source = NULL;
g_autofree char *target = NULL;
g_autofree char *format = NULL;
- g_autofree char *accessmode = NULL;
g_autofree char *usage = NULL;
g_autofree char *units = NULL;
- g_autofree char *model = NULL;
- g_autofree char *multidevs = NULL;
- g_autofree char *fmode = NULL;
- g_autofree char *dmode = NULL;
g_autofree char *sock = NULL;
+ int rv;
ctxt->node = node;
if (!(def = virDomainFSDefNew(xmlopt)))
return NULL;
- type = virXMLPropString(node, "type");
- if (type) {
- if ((def->type = virDomainFSTypeFromString(type)) < 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown filesystem type '%s'"), type);
- goto error;
- }
- } else {
- def->type = VIR_DOMAIN_FS_TYPE_MOUNT;
- }
+ if (virXMLPropEnum(node, "type",
+ virDomainFSTypeFromString,
+ VIR_XML_PROP_NONE,
+ &def->type) < 0)
+ goto error;
- accessmode = virXMLPropString(node, "accessmode");
- if (accessmode) {
- if ((def->accessmode = virDomainFSAccessModeTypeFromString(accessmode)) <
0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown accessmode '%s'"), accessmode);
- goto error;
- }
- } else {
- def->accessmode = VIR_DOMAIN_FS_ACCESSMODE_DEFAULT;
- }
+ if (virXMLPropEnum(node, "accessmode",
+ virDomainFSAccessModeTypeFromString,
+ VIR_XML_PROP_NONE,
+ &def->accessmode) < 0)
+ goto error;
- fmode = virXMLPropString(node, "fmode");
- if (fmode) {
- if ((virStrToLong_uip(fmode, NULL, 8, &def->fmode) < 0) ||
- (def->fmode > 0777)) {
+ if ((rv = virXMLPropUInt(node, "fmode", 8,
+ VIR_XML_PROP_NONE,
+ &def->fmode)) < 0) {
+ goto error;
+ } else if (rv > 0) {
+ if (def->fmode > 0777) {
virReportError(VIR_ERR_XML_ERROR,
- _("invalid fmode: '%s'"), fmode);
+ _("invalid fmode: '0%o'"), def->fmode);
goto error;
}
}
- dmode = virXMLPropString(node, "dmode");
- if (dmode) {
- if ((virStrToLong_uip(dmode, NULL, 8, &def->dmode) < 0) ||
- (def->dmode > 0777)) {
+ if ((rv = virXMLPropUInt(node, "dmode", 8,
+ VIR_XML_PROP_NONE,
+ &def->dmode)) < 0) {
+ goto error;
+ } else if (rv > 0) {
+ if (def->dmode > 0777) {
virReportError(VIR_ERR_XML_ERROR,
- _("invalid dmode: '%s'"), dmode);
+ _("invalid dmode: '0%o'"), def->dmode);
goto error;
}
}
- model = virXMLPropString(node, "model");
- if (model) {
- if ((def->model = virDomainFSModelTypeFromString(model)) < 0 ||
- def->model == VIR_DOMAIN_FS_MODEL_DEFAULT) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown model '%s'"), model);
- goto error;
- }
- }
+ if (virXMLPropEnum(node, "model",
+ virDomainFSModelTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->model) < 0)
+ goto error;
- multidevs = virXMLPropString(node, "multidevs");
- if (multidevs) {
- if ((def->multidevs = virDomainFSMultidevsTypeFromString(multidevs)) < 0)
{
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown multidevs '%s'"), multidevs);
- goto error;
- }
- } else {
- def->multidevs = VIR_DOMAIN_FS_MULTIDEVS_DEFAULT;
- }
+ if (virXMLPropEnum(node, "multidevs",
+ virDomainFSMultidevsTypeFromString,
+ VIR_XML_PROP_NONE,
+ &def->multidevs) < 0)
+ goto error;
if (virParseScaledValue("./space_hard_limit[1]",
NULL, ctxt, &def->space_hard_limit,
@@ -9901,11 +9881,10 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt,
if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
g_autofree char *queue_size = virXPathString("string(./driver/@queue)",
ctxt);
g_autofree char *binary = virXPathString("string(./binary/@path)",
ctxt);
- g_autofree char *cache = virXPathString("string(./binary/cache/@mode)",
ctxt);
- g_autofree char *sandbox =
virXPathString("string(./binary/sandbox/@mode)", ctxt);
xmlNodePtr binary_node = virXPathNode("./binary", ctxt);
xmlNodePtr binary_lock_node = virXPathNode("./binary/lock", ctxt);
- int val;
+ xmlNodePtr binary_cache_node = virXPathNode("./binary/cache", ctxt);
+ xmlNodePtr binary_sandbox_node = virXPathNode("./binary/sandbox",
ctxt);
if (queue_size && virStrToLong_ull(queue_size, NULL, 10,
&def->queue_size) < 0) {
virReportError(VIR_ERR_XML_ERROR,
@@ -9932,26 +9911,17 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt,
&def->flock) < 0)
goto error;
- if (cache) {
- if ((val = virDomainFSCacheModeTypeFromString(cache)) <= 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("cannot parse cache mode '%s' for
virtiofs"),
- cache);
- goto error;
- }
- def->cache = val;
- }
-
- if (sandbox) {
- if ((val = virDomainFSSandboxModeTypeFromString(sandbox)) <= 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("cannot parse sandbox mode '%s' for
virtiofs"),
- sandbox);
- goto error;
- }
- def->sandbox = val;
- }
+ if (virXMLPropEnum(binary_cache_node, "mode",
+ virDomainFSCacheModeTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->cache) < 0)
+ goto error;
+ if (virXMLPropEnum(binary_sandbox_node, "mode",
+ virDomainFSSandboxModeTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->sandbox) < 0)
+ goto error;
}
if (source == NULL && def->type != VIR_DOMAIN_FS_TYPE_RAM
@@ -24188,6 +24158,9 @@ virDomainFSDefFormat(virBuffer *buf,
virBufferEscapeString(buf, " volume='%s'",
def->src->srcpool->volume);
virBufferAddLit(buf, "/>\n");
break;
+
+ case VIR_DOMAIN_FS_TYPE_LAST:
+ break;
}
virBufferEscapeString(buf, "<target dir='%s'/>\n",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 584e15b6c7..bbb2f463e2 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -787,7 +787,7 @@ struct _virDomainControllerDef {
/* Types of disk backends */
typedef enum {
- VIR_DOMAIN_FS_TYPE_MOUNT, /* Mounts (binds) a host dir on a guest dir */
+ VIR_DOMAIN_FS_TYPE_MOUNT = 0, /* Mounts (binds) a host dir on a guest dir */
VIR_DOMAIN_FS_TYPE_BLOCK, /* Mounts a host block dev on a guest dir */
VIR_DOMAIN_FS_TYPE_FILE, /* Loopback mounts a host file on a guest dir */
VIR_DOMAIN_FS_TYPE_TEMPLATE, /* Expands a OS template to a guest dir */
@@ -867,15 +867,15 @@ typedef enum {
} virDomainFSSandboxMode;
struct _virDomainFSDef {
- int type;
+ virDomainFSType type;
virDomainFSDriverType fsdriver;
- int accessmode; /* enum virDomainFSAccessMode */
+ virDomainFSAccessMode accessmode;
int format; /* virStorageFileFormat */
virDomainFSWrpolicy wrpolicy;
- int model; /* virDomainFSModel */
+ virDomainFSModel model;
unsigned int fmode;
unsigned int dmode;
- int multidevs; /* virDomainFSMultidevs */
+ virDomainFSMultidevs multidevs;
unsigned long long usage; /* in bytes */
virStorageSource *src;
char *sock;
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
index 3f38c55fc6..d5410e9fa6 100644
--- a/src/lxc/lxc_container.c
+++ b/src/lxc/lxc_container.c
@@ -1447,6 +1447,9 @@ static int lxcContainerMountFS(virDomainFSDef *fs,
_("Unexpected filesystem type %s"),
virDomainFSTypeToString(fs->type));
return -1;
+ case VIR_DOMAIN_FS_TYPE_TEMPLATE:
+ case VIR_DOMAIN_FS_TYPE_VOLUME:
+ case VIR_DOMAIN_FS_TYPE_LAST:
default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Cannot mount filesystem type %s"),
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 18fc34d049..3e6eed6ec9 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -705,7 +705,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
case VIR_DOMAIN_FS_DRIVER_TYPE_PATH:
case VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE:
/* these drivers are handled by virtio-9p-pci */
- switch ((virDomainFSModel) dev->data.fs->model) {
+ switch (dev->data.fs->model) {
case VIR_DOMAIN_FS_MODEL_VIRTIO_TRANSITIONAL:
/* Transitional devices only work in conventional PCI slots */
return pciFlags;
--
2.34.1