[libvirt] [PATCH 2/3] Add sentinel for virErrorDomain enum

Daniel P. Berrange berrange at redhat.com
Tue May 15 11:30:12 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

Add a VIR_ERR_DOMAIN_LAST sentinel for virErrorDomain and
replace the virErrorDomainName function by a VIR_ENUM_IMPL

In the process the naming of error domains is santized

* src/util/virterror.c: Use VIR_ENUM_IMPL for converting
  error domains to strings
* include/libvirt/virterror.h: Add VIR_ERR_DOMAIN_LAST
---
 include/libvirt/virterror.h |   13 +++
 src/util/virterror.c        |  219 +++++++++++++------------------------------
 2 files changed, 78 insertions(+), 154 deletions(-)

diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h
index 7283207..0e0bc9c 100644
--- a/include/libvirt/virterror.h
+++ b/include/libvirt/virterror.h
@@ -43,51 +43,64 @@ typedef enum {
     VIR_FROM_XEND = 2,		/* Error at connection with xend daemon */
     VIR_FROM_XENSTORE = 3,	/* Error at connection with xen store */
     VIR_FROM_SEXPR = 4,		/* Error in the S-Expression code */
+
     VIR_FROM_XML = 5,		/* Error in the XML code */
     VIR_FROM_DOM = 6,		/* Error when operating on a domain */
     VIR_FROM_RPC = 7,		/* Error in the XML-RPC code */
     VIR_FROM_PROXY = 8,		/* Error in the proxy code; unused since
                                    0.8.6 */
     VIR_FROM_CONF = 9,		/* Error in the configuration file handling */
+
     VIR_FROM_QEMU = 10,		/* Error at the QEMU daemon */
     VIR_FROM_NET = 11,		/* Error when operating on a network */
     VIR_FROM_TEST = 12,		/* Error from test driver */
     VIR_FROM_REMOTE = 13,	/* Error from remote driver */
     VIR_FROM_OPENVZ = 14,	/* Error from OpenVZ driver */
+
     VIR_FROM_XENXM = 15,	/* Error at Xen XM layer */
     VIR_FROM_STATS_LINUX = 16,	/* Error in the Linux Stats code */
     VIR_FROM_LXC = 17,		/* Error from Linux Container driver */
     VIR_FROM_STORAGE = 18,	/* Error from storage driver */
     VIR_FROM_NETWORK = 19,	/* Error from network config */
+
     VIR_FROM_DOMAIN = 20,	/* Error from domain config */
     VIR_FROM_UML = 21,		/* Error at the UML driver */
     VIR_FROM_NODEDEV = 22,	/* Error from node device monitor */
     VIR_FROM_XEN_INOTIFY = 23,	/* Error from xen inotify layer */
     VIR_FROM_SECURITY = 24,	/* Error from security framework */
+
     VIR_FROM_VBOX = 25,		/* Error from VirtualBox driver */
     VIR_FROM_INTERFACE = 26,	/* Error when operating on an interface */
     VIR_FROM_ONE = 27,		/* The OpenNebula driver no longer exists.
                                    Retained for ABI/API compat only */
     VIR_FROM_ESX = 28,		/* Error from ESX driver */
     VIR_FROM_PHYP = 29,		/* Error from IBM power hypervisor */
+
     VIR_FROM_SECRET = 30,	/* Error from secret storage */
     VIR_FROM_CPU = 31,		/* Error from CPU driver */
     VIR_FROM_XENAPI = 32,	/* Error from XenAPI */
     VIR_FROM_NWFILTER = 33,	/* Error from network filter driver */
     VIR_FROM_HOOK = 34,		/* Error from Synchronous hooks */
+
     VIR_FROM_DOMAIN_SNAPSHOT = 35,/* Error from domain snapshot */
     VIR_FROM_AUDIT = 36,	/* Error from auditing subsystem */
     VIR_FROM_SYSINFO = 37,	/* Error from sysinfo/SMBIOS */
     VIR_FROM_STREAMS = 38,	/* Error from I/O streams */
     VIR_FROM_VMWARE = 39,	/* Error from VMware driver */
+
     VIR_FROM_EVENT = 40,	/* Error from event loop impl */
     VIR_FROM_LIBXL = 41,	/* Error from libxenlight driver */
     VIR_FROM_LOCKING = 42,	/* Error from lock manager */
     VIR_FROM_HYPERV = 43,	/* Error from Hyper-V driver */
     VIR_FROM_CAPABILITIES = 44, /* Error from capabilities */
+
     VIR_FROM_URI = 45,          /* Error from URI handling */
     VIR_FROM_AUTH = 46,         /* Error from auth handling */
     VIR_FROM_DBUS = 47,         /* Error from DBus */
+
+# ifdef VIR_ENUM_SENTINELS
+    VIR_ERR_DOMAIN_LAST
+# endif
 } virErrorDomain;
 
 
diff --git a/src/util/virterror.c b/src/util/virterror.c
index b1a5d2b..fa57833 100644
--- a/src/util/virterror.c
+++ b/src/util/virterror.c
@@ -40,156 +40,67 @@ static virLogPriority virErrorLevelPriority(virErrorLevel level) {
     return VIR_LOG_ERROR;
 }
 
-static const char *virErrorDomainName(virErrorDomain domain) {
-    const char *dom = "unknown";
-    switch (domain) {
-        case VIR_FROM_NONE:
-            dom = "";
-            break;
-        case VIR_FROM_XEN:
-            dom = "Xen ";
-            break;
-        case VIR_FROM_XENAPI:
-            dom = "XenAPI ";
-            break;
-        case VIR_FROM_LIBXL:
-            dom = "xenlight ";
-            break;
-        case VIR_FROM_XML:
-            dom = "XML ";
-            break;
-        case VIR_FROM_XEND:
-            dom = "Xen Daemon ";
-            break;
-        case VIR_FROM_XENSTORE:
-            dom = "Xen Store ";
-            break;
-        case VIR_FROM_XEN_INOTIFY:
-            dom = "Xen Inotify ";
-            break;
-        case VIR_FROM_DOM:
-            dom = "Domain ";
-            break;
-        case VIR_FROM_RPC:
-            dom = "RPC ";
-            break;
-        case VIR_FROM_QEMU:
-            dom = "QEMU ";
-            break;
-        case VIR_FROM_NET:
-            dom = "Network ";
-            break;
-        case VIR_FROM_TEST:
-            dom = "Test ";
-            break;
-        case VIR_FROM_REMOTE:
-            dom = "Remote ";
-            break;
-        case VIR_FROM_SEXPR:
-            dom = "S-Expr ";
-            break;
-        case VIR_FROM_PROXY:
-            dom = "PROXY ";
-            break;
-        case VIR_FROM_CONF:
-            dom = "Config ";
-            break;
-        case VIR_FROM_PHYP:
-            dom = "IBM power hypervisor ";
-            break;
-        case VIR_FROM_OPENVZ:
-            dom = "OpenVZ ";
-            break;
-        case VIR_FROM_VMWARE:
-            dom = "VMware ";
-            break;
-        case VIR_FROM_XENXM:
-            dom = "Xen XM ";
-            break;
-        case VIR_FROM_STATS_LINUX:
-            dom = "Linux Stats ";
-            break;
-        case VIR_FROM_LXC:
-            dom = "Linux Container ";
-            break;
-        case VIR_FROM_STORAGE:
-            dom = "Storage ";
-            break;
-        case VIR_FROM_NETWORK:
-            dom = "Network Config ";
-            break;
-        case VIR_FROM_DOMAIN:
-            dom = "Domain Config ";
-            break;
-        case VIR_FROM_NODEDEV:
-            dom = "Node Device ";
-            break;
-        case VIR_FROM_UML:
-            dom = "UML ";
-            break;
-        case VIR_FROM_SECURITY:
-            dom = "Security Labeling ";
-            break;
-        case VIR_FROM_VBOX:
-            dom = "VBOX ";
-            break;
-        case VIR_FROM_INTERFACE:
-            dom = "Interface ";
-            break;
-        case VIR_FROM_ONE:
-            dom = "ONE ";
-            break;
-        case VIR_FROM_ESX:
-            dom = "ESX ";
-            break;
-        case VIR_FROM_SECRET:
-            dom = "Secret Storage ";
-            break;
-        case VIR_FROM_CPU:
-            dom = "CPU ";
-            break;
-        case VIR_FROM_NWFILTER:
-            dom = "Network Filter ";
-            break;
-        case VIR_FROM_HOOK:
-            dom = "Sync Hook ";
-            break;
-        case VIR_FROM_DOMAIN_SNAPSHOT:
-            dom = "Domain Snapshot ";
-            break;
-        case VIR_FROM_AUDIT:
-            dom = "Audit ";
-            break;
-        case VIR_FROM_SYSINFO:
-            dom = "Sysinfo ";
-            break;
-        case VIR_FROM_STREAMS:
-            dom = "Streams ";
-            break;
-        case VIR_FROM_EVENT:
-            dom = "Events ";
-            break;
-        case VIR_FROM_LOCKING:
-            dom = "Locking ";
-            break;
-        case VIR_FROM_HYPERV:
-            dom = "Hyper-V ";
-            break;
-        case VIR_FROM_CAPABILITIES:
-            dom = "Capabilities ";
-            break;
-        case VIR_FROM_URI:
-            dom = "URI ";
-            break;
-        case VIR_FROM_AUTH:
-            dom = "Auth ";
-            break;
-        case VIR_FROM_DBUS:
-            dom = "DBus ";
-            break;
-    }
-    return dom;
-}
+
+VIR_ENUM_DECL(virErrorDomain)
+VIR_ENUM_IMPL(virErrorDomain, VIR_ERR_DOMAIN_LAST,
+              "", /* 0 */
+              "Xen Driver",
+              "Xen Daemon",
+              "Xen Store",
+              "S-Expression",
+
+              "XML Util", /* 5 */
+              "Domain",
+              "XML-RPC",
+              "Proxy Daemon",
+              "Config File",
+
+              "QEMU Driver", /* 10 */
+              "Network",
+              "Test Driver",
+              "Remote Driver",
+              "OpenVZ Driver",
+
+              "Xen XM Driver", /* 15 */
+              "Linux Statistics",
+              "LXC Driver",
+              "Storage Driver",
+              "Network Driver",
+
+              "Domain Config", /* 20 */
+              "User Mode Linux Driver",
+              "Node Device Driver",
+              "Xen Inotify Driver",
+              "Security Driver",
+
+              "VirtualBox Driver", /* 25 */
+              "Network Interface Driver",
+              "Open Nebula Driver",
+              "ESX Driver",
+              "Power Hypervisor Driver",
+
+              "Secrets Driver", /* 30 */
+              "CPU Driver",
+              "XenAPI Driver",
+              "Network Filter Driver",
+              "Lifecycle Hook",
+
+              "Domain Snapshot", /* 35 */
+              "Audit Utils",
+              "Sysinfo Utils",
+              "I/O Stream Utils",
+              "VMWare Driver",
+
+              "Event Loop", /* 40 */
+              "Xen Light Driver",
+              "Lock Driver",
+              "Hyper-V Driver",
+              "Capabilities Utils",
+
+              "URI Utils", /* 45 */
+              "Authentication Utils",
+              "DBus Utils"
+    )
 
 
 /*
@@ -585,7 +496,7 @@ virDefaultErrorFunc(virErrorPtr err)
             lvl = _("error");
             break;
     }
-    dom = virErrorDomainName(err->domain);
+    dom = virErrorDomainTypeToString(err->domain);
     if ((err->dom != NULL) && (err->code != VIR_ERR_INVALID_DOMAIN)) {
         domain = err->dom->name;
     } else if ((err->net != NULL) && (err->code != VIR_ERR_INVALID_NETWORK)) {
@@ -594,13 +505,13 @@ virDefaultErrorFunc(virErrorPtr err)
     len = strlen(err->message);
     if ((err->domain == VIR_FROM_XML) && (err->code == VIR_ERR_XML_DETAIL) &&
         (err->int1 != 0))
-        fprintf(stderr, "libvir: %s%s %s%s: line %d: %s",
+        fprintf(stderr, "libvir: %s %s %s%s: line %d: %s",
                 dom, lvl, domain, network, err->int1, err->message);
     else if ((len == 0) || (err->message[len - 1] != '\n'))
-        fprintf(stderr, "libvir: %s%s %s%s: %s\n",
+        fprintf(stderr, "libvir: %s %s %s%s: %s\n",
                 dom, lvl, domain, network, err->message);
     else
-        fprintf(stderr, "libvir: %s%s %s%s: %s",
+        fprintf(stderr, "libvir: %s %s %s%s: %s",
                 dom, lvl, domain, network, err->message);
 }
 
-- 
1.7.10.1




More information about the libvir-list mailing list