[libvirt] [PATCH v2 01/14] util: add a virReportEnumRangeError for bad value reporting

Daniel P. Berrangé berrange at redhat.com
Tue Feb 20 17:08:09 UTC 2018


To ensure we have standardized error messages when reporting problems
with enum values being out of a range, add virReportEnumRangeError().

   virReportEnumRangeError(virDomainState, 34);

results in a message

   "internal error: Unexpected enum value 34 for virDomainState"

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 src/util/virerror.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/util/virerror.h b/src/util/virerror.h
index cf434f45fc..1d02451604 100644
--- a/src/util/virerror.h
+++ b/src/util/virerror.h
@@ -164,7 +164,14 @@ void virReportSystemErrorFull(int domcode,
 # define virReportRestrictedError(...) \
     virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_OPERATION_DENIED, \
                          __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
-
+/* The sizeof(typname) comparison here is a hack to catch typos
+ * in the name of the enum by triggering a compile error. It should
+ * get optimized away since sizeof() is known at compile time  */
+# define virReportEnumRangeError(typname, value) \
+    virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INTERNAL_ERROR, \
+                         __FILE__, __FUNCTION__, __LINE__,      \
+                         "Unexpected enum value %d for %s",     \
+                         value, sizeof(typname) != 0 ? #typname : #typname);
 
 void virReportOOMErrorFull(int domcode,
                            const char *filename,
-- 
2.14.3




More information about the libvir-list mailing list