Add sentinel for virErrorDomain enum

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 sanitized

* src/util/virterror.c: Use VIR_ENUM_IMPL for converting
  error domains to strings
* include/libvirt/virterror.h: Add VIR_ERR_DOMAIN_LAST
This commit is contained in:
Daniel P. Berrange 2012-05-14 16:31:05 +01:00
parent 45b43a8cab
commit 1cc2034a72
2 changed files with 80 additions and 154 deletions

View File

@ -43,51 +43,64 @@ typedef enum {
VIR_FROM_XEND = 2, /* Error at connection with xend daemon */ VIR_FROM_XEND = 2, /* Error at connection with xend daemon */
VIR_FROM_XENSTORE = 3, /* Error at connection with xen store */ VIR_FROM_XENSTORE = 3, /* Error at connection with xen store */
VIR_FROM_SEXPR = 4, /* Error in the S-Expression code */ VIR_FROM_SEXPR = 4, /* Error in the S-Expression code */
VIR_FROM_XML = 5, /* Error in the XML code */ VIR_FROM_XML = 5, /* Error in the XML code */
VIR_FROM_DOM = 6, /* Error when operating on a domain */ VIR_FROM_DOM = 6, /* Error when operating on a domain */
VIR_FROM_RPC = 7, /* Error in the XML-RPC code */ VIR_FROM_RPC = 7, /* Error in the XML-RPC code */
VIR_FROM_PROXY = 8, /* Error in the proxy code; unused since VIR_FROM_PROXY = 8, /* Error in the proxy code; unused since
0.8.6 */ 0.8.6 */
VIR_FROM_CONF = 9, /* Error in the configuration file handling */ VIR_FROM_CONF = 9, /* Error in the configuration file handling */
VIR_FROM_QEMU = 10, /* Error at the QEMU daemon */ VIR_FROM_QEMU = 10, /* Error at the QEMU daemon */
VIR_FROM_NET = 11, /* Error when operating on a network */ VIR_FROM_NET = 11, /* Error when operating on a network */
VIR_FROM_TEST = 12, /* Error from test driver */ VIR_FROM_TEST = 12, /* Error from test driver */
VIR_FROM_REMOTE = 13, /* Error from remote driver */ VIR_FROM_REMOTE = 13, /* Error from remote driver */
VIR_FROM_OPENVZ = 14, /* Error from OpenVZ driver */ VIR_FROM_OPENVZ = 14, /* Error from OpenVZ driver */
VIR_FROM_XENXM = 15, /* Error at Xen XM layer */ VIR_FROM_XENXM = 15, /* Error at Xen XM layer */
VIR_FROM_STATS_LINUX = 16, /* Error in the Linux Stats code */ VIR_FROM_STATS_LINUX = 16, /* Error in the Linux Stats code */
VIR_FROM_LXC = 17, /* Error from Linux Container driver */ VIR_FROM_LXC = 17, /* Error from Linux Container driver */
VIR_FROM_STORAGE = 18, /* Error from storage driver */ VIR_FROM_STORAGE = 18, /* Error from storage driver */
VIR_FROM_NETWORK = 19, /* Error from network config */ VIR_FROM_NETWORK = 19, /* Error from network config */
VIR_FROM_DOMAIN = 20, /* Error from domain config */ VIR_FROM_DOMAIN = 20, /* Error from domain config */
VIR_FROM_UML = 21, /* Error at the UML driver */ VIR_FROM_UML = 21, /* Error at the UML driver */
VIR_FROM_NODEDEV = 22, /* Error from node device monitor */ VIR_FROM_NODEDEV = 22, /* Error from node device monitor */
VIR_FROM_XEN_INOTIFY = 23, /* Error from xen inotify layer */ VIR_FROM_XEN_INOTIFY = 23, /* Error from xen inotify layer */
VIR_FROM_SECURITY = 24, /* Error from security framework */ VIR_FROM_SECURITY = 24, /* Error from security framework */
VIR_FROM_VBOX = 25, /* Error from VirtualBox driver */ VIR_FROM_VBOX = 25, /* Error from VirtualBox driver */
VIR_FROM_INTERFACE = 26, /* Error when operating on an interface */ VIR_FROM_INTERFACE = 26, /* Error when operating on an interface */
VIR_FROM_ONE = 27, /* The OpenNebula driver no longer exists. VIR_FROM_ONE = 27, /* The OpenNebula driver no longer exists.
Retained for ABI/API compat only */ Retained for ABI/API compat only */
VIR_FROM_ESX = 28, /* Error from ESX driver */ VIR_FROM_ESX = 28, /* Error from ESX driver */
VIR_FROM_PHYP = 29, /* Error from IBM power hypervisor */ VIR_FROM_PHYP = 29, /* Error from IBM power hypervisor */
VIR_FROM_SECRET = 30, /* Error from secret storage */ VIR_FROM_SECRET = 30, /* Error from secret storage */
VIR_FROM_CPU = 31, /* Error from CPU driver */ VIR_FROM_CPU = 31, /* Error from CPU driver */
VIR_FROM_XENAPI = 32, /* Error from XenAPI */ VIR_FROM_XENAPI = 32, /* Error from XenAPI */
VIR_FROM_NWFILTER = 33, /* Error from network filter driver */ VIR_FROM_NWFILTER = 33, /* Error from network filter driver */
VIR_FROM_HOOK = 34, /* Error from Synchronous hooks */ VIR_FROM_HOOK = 34, /* Error from Synchronous hooks */
VIR_FROM_DOMAIN_SNAPSHOT = 35,/* Error from domain snapshot */ VIR_FROM_DOMAIN_SNAPSHOT = 35,/* Error from domain snapshot */
VIR_FROM_AUDIT = 36, /* Error from auditing subsystem */ VIR_FROM_AUDIT = 36, /* Error from auditing subsystem */
VIR_FROM_SYSINFO = 37, /* Error from sysinfo/SMBIOS */ VIR_FROM_SYSINFO = 37, /* Error from sysinfo/SMBIOS */
VIR_FROM_STREAMS = 38, /* Error from I/O streams */ VIR_FROM_STREAMS = 38, /* Error from I/O streams */
VIR_FROM_VMWARE = 39, /* Error from VMware driver */ VIR_FROM_VMWARE = 39, /* Error from VMware driver */
VIR_FROM_EVENT = 40, /* Error from event loop impl */ VIR_FROM_EVENT = 40, /* Error from event loop impl */
VIR_FROM_LIBXL = 41, /* Error from libxenlight driver */ VIR_FROM_LIBXL = 41, /* Error from libxenlight driver */
VIR_FROM_LOCKING = 42, /* Error from lock manager */ VIR_FROM_LOCKING = 42, /* Error from lock manager */
VIR_FROM_HYPERV = 43, /* Error from Hyper-V driver */ VIR_FROM_HYPERV = 43, /* Error from Hyper-V driver */
VIR_FROM_CAPABILITIES = 44, /* Error from capabilities */ VIR_FROM_CAPABILITIES = 44, /* Error from capabilities */
VIR_FROM_URI = 45, /* Error from URI handling */ VIR_FROM_URI = 45, /* Error from URI handling */
VIR_FROM_AUTH = 46, /* Error from auth handling */ VIR_FROM_AUTH = 46, /* Error from auth handling */
VIR_FROM_DBUS = 47, /* Error from DBus */ VIR_FROM_DBUS = 47, /* Error from DBus */
# ifdef VIR_ENUM_SENTINELS
VIR_ERR_DOMAIN_LAST
# endif
} virErrorDomain; } virErrorDomain;

View File

@ -40,156 +40,67 @@ static virLogPriority virErrorLevelPriority(virErrorLevel level) {
return VIR_LOG_ERROR; return VIR_LOG_ERROR;
} }
static const char *virErrorDomainName(virErrorDomain domain) {
const char *dom = "unknown"; VIR_ENUM_DECL(virErrorDomain)
switch (domain) { VIR_ENUM_IMPL(virErrorDomain, VIR_ERR_DOMAIN_LAST,
case VIR_FROM_NONE: "", /* 0 */
dom = ""; "Xen Driver",
break; "Xen Daemon",
case VIR_FROM_XEN: "Xen Store",
dom = "Xen "; "S-Expression",
break;
case VIR_FROM_XENAPI: "XML Util", /* 5 */
dom = "XenAPI "; "Domain",
break; "XML-RPC",
case VIR_FROM_LIBXL: "Proxy Daemon",
dom = "xenlight "; "Config File",
break;
case VIR_FROM_XML: "QEMU Driver", /* 10 */
dom = "XML "; "Network",
break; "Test Driver",
case VIR_FROM_XEND: "Remote Driver",
dom = "Xen Daemon "; "OpenVZ Driver",
break;
case VIR_FROM_XENSTORE: "Xen XM Driver", /* 15 */
dom = "Xen Store "; "Linux Statistics",
break; "LXC Driver",
case VIR_FROM_XEN_INOTIFY: "Storage Driver",
dom = "Xen Inotify "; "Network Driver",
break;
case VIR_FROM_DOM: "Domain Config", /* 20 */
dom = "Domain "; "User Mode Linux Driver",
break; "Node Device Driver",
case VIR_FROM_RPC: "Xen Inotify Driver",
dom = "RPC "; "Security Driver",
break;
case VIR_FROM_QEMU: "VirtualBox Driver", /* 25 */
dom = "QEMU "; "Network Interface Driver",
break; "Open Nebula Driver",
case VIR_FROM_NET: "ESX Driver",
dom = "Network "; "Power Hypervisor Driver",
break;
case VIR_FROM_TEST: "Secrets Driver", /* 30 */
dom = "Test "; "CPU Driver",
break; "XenAPI Driver",
case VIR_FROM_REMOTE: "Network Filter Driver",
dom = "Remote "; "Lifecycle Hook",
break;
case VIR_FROM_SEXPR: "Domain Snapshot", /* 35 */
dom = "S-Expr "; "Audit Utils",
break; "Sysinfo Utils",
case VIR_FROM_PROXY: "I/O Stream Utils",
dom = "PROXY "; "VMWare Driver",
break;
case VIR_FROM_CONF: "Event Loop", /* 40 */
dom = "Config "; "Xen Light Driver",
break; "Lock Driver",
case VIR_FROM_PHYP: "Hyper-V Driver",
dom = "IBM power hypervisor "; "Capabilities Utils",
break;
case VIR_FROM_OPENVZ: "URI Utils", /* 45 */
dom = "OpenVZ "; "Authentication Utils",
break; "DBus Utils"
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;
}
/* /*
@ -585,7 +496,9 @@ virDefaultErrorFunc(virErrorPtr err)
lvl = _("error"); lvl = _("error");
break; break;
} }
dom = virErrorDomainName(err->domain); dom = virErrorDomainTypeToString(err->domain);
if (!dom)
dom = "Unknown";
if ((err->dom != NULL) && (err->code != VIR_ERR_INVALID_DOMAIN)) { if ((err->dom != NULL) && (err->code != VIR_ERR_INVALID_DOMAIN)) {
domain = err->dom->name; domain = err->dom->name;
} else if ((err->net != NULL) && (err->code != VIR_ERR_INVALID_NETWORK)) { } else if ((err->net != NULL) && (err->code != VIR_ERR_INVALID_NETWORK)) {
@ -594,13 +507,13 @@ virDefaultErrorFunc(virErrorPtr err)
len = strlen(err->message); len = strlen(err->message);
if ((err->domain == VIR_FROM_XML) && (err->code == VIR_ERR_XML_DETAIL) && if ((err->domain == VIR_FROM_XML) && (err->code == VIR_ERR_XML_DETAIL) &&
(err->int1 != 0)) (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); dom, lvl, domain, network, err->int1, err->message);
else if ((len == 0) || (err->message[len - 1] != '\n')) 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); dom, lvl, domain, network, err->message);
else else
fprintf(stderr, "libvir: %s%s %s%s: %s", fprintf(stderr, "libvir: %s %s %s%s: %s",
dom, lvl, domain, network, err->message); dom, lvl, domain, network, err->message);
} }