1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-20 07:59:00 +00:00

conf: move mode parsing of chardev source to separate function

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Pavel Hrdina 2017-08-18 17:32:27 +02:00
parent 3672fc99f4
commit 9ed225e910

View File

@ -10894,6 +10894,39 @@ virDomainChrDefParseTargetXML(virDomainChrDefPtr def,
} }
typedef enum {
VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT,
VIR_DOMAIN_CHR_SOURCE_MODE_BIND,
} virDomainChrSourceModeType;
/**
* virDomainChrSourceDefParseMode:
* @source: XML dom node
*
* Returns: -1 in case of error,
* virDomainChrSourceModeType in case of success
*/
static int
virDomainChrSourceDefParseMode(xmlNodePtr source)
{
char *mode = virXMLPropString(source, "mode");
int ret = -1;
if (!mode || STREQ(mode, "connect")) {
ret = VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT;
} else if (STREQ(mode, "bind")) {
ret = VIR_DOMAIN_CHR_SOURCE_MODE_BIND;
} else {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown source mode '%s'"), mode);
}
VIR_FREE(mode);
return ret;
}
static int static int
virDomainChrSourceDefParseProtocol(virDomainChrSourceDefPtr def, virDomainChrSourceDefParseProtocol(virDomainChrSourceDefPtr def,
xmlNodePtr protocol) xmlNodePtr protocol)
@ -10956,12 +10989,12 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
int nvmSeclabels) int nvmSeclabels)
{ {
int ret = -1; int ret = -1;
int mode = VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT;
char *bindHost = NULL; char *bindHost = NULL;
char *bindService = NULL; char *bindService = NULL;
char *connectHost = NULL; char *connectHost = NULL;
char *connectService = NULL; char *connectService = NULL;
char *path = NULL; char *path = NULL;
char *mode = NULL;
char *channel = NULL; char *channel = NULL;
char *master = NULL; char *master = NULL;
char *slave = NULL; char *slave = NULL;
@ -10993,8 +11026,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
} }
sourceParsed++; sourceParsed++;
if (!mode)
mode = virXMLPropString(cur, "mode");
if (!haveTLS) if (!haveTLS)
haveTLS = virXMLPropString(cur, "tls"); haveTLS = virXMLPropString(cur, "tls");
if (!tlsFromConfig) if (!tlsFromConfig)
@ -11013,29 +11044,29 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
(def->type != VIR_DOMAIN_CHR_TYPE_PTY || (def->type != VIR_DOMAIN_CHR_TYPE_PTY ||
!(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE))) !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)))
path = virXMLPropString(cur, "path"); path = virXMLPropString(cur, "path");
if (def->type == VIR_DOMAIN_CHR_TYPE_UNIX) {
if ((mode = virDomainChrSourceDefParseMode(cur)) < 0)
goto error;
}
break; break;
case VIR_DOMAIN_CHR_TYPE_UDP: case VIR_DOMAIN_CHR_TYPE_UDP:
case VIR_DOMAIN_CHR_TYPE_TCP: case VIR_DOMAIN_CHR_TYPE_TCP:
if (!mode || STREQ(mode, "connect")) { if ((mode = virDomainChrSourceDefParseMode(cur)) < 0)
goto error;
if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT) {
if (!connectHost) if (!connectHost)
connectHost = virXMLPropString(cur, "host"); connectHost = virXMLPropString(cur, "host");
if (!connectService) if (!connectService)
connectService = virXMLPropString(cur, "service"); connectService = virXMLPropString(cur, "service");
} else if (STREQ(mode, "bind")) { } else if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_BIND) {
if (!bindHost) if (!bindHost)
bindHost = virXMLPropString(cur, "host"); bindHost = virXMLPropString(cur, "host");
if (!bindService) if (!bindService)
bindService = virXMLPropString(cur, "service"); bindService = virXMLPropString(cur, "service");
} else {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown source mode '%s'"), mode);
goto error;
} }
if (def->type == VIR_DOMAIN_CHR_TYPE_UDP)
VIR_FREE(mode);
break; break;
case VIR_DOMAIN_CHR_TYPE_SPICEPORT: case VIR_DOMAIN_CHR_TYPE_SPICEPORT:
@ -11145,7 +11176,7 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
break; break;
case VIR_DOMAIN_CHR_TYPE_TCP: case VIR_DOMAIN_CHR_TYPE_TCP:
if (!mode || STREQ(mode, "connect")) { if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT) {
if (!connectHost) { if (!connectHost) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Missing source host attribute for char device")); _("Missing source host attribute for char device"));
@ -11163,7 +11194,7 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
def->data.tcp.service = connectService; def->data.tcp.service = connectService;
connectService = NULL; connectService = NULL;
def->data.tcp.listen = false; def->data.tcp.listen = false;
} else { } else if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_BIND) {
if (!bindHost) { if (!bindHost) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Missing source host attribute for char device")); _("Missing source host attribute for char device"));
@ -11234,7 +11265,7 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
goto error; goto error;
} }
def->data.nix.listen = mode != NULL && STRNEQ(mode, "connect"); def->data.nix.listen = mode == VIR_DOMAIN_CHR_SOURCE_MODE_BIND;
def->data.nix.path = path; def->data.nix.path = path;
path = NULL; path = NULL;
@ -11258,7 +11289,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
ret = 0; ret = 0;
cleanup: cleanup:
VIR_FREE(mode);
VIR_FREE(bindHost); VIR_FREE(bindHost);
VIR_FREE(bindService); VIR_FREE(bindService);
VIR_FREE(connectHost); VIR_FREE(connectHost);