util: Introduce virStringParseYesNo helper

This helper performs a conversion from a "yes|no" string to a
corresponding boolean. This allows us to drop several repetitive
if-then-else string->bool conversion blocks.

Signed-off-by: Shotaro Gotanda <g.sho1500@gmail.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
Shotaro Gotanda 2019-03-13 15:30:10 +09:00 committed by Erik Skultety
parent ff86e79faf
commit 612c0d4bb8
5 changed files with 33 additions and 35 deletions

View File

@ -8465,11 +8465,7 @@ virSecurityLabelDefParseXML(xmlXPathContextPtr ctxt,
p = virXMLPropStringLimit(ctxt->node, "relabel", p = virXMLPropStringLimit(ctxt->node, "relabel",
VIR_SECURITY_LABEL_BUFLEN-1); VIR_SECURITY_LABEL_BUFLEN-1);
if (p) { if (p) {
if (STREQ(p, "yes")) { if (virStringParseYesNo(p, &seclabel->relabel) < 0) {
seclabel->relabel = true;
} else if (STREQ(p, "no")) {
seclabel->relabel = false;
} else {
virReportError(VIR_ERR_XML_ERROR, virReportError(VIR_ERR_XML_ERROR,
_("invalid security relabel value %s"), p); _("invalid security relabel value %s"), p);
goto error; goto error;
@ -8699,11 +8695,7 @@ virSecurityDeviceLabelDefParseXML(virSecurityDeviceLabelDefPtr **seclabels_rtn,
relabel = virXMLPropString(list[i], "relabel"); relabel = virXMLPropString(list[i], "relabel");
if (relabel != NULL) { if (relabel != NULL) {
if (STREQ(relabel, "yes")) { if (virStringParseYesNo(relabel, &seclabels[i]->relabel) < 0) {
seclabels[i]->relabel = true;
} else if (STREQ(relabel, "no")) {
seclabels[i]->relabel = false;
} else {
virReportError(VIR_ERR_XML_ERROR, virReportError(VIR_ERR_XML_ERROR,
_("invalid security relabel value %s"), _("invalid security relabel value %s"),
relabel); relabel);
@ -13706,11 +13698,7 @@ virDomainGraphicsDefParseXMLSDL(virDomainGraphicsDefPtr def,
ctxt->node = node; ctxt->node = node;
if (fullscreen != NULL) { if (fullscreen != NULL) {
if (STREQ(fullscreen, "yes")) { if (virStringParseYesNo(fullscreen, &def->data.sdl.fullscreen) < 0) {
def->data.sdl.fullscreen = true;
} else if (STREQ(fullscreen, "no")) {
def->data.sdl.fullscreen = false;
} else {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("unknown fullscreen value '%s'"), fullscreen); _("unknown fullscreen value '%s'"), fullscreen);
goto cleanup; goto cleanup;
@ -13798,11 +13786,7 @@ virDomainGraphicsDefParseXMLDesktop(virDomainGraphicsDefPtr def,
VIR_AUTOFREE(char *) fullscreen = virXMLPropString(node, "fullscreen"); VIR_AUTOFREE(char *) fullscreen = virXMLPropString(node, "fullscreen");
if (fullscreen != NULL) { if (fullscreen != NULL) {
if (STREQ(fullscreen, "yes")) { if (virStringParseYesNo(fullscreen, &def->data.desktop.fullscreen) < 0) {
def->data.desktop.fullscreen = true;
} else if (STREQ(fullscreen, "no")) {
def->data.desktop.fullscreen = false;
} else {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("unknown fullscreen value '%s'"), fullscreen); _("unknown fullscreen value '%s'"), fullscreen);
return -1; return -1;
@ -15511,11 +15495,7 @@ virDomainRedirFilterUSBDevDefParseXML(xmlNodePtr node)
allow = virXMLPropString(node, "allow"); allow = virXMLPropString(node, "allow");
if (allow) { if (allow) {
if (STREQ(allow, "yes")) { if (virStringParseYesNo(allow, &def->allow) < 0) {
def->allow = true;
} else if (STREQ(allow, "no")) {
def->allow = false;
} else {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Invalid allow value, either 'yes' or 'no'")); _("Invalid allow value, either 'yes' or 'no'"));
goto error; goto error;

View File

@ -147,11 +147,7 @@ secretXMLParseNode(xmlDocPtr xml, xmlNodePtr root)
prop = virXPathString("string(./@ephemeral)", ctxt); prop = virXPathString("string(./@ephemeral)", ctxt);
if (prop != NULL) { if (prop != NULL) {
if (STREQ(prop, "yes")) { if (virStringParseYesNo(prop, &def->isephemeral) < 0) {
def->isephemeral = true;
} else if (STREQ(prop, "no")) {
def->isephemeral = false;
} else {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
_("invalid value of 'ephemeral'")); _("invalid value of 'ephemeral'"));
goto cleanup; goto cleanup;
@ -161,11 +157,7 @@ secretXMLParseNode(xmlDocPtr xml, xmlNodePtr root)
prop = virXPathString("string(./@private)", ctxt); prop = virXPathString("string(./@private)", ctxt);
if (prop != NULL) { if (prop != NULL) {
if (STREQ(prop, "yes")) { if (virStringParseYesNo(prop, &def->isprivate) < 0) {
def->isprivate = true;
} else if (STREQ(prop, "no")) {
def->isprivate = false;
} else {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
_("invalid value of 'private'")); _("invalid value of 'private'"));
goto cleanup; goto cleanup;

View File

@ -2988,6 +2988,7 @@ virStringListRemove;
virStringMatch; virStringMatch;
virStringMatchesNameSuffix; virStringMatchesNameSuffix;
virStringParsePort; virStringParsePort;
virStringParseYesNo;
virStringReplace; virStringReplace;
virStringSearch; virStringSearch;
virStringSortCompare; virStringSortCompare;

View File

@ -1548,3 +1548,25 @@ virStringParsePort(const char *str,
return 0; return 0;
} }
/**
* virStringParseYesNo:
* @str: "yes|no" to parse, must not be NULL.
* @result: pointer to the boolean result of @str conversion
*
* Parses a "yes|no" string and converts it into a boolean.
*
* Returns 0 on success and -1 on error.
*/
int virStringParseYesNo(const char *str, bool *result)
{
if (STREQ(str, "yes"))
*result = true;
else if (STREQ(str, "no"))
*result = false;
else
return -1;
return 0;
}

View File

@ -316,6 +316,9 @@ int virStringParsePort(const char *str,
unsigned int *port) unsigned int *port)
ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virStringParseYesNo(const char *str,
bool *result)
ATTRIBUTE_RETURN_CHECK;
/** /**
* VIR_AUTOSTRINGLIST: * VIR_AUTOSTRINGLIST:
* *