From 9275def59484d7ffaf2f5f59da477096740c50b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 14 Feb 2018 09:43:59 +0000 Subject: [PATCH] util: handle missing switch enum cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensure all enum cases are listed in switch statements. Reviewed-by: John Ferlan Signed-off-by: Daniel P. Berrangé --- src/util/virconf.c | 11 ++++++++++- src/util/virerror.h | 2 +- src/util/virfirewall.c | 6 ++++-- src/util/virlog.c | 18 ++++++++++++++---- src/util/virnetdevvportprofile.c | 10 +++++++++- src/util/virnetdevvportprofile.h | 4 ++-- 6 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/util/virconf.c b/src/util/virconf.c index a82a509ca3..e0a3fd12c0 100644 --- a/src/util/virconf.c +++ b/src/util/virconf.c @@ -296,7 +296,9 @@ virConfSaveValue(virBufferPtr buf, virConfValuePtr val) virBufferAddLit(buf, " ]"); break; } + case VIR_CONF_LAST: default: + virReportEnumRangeError(virConfType, val->type); return -1; } return 0; @@ -986,13 +988,20 @@ int virConfGetValueStringList(virConfPtr conf, } ATTRIBUTE_FALLTHROUGH; - default: + case VIR_CONF_LLONG: + case VIR_CONF_ULLONG: + case VIR_CONF_NONE: virReportError(VIR_ERR_INTERNAL_ERROR, compatString ? _("%s: expected a string or string list for '%s' parameter") : _("%s: expected a string list for '%s' parameter"), conf->filename, setting); return -1; + + case VIR_CONF_LAST: + default: + virReportEnumRangeError(virConfType, cval->type); + return -1; } return 1; diff --git a/src/util/virerror.h b/src/util/virerror.h index f0df8f24de..760bfa43df 100644 --- a/src/util/virerror.h +++ b/src/util/virerror.h @@ -173,7 +173,7 @@ void virReportSystemErrorFull(int domcode, virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INTERNAL_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ "Unexpected enum value %d for %s", \ - value, sizeof((typename)1) != 0 ? #typname : #typname); + value, sizeof((typname)1) != 0 ? #typname : #typname); void virReportOOMErrorFull(int domcode, const char *filename, diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c index ff1bb83073..10c370a2ae 100644 --- a/src/util/virfirewall.c +++ b/src/util/virfirewall.c @@ -827,9 +827,11 @@ virFirewallApplyRule(virFirewallPtr firewall, if (virFirewallApplyRuleFirewallD(rule, ignoreErrors, &output) < 0) return -1; break; + + case VIR_FIREWALL_BACKEND_AUTOMATIC: + case VIR_FIREWALL_BACKEND_LAST: default: - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unexpected firewall engine backend")); + virReportEnumRangeError(virFirewallBackend, currentBackend); return -1; } diff --git a/src/util/virlog.c b/src/util/virlog.c index 4f66cc5e5c..c03f4fb14e 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -1206,20 +1206,30 @@ virLogGetOutputs(void) virLogDestinationTypeToString(dest), virLogOutputs[i]->name); break; - default: + case VIR_LOG_TO_STDERR: + case VIR_LOG_TO_JOURNALD: virBufferAsprintf(&outputbuf, "%d:%s", virLogOutputs[i]->priority, virLogDestinationTypeToString(dest)); + break; + case VIR_LOG_TO_OUTPUT_LAST: + default: + virReportEnumRangeError(virLogDestination, dest); + goto error; } } - virLogUnlock(); if (virBufferError(&outputbuf)) { - virBufferFreeAndReset(&outputbuf); - return NULL; + goto error; } + virLogUnlock(); return virBufferContentAndReset(&outputbuf); + + error: + virLogUnlock(); + virBufferFreeAndReset(&outputbuf); + return NULL; } diff --git a/src/util/virnetdevvportprofile.c b/src/util/virnetdevvportprofile.c index db495a7549..133d962db6 100644 --- a/src/util/virnetdevvportprofile.c +++ b/src/util/virnetdevvportprofile.c @@ -1071,6 +1071,9 @@ virNetDevVPortProfileOp8021Qbg(const char *ifname, case VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE: op = PORT_REQUEST_PREASSOCIATE; break; + case VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR: + op = PORT_REQUEST_PREASSOCIATE_RR; + break; case VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE: op = PORT_REQUEST_ASSOCIATE; break; @@ -1191,10 +1194,15 @@ virNetDevVPortProfileOp8021Qbh(const char *ifname, false); break; - default: + case VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE: virReportError(VIR_ERR_INTERNAL_ERROR, _("operation type %d not supported"), virtPortOp); rc = -1; + break; + default: + virReportEnumRangeError(virNetDevVPortProfileType, virtPortOp); + rc = -1; + break; } cleanup: diff --git a/src/util/virnetdevvportprofile.h b/src/util/virnetdevvportprofile.h index b706c41193..fdb6573fd4 100644 --- a/src/util/virnetdevvportprofile.h +++ b/src/util/virnetdevvportprofile.h @@ -30,7 +30,7 @@ # define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX 40 -enum virNetDevVPortProfile { +typedef enum virNetDevVPortProfile { VIR_NETDEV_VPORT_PROFILE_NONE, VIR_NETDEV_VPORT_PROFILE_8021QBG, VIR_NETDEV_VPORT_PROFILE_8021QBH, @@ -38,7 +38,7 @@ enum virNetDevVPortProfile { VIR_NETDEV_VPORT_PROFILE_MIDONET, VIR_NETDEV_VPORT_PROFILE_LAST, -}; +} virNetDevVPortProfileType; VIR_ENUM_DECL(virNetDevVPort) typedef enum { -- GitLab