Use a macro to declare how the strings for individual error codes. This unifies the used condition and will allow simplifying the code further. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/libvirt_private.syms | 1 + src/util/virerror.c | 792 +++++++++------------------------------ src/util/virerrorpriv.h | 8 + 3 files changed, 188 insertions(+), 613 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6184030d59..775b33e151 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1753,6 +1753,7 @@ virDispatchError; virErrorCopyNew; virErrorInitialize; virErrorMsg; +virErrorMsgStrings; virErrorPreserveLast; virErrorRestore; virErrorSetErrnoFromLastError; diff --git a/src/util/virerror.c b/src/util/virerror.c index 7444d671bb..d3cd06331f 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -903,6 +903,178 @@ void virRaiseErrorObject(const char *filename, } +const virErrorMsgTuple virErrorMsgStrings[VIR_ERR_NUMBER_LAST] = { + { VIR_ERR_OK, NULL, NULL }, + { VIR_ERR_INTERNAL_ERROR, "internal error", "internal error: %s" }, + { VIR_ERR_NO_MEMORY, "out of memory", "out of memory: %s" }, + { VIR_ERR_NO_SUPPORT, + "this function is not supported by the connection driver", + "this function is not supported by the connection driver: %s" }, + { VIR_ERR_UNKNOWN_HOST, "unknown host", "unknown host %s" }, + { VIR_ERR_NO_CONNECT, + "no connection driver available", + "no connection driver available for %s" }, + { VIR_ERR_INVALID_CONN, "invalid connection pointer in", "invalid connection pointer in %s" }, + { VIR_ERR_INVALID_DOMAIN, "invalid domain pointer in", "invalid domain pointer in %s" }, + { VIR_ERR_INVALID_ARG, "invalid argument", "invalid argument: %s" }, + { VIR_ERR_OPERATION_FAILED, "operation failed", "operation failed: %s" }, + { VIR_ERR_GET_FAILED, "GET operation failed", "GET operation failed: %s" }, + { VIR_ERR_POST_FAILED, "POST operation failed", "POST operation failed: %s" }, + { VIR_ERR_HTTP_ERROR, "got unknown HTTP error code", "got unknown HTTP error code %s" }, + { VIR_ERR_SEXPR_SERIAL, "failed to serialize S-Expr", "failed to serialize S-Expr: %s" }, + { VIR_ERR_NO_XEN, + "could not use Xen hypervisor entry", + "could not use Xen hypervisor entry %s" }, + { VIR_ERR_XEN_CALL, "failed Xen syscall", "failed Xen syscall %s" }, + { VIR_ERR_OS_TYPE, "unknown OS type", "unknown OS type %s" }, + { VIR_ERR_NO_KERNEL, "missing kernel information", "missing kernel information: %s" }, + { VIR_ERR_NO_ROOT, "missing root device information", "missing root device information in %s" }, + { VIR_ERR_NO_SOURCE, + "missing source information for device", + "missing source information for device %s" }, + { VIR_ERR_NO_TARGET, + "missing target information for device", + "missing target information for device %s" }, + { VIR_ERR_NO_NAME, "missing name information", "missing name information in %s" }, + { VIR_ERR_NO_OS, + "missing operating system information", + "missing operating system information for %s" }, + { VIR_ERR_NO_DEVICE, "missing devices information", "missing devices information for %s" }, + { VIR_ERR_NO_XENSTORE, "could not connect to Xen Store", "could not connect to Xen Store %s" }, + { VIR_ERR_DRIVER_FULL, "too many drivers registered", "too many drivers registered in %s" }, + { VIR_ERR_CALL_FAILED, + "library call failed, possibly not supported", + "library call %s failed, possibly not supported" }, + { VIR_ERR_XML_ERROR, "XML description is invalid or not well formed", "XML error: %s" }, + { VIR_ERR_DOM_EXIST, "this domain exists already", "domain %s exists already" }, + { VIR_ERR_OPERATION_DENIED, + "operation forbidden for read only access", + "operation forbidden: %s" }, + { VIR_ERR_OPEN_FAILED, + "failed to open configuration file for reading", + "failed to open %s for reading" }, + { VIR_ERR_READ_FAILED, + "failed to read configuration file", + "failed to read configuration file %s" }, + { VIR_ERR_PARSE_FAILED, + "failed to parse configuration file", + "failed to parse configuration file %s" }, + { VIR_ERR_CONF_SYNTAX, + "configuration file syntax error", + "configuration file syntax error: %s" }, + { VIR_ERR_WRITE_FAILED, + "failed to write configuration file", + "failed to write configuration file: %s" }, + { VIR_ERR_XML_DETAIL, "parser error", "%s" }, + { VIR_ERR_INVALID_NETWORK, "invalid network pointer in", "invalid network pointer in %s" }, + { VIR_ERR_NETWORK_EXIST, "this network exists already", "network %s exists already" }, + { VIR_ERR_SYSTEM_ERROR, "system call error", "%s" }, + { VIR_ERR_RPC, "RPC error", "%s" }, + { VIR_ERR_GNUTLS_ERROR, "GNUTLS call error", "%s" }, + { VIR_WAR_NO_NETWORK, "Failed to find the network", "Failed to find the network: %s" }, + { VIR_ERR_NO_DOMAIN, "Domain not found", "Domain not found: %s" }, + { VIR_ERR_NO_NETWORK, "Network not found", "Network not found: %s" }, + { VIR_ERR_INVALID_MAC, "invalid MAC address", "invalid MAC address: %s" }, + { VIR_ERR_AUTH_FAILED, "authentication failed", "authentication failed: %s" }, + { VIR_ERR_INVALID_STORAGE_POOL, + "invalid storage pool pointer in", + "invalid storage pool pointer in %s" }, + { VIR_ERR_INVALID_STORAGE_VOL, + "invalid storage volume pointer in", + "invalid storage volume pointer in %s" }, + { VIR_WAR_NO_STORAGE, + "Failed to find a storage driver", + "Failed to find a storage driver: %s" }, + { VIR_ERR_NO_STORAGE_POOL, "Storage pool not found", "Storage pool not found: %s" }, + { VIR_ERR_NO_STORAGE_VOL, "Storage volume not found", "Storage volume not found: %s" }, + { VIR_WAR_NO_NODE, "Failed to find a node driver", "Failed to find a node driver: %s" }, + { VIR_ERR_INVALID_NODE_DEVICE, + "invalid node device pointer", + "invalid node device pointer in %s" }, + { VIR_ERR_NO_NODE_DEVICE, "Node device not found", "Node device not found: %s" }, + { VIR_ERR_NO_SECURITY_MODEL, "Security model not found", "Security model not found: %s" }, + { VIR_ERR_OPERATION_INVALID, + "Requested operation is not valid", + "Requested operation is not valid: %s" }, + { VIR_WAR_NO_INTERFACE, "Failed to find the interface", "Failed to find the interface: %s" }, + { VIR_ERR_NO_INTERFACE, "Interface not found", "Interface not found: %s" }, + { VIR_ERR_INVALID_INTERFACE, + "invalid interface pointer in", + "invalid interface pointer in %s" }, + { VIR_ERR_MULTIPLE_INTERFACES, + "multiple matching interfaces found", + "multiple matching interfaces found: %s" }, + { VIR_WAR_NO_NWFILTER, + "Failed to start the nwfilter driver", + "Failed to start the nwfilter driver: %s" }, + { VIR_ERR_INVALID_NWFILTER, "Invalid network filter", "Invalid network filter: %s" }, + { VIR_ERR_NO_NWFILTER, "Network filter not found", "Network filter not found: %s" }, + { VIR_ERR_BUILD_FIREWALL, + "Error while building firewall", + "Error while building firewall: %s" }, + { VIR_WAR_NO_SECRET, + "Failed to find a secret storage driver", + "Failed to find a secret storage driver: %s" }, + { VIR_ERR_INVALID_SECRET, "Invalid secret", "Invalid secret: %s" }, + { VIR_ERR_NO_SECRET, "Secret not found", "Secret not found: %s" }, + { VIR_ERR_CONFIG_UNSUPPORTED, "unsupported configuration", "unsupported configuration: %s" }, + { VIR_ERR_OPERATION_TIMEOUT, "Timed out during operation", "Timed out during operation: %s" }, + { VIR_ERR_MIGRATE_PERSIST_FAILED, + "Failed to make domain persistent after migration", + "Failed to make domain persistent after migration: %s" }, + { VIR_ERR_HOOK_SCRIPT_FAILED, + "Hook script execution failed", + "Hook script execution failed: %s" }, + { VIR_ERR_INVALID_DOMAIN_SNAPSHOT, "Invalid snapshot", "Invalid snapshot: %s" }, + { VIR_ERR_NO_DOMAIN_SNAPSHOT, "Domain snapshot not found", "Domain snapshot not found: %s" }, + { VIR_ERR_INVALID_STREAM, "invalid stream pointer", "invalid stream pointer in %s" }, + { VIR_ERR_ARGUMENT_UNSUPPORTED, "argument unsupported", "argument unsupported: %s" }, + { VIR_ERR_STORAGE_PROBE_FAILED, "Storage pool probe failed", "Storage pool probe failed: %s" }, + { VIR_ERR_STORAGE_POOL_BUILT, "Storage pool already built", "Storage pool already built: %s" }, + { VIR_ERR_SNAPSHOT_REVERT_RISKY, "revert requires force", "revert requires force: %s" }, + { VIR_ERR_OPERATION_ABORTED, "operation aborted", "operation aborted: %s" }, + { VIR_ERR_AUTH_CANCELLED, "authentication cancelled", "authentication cancelled: %s" }, + { VIR_ERR_NO_DOMAIN_METADATA, "metadata not found", "metadata not found: %s" }, + { VIR_ERR_MIGRATE_UNSAFE, "Unsafe migration", "Unsafe migration: %s" }, + { VIR_ERR_OVERFLOW, "numerical overflow", "numerical overflow: %s" }, + { VIR_ERR_BLOCK_COPY_ACTIVE, "block copy still active", "block copy still active: %s" }, + { VIR_ERR_OPERATION_UNSUPPORTED, "Operation not supported", "Operation not supported: %s" }, + { VIR_ERR_SSH, "SSH transport error", "SSH transport error: %s" }, + { VIR_ERR_AGENT_UNRESPONSIVE, + "Guest agent is not responding", + "Guest agent is not responding: %s" }, + { VIR_ERR_RESOURCE_BUSY, "resource busy", "resource busy: %s" }, + { VIR_ERR_ACCESS_DENIED, "access denied", "access denied: %s" }, + { VIR_ERR_DBUS_SERVICE, "error from service", "error from service: %s" }, + { VIR_ERR_STORAGE_VOL_EXIST, + "this storage volume exists already", + "storage volume %s exists already" }, + { VIR_ERR_CPU_INCOMPATIBLE, + "the CPU is incompatible with host CPU", + "the CPU is incompatible with host CPU: %s" }, + { VIR_ERR_XML_INVALID_SCHEMA, + "XML document failed to validate against schema", + "XML document failed to validate against schema: %s" }, + { VIR_ERR_MIGRATE_FINISH_OK, + "migration successfully aborted", + "migration successfully aborted: %s" }, + { VIR_ERR_AUTH_UNAVAILABLE, "authentication unavailable", "authentication unavailable: %s" }, + { VIR_ERR_NO_SERVER, "Server not found", "Server not found: %s" }, + { VIR_ERR_NO_CLIENT, "Client not found", "Client not found: %s" }, + { VIR_ERR_AGENT_UNSYNCED, + "guest agent replied with wrong id to guest-sync command", + "guest agent replied with wrong id to guest-sync command: %s" }, + { VIR_ERR_LIBSSH, "libssh transport error", "libssh transport error: %s" }, + { VIR_ERR_DEVICE_MISSING, "device not found", "device not found: %s" }, + { VIR_ERR_INVALID_NWFILTER_BINDING, + "Invalid network filter binding", + "Invalid network filter binding: %s" }, + { VIR_ERR_NO_NWFILTER_BINDING, + "Network filter binding not found", + "Network filter binding not found: %s" }, +}; + + /** * virErrorMsg: * @error: the virErrorNumber @@ -918,622 +1090,16 @@ void virRaiseErrorObject(const char *filename, const char * virErrorMsg(virErrorNumber error, const char *info) { - const char *errmsg = NULL; + if (error >= VIR_ERR_NUMBER_LAST) + return NULL; - switch (error) { - case VIR_ERR_NUMBER_LAST: - case VIR_ERR_OK: - return NULL; - case VIR_ERR_INTERNAL_ERROR: - if (info != NULL) - errmsg = _("internal error: %s"); - else - errmsg = _("internal error"); - break; - case VIR_ERR_NO_MEMORY: - if (info == NULL) - errmsg = _("out of memory"); - else - errmsg = _("out of memory: %s"); - break; - case VIR_ERR_NO_SUPPORT: - if (info == NULL) - errmsg = _("this function is not supported by the connection driver"); - else - errmsg = _("this function is not supported by the connection driver: %s"); - break; - case VIR_ERR_NO_CONNECT: - if (info == NULL) - errmsg = _("no connection driver available"); - else - errmsg = _("no connection driver available for %s"); - break; - case VIR_ERR_INVALID_CONN: - if (info == NULL) - errmsg = _("invalid connection pointer in"); - else - errmsg = _("invalid connection pointer in %s"); - break; - case VIR_ERR_INVALID_DOMAIN: - if (info == NULL) - errmsg = _("invalid domain pointer in"); - else - errmsg = _("invalid domain pointer in %s"); - break; - case VIR_ERR_INVALID_ARG: - if (info == NULL) - errmsg = _("invalid argument"); - else - errmsg = _("invalid argument: %s"); - break; - case VIR_ERR_OPERATION_FAILED: - if (info != NULL) - errmsg = _("operation failed: %s"); - else - errmsg = _("operation failed"); - break; - case VIR_ERR_GET_FAILED: - if (info != NULL) - errmsg = _("GET operation failed: %s"); - else - errmsg = _("GET operation failed"); - break; - case VIR_ERR_POST_FAILED: - if (info != NULL) - errmsg = _("POST operation failed: %s"); - else - errmsg = _("POST operation failed"); - break; - case VIR_ERR_HTTP_ERROR: - if (info != NULL) - errmsg = _("got unknown HTTP error code %s"); - else - errmsg = _("got unknown HTTP error code"); - break; - case VIR_ERR_UNKNOWN_HOST: - if (info != NULL) - errmsg = _("unknown host %s"); - else - errmsg = _("unknown host"); - break; - case VIR_ERR_SEXPR_SERIAL: - if (info != NULL) - errmsg = _("failed to serialize S-Expr: %s"); - else - errmsg = _("failed to serialize S-Expr"); - break; - case VIR_ERR_NO_XEN: - if (info == NULL) - errmsg = _("could not use Xen hypervisor entry"); - else - errmsg = _("could not use Xen hypervisor entry %s"); - break; - case VIR_ERR_NO_XENSTORE: - if (info == NULL) - errmsg = _("could not connect to Xen Store"); - else - errmsg = _("could not connect to Xen Store %s"); - break; - case VIR_ERR_XEN_CALL: - if (info == NULL) - errmsg = _("failed Xen syscall"); - else - errmsg = _("failed Xen syscall %s"); - break; - case VIR_ERR_OS_TYPE: - if (info == NULL) - errmsg = _("unknown OS type"); - else - errmsg = _("unknown OS type %s"); - break; - case VIR_ERR_NO_KERNEL: - if (info == NULL) - errmsg = _("missing kernel information"); - else - errmsg = _("missing kernel information: %s"); - break; - case VIR_ERR_NO_ROOT: - if (info == NULL) - errmsg = _("missing root device information"); - else - errmsg = _("missing root device information in %s"); - break; - case VIR_ERR_NO_SOURCE: - if (info == NULL) - errmsg = _("missing source information for device"); - else - errmsg = _("missing source information for device %s"); - break; - case VIR_ERR_NO_TARGET: - if (info == NULL) - errmsg = _("missing target information for device"); - else - errmsg = _("missing target information for device %s"); - break; - case VIR_ERR_NO_NAME: - if (info == NULL) - errmsg = _("missing name information"); - else - errmsg = _("missing name information in %s"); - break; - case VIR_ERR_NO_OS: - if (info == NULL) - errmsg = _("missing operating system information"); - else - errmsg = _("missing operating system information for %s"); - break; - case VIR_ERR_NO_DEVICE: - if (info == NULL) - errmsg = _("missing devices information"); - else - errmsg = _("missing devices information for %s"); - break; - case VIR_ERR_DRIVER_FULL: - if (info == NULL) - errmsg = _("too many drivers registered"); - else - errmsg = _("too many drivers registered in %s"); - break; - case VIR_ERR_CALL_FAILED: /* DEPRECATED, use VIR_ERR_NO_SUPPORT */ - if (info == NULL) - errmsg = _("library call failed, possibly not supported"); - else - errmsg = _("library call %s failed, possibly not supported"); - break; - case VIR_ERR_XML_ERROR: - if (info == NULL) - errmsg = _("XML description is invalid or not well formed"); - else - errmsg = _("XML error: %s"); - break; - case VIR_ERR_DOM_EXIST: - if (info == NULL) - errmsg = _("this domain exists already"); - else - errmsg = _("domain %s exists already"); - break; - case VIR_ERR_OPERATION_DENIED: - if (info == NULL) - errmsg = _("operation forbidden for read only access"); - else - errmsg = _("operation forbidden: %s"); - break; - case VIR_ERR_OPEN_FAILED: - if (info == NULL) - errmsg = _("failed to open configuration file for reading"); - else - errmsg = _("failed to open %s for reading"); - break; - case VIR_ERR_READ_FAILED: - if (info == NULL) - errmsg = _("failed to read configuration file"); - else - errmsg = _("failed to read configuration file %s"); - break; - case VIR_ERR_PARSE_FAILED: - if (info == NULL) - errmsg = _("failed to parse configuration file"); - else - errmsg = _("failed to parse configuration file %s"); - break; - case VIR_ERR_CONF_SYNTAX: - if (info == NULL) - errmsg = _("configuration file syntax error"); - else - errmsg = _("configuration file syntax error: %s"); - break; - case VIR_ERR_WRITE_FAILED: - if (info == NULL) - errmsg = _("failed to write configuration file"); - else - errmsg = _("failed to write configuration file: %s"); - break; - case VIR_ERR_XML_DETAIL: - if (info == NULL) - errmsg = _("parser error"); - else - errmsg = "%s"; - break; - case VIR_ERR_INVALID_NETWORK: - if (info == NULL) - errmsg = _("invalid network pointer in"); - else - errmsg = _("invalid network pointer in %s"); - break; - case VIR_ERR_NETWORK_EXIST: - if (info == NULL) - errmsg = _("this network exists already"); - else - errmsg = _("network %s exists already"); - break; - case VIR_ERR_SYSTEM_ERROR: - if (info == NULL) - errmsg = _("system call error"); - else - errmsg = "%s"; - break; - case VIR_ERR_RPC: - if (info == NULL) - errmsg = _("RPC error"); - else - errmsg = "%s"; - break; - case VIR_ERR_GNUTLS_ERROR: - if (info == NULL) - errmsg = _("GNUTLS call error"); - else - errmsg = "%s"; - break; - case VIR_WAR_NO_NETWORK: - if (info == NULL) - errmsg = _("Failed to find the network"); - else - errmsg = _("Failed to find the network: %s"); - break; - case VIR_ERR_NO_DOMAIN: - if (info == NULL) - errmsg = _("Domain not found"); - else - errmsg = _("Domain not found: %s"); - break; - case VIR_ERR_NO_NETWORK: - if (info == NULL) - errmsg = _("Network not found"); - else - errmsg = _("Network not found: %s"); - break; - case VIR_ERR_INVALID_MAC: - if (info == NULL) - errmsg = _("invalid MAC address"); - else - errmsg = _("invalid MAC address: %s"); - break; - case VIR_ERR_AUTH_FAILED: - if (info == NULL) - errmsg = _("authentication failed"); - else - errmsg = _("authentication failed: %s"); - break; - case VIR_ERR_AUTH_CANCELLED: - if (info == NULL) - errmsg = _("authentication cancelled"); - else - errmsg = _("authentication cancelled: %s"); - break; - case VIR_ERR_AUTH_UNAVAILABLE: - if (info == NULL) - errmsg = _("authentication unavailable"); - else - errmsg = _("authentication unavailable: %s"); - break; - case VIR_ERR_NO_STORAGE_POOL: - if (info == NULL) - errmsg = _("Storage pool not found"); - else - errmsg = _("Storage pool not found: %s"); - break; - case VIR_ERR_NO_STORAGE_VOL: - if (info == NULL) - errmsg = _("Storage volume not found"); - else - errmsg = _("Storage volume not found: %s"); - break; - case VIR_ERR_STORAGE_VOL_EXIST: - if (info == NULL) - errmsg = _("this storage volume exists already"); - else - errmsg = _("storage volume %s exists already"); - break; - case VIR_ERR_STORAGE_PROBE_FAILED: - if (info == NULL) - errmsg = _("Storage pool probe failed"); - else - errmsg = _("Storage pool probe failed: %s"); - break; - case VIR_ERR_STORAGE_POOL_BUILT: - if (info == NULL) - errmsg = _("Storage pool already built"); - else - errmsg = _("Storage pool already built: %s"); - break; - case VIR_ERR_INVALID_STORAGE_POOL: - if (info == NULL) - errmsg = _("invalid storage pool pointer in"); - else - errmsg = _("invalid storage pool pointer in %s"); - break; - case VIR_ERR_INVALID_STORAGE_VOL: - if (info == NULL) - errmsg = _("invalid storage volume pointer in"); - else - errmsg = _("invalid storage volume pointer in %s"); - break; - case VIR_WAR_NO_STORAGE: - if (info == NULL) - errmsg = _("Failed to find a storage driver"); - else - errmsg = _("Failed to find a storage driver: %s"); - break; - case VIR_WAR_NO_NODE: - if (info == NULL) - errmsg = _("Failed to find a node driver"); - else - errmsg = _("Failed to find a node driver: %s"); - break; - case VIR_ERR_INVALID_NODE_DEVICE: - if (info == NULL) - errmsg = _("invalid node device pointer"); - else - errmsg = _("invalid node device pointer in %s"); - break; - case VIR_ERR_NO_NODE_DEVICE: - if (info == NULL) - errmsg = _("Node device not found"); - else - errmsg = _("Node device not found: %s"); - break; - case VIR_ERR_NO_SECURITY_MODEL: - if (info == NULL) - errmsg = _("Security model not found"); - else - errmsg = _("Security model not found: %s"); - break; - case VIR_ERR_OPERATION_INVALID: - if (info == NULL) - errmsg = _("Requested operation is not valid"); - else - errmsg = _("Requested operation is not valid: %s"); - break; - case VIR_WAR_NO_INTERFACE: - if (info == NULL) - errmsg = _("Failed to find the interface"); - else - errmsg = _("Failed to find the interface: %s"); - break; - case VIR_ERR_NO_INTERFACE: - if (info == NULL) - errmsg = _("Interface not found"); - else - errmsg = _("Interface not found: %s"); - break; - case VIR_ERR_INVALID_INTERFACE: - if (info == NULL) - errmsg = _("invalid interface pointer in"); - else - errmsg = _("invalid interface pointer in %s"); - break; - case VIR_ERR_MULTIPLE_INTERFACES: - if (info == NULL) - errmsg = _("multiple matching interfaces found"); - else - errmsg = _("multiple matching interfaces found: %s"); - break; - case VIR_WAR_NO_SECRET: - if (info == NULL) - errmsg = _("Failed to find a secret storage driver"); - else - errmsg = _("Failed to find a secret storage driver: %s"); - break; - case VIR_ERR_INVALID_SECRET: - if (info == NULL) - errmsg = _("Invalid secret"); - else - errmsg = _("Invalid secret: %s"); - break; - case VIR_ERR_NO_SECRET: - if (info == NULL) - errmsg = _("Secret not found"); - else - errmsg = _("Secret not found: %s"); - break; - case VIR_WAR_NO_NWFILTER: - if (info == NULL) - errmsg = _("Failed to start the nwfilter driver"); - else - errmsg = _("Failed to start the nwfilter driver: %s"); - break; - case VIR_ERR_INVALID_NWFILTER: - if (info == NULL) - errmsg = _("Invalid network filter"); - else - errmsg = _("Invalid network filter: %s"); - break; - case VIR_ERR_NO_NWFILTER: - if (info == NULL) - errmsg = _("Network filter not found"); - else - errmsg = _("Network filter not found: %s"); - break; - case VIR_ERR_BUILD_FIREWALL: - if (info == NULL) - errmsg = _("Error while building firewall"); - else - errmsg = _("Error while building firewall: %s"); - break; - case VIR_ERR_CONFIG_UNSUPPORTED: - if (info == NULL) - errmsg = _("unsupported configuration"); - else - errmsg = _("unsupported configuration: %s"); - break; - case VIR_ERR_OPERATION_TIMEOUT: - if (info == NULL) - errmsg = _("Timed out during operation"); - else - errmsg = _("Timed out during operation: %s"); - break; - case VIR_ERR_MIGRATE_PERSIST_FAILED: - if (info == NULL) - errmsg = _("Failed to make domain persistent after migration"); - else - errmsg = _("Failed to make domain persistent after migration: %s"); - break; - case VIR_ERR_HOOK_SCRIPT_FAILED: - if (info == NULL) - errmsg = _("Hook script execution failed"); - else - errmsg = _("Hook script execution failed: %s"); - break; - case VIR_ERR_INVALID_DOMAIN_SNAPSHOT: - if (info == NULL) - errmsg = _("Invalid snapshot"); - else - errmsg = _("Invalid snapshot: %s"); - break; - case VIR_ERR_NO_DOMAIN_SNAPSHOT: - if (info == NULL) - errmsg = _("Domain snapshot not found"); - else - errmsg = _("Domain snapshot not found: %s"); - break; - case VIR_ERR_INVALID_STREAM: - if (info == NULL) - errmsg = _("invalid stream pointer"); - else - errmsg = _("invalid stream pointer in %s"); - break; - case VIR_ERR_ARGUMENT_UNSUPPORTED: - if (info == NULL) - errmsg = _("argument unsupported"); - else - errmsg = _("argument unsupported: %s"); - break; - case VIR_ERR_SNAPSHOT_REVERT_RISKY: - if (info == NULL) - errmsg = _("revert requires force"); - else - errmsg = _("revert requires force: %s"); - break; - case VIR_ERR_OPERATION_ABORTED: - if (info == NULL) - errmsg = _("operation aborted"); - else - errmsg = _("operation aborted: %s"); - break; - case VIR_ERR_NO_DOMAIN_METADATA: - if (info == NULL) - errmsg = _("metadata not found"); - else - errmsg = _("metadata not found: %s"); - break; - case VIR_ERR_MIGRATE_UNSAFE: - if (!info) - errmsg = _("Unsafe migration"); - else - errmsg = _("Unsafe migration: %s"); - break; - case VIR_ERR_OVERFLOW: - if (!info) - errmsg = _("numerical overflow"); - else - errmsg = _("numerical overflow: %s"); - break; - case VIR_ERR_BLOCK_COPY_ACTIVE: - if (!info) - errmsg = _("block copy still active"); - else - errmsg = _("block copy still active: %s"); - break; - case VIR_ERR_OPERATION_UNSUPPORTED: - if (!info) - errmsg = _("Operation not supported"); - else - errmsg = _("Operation not supported: %s"); - break; - case VIR_ERR_SSH: - if (info == NULL) - errmsg = _("SSH transport error"); - else - errmsg = _("SSH transport error: %s"); - break; - case VIR_ERR_AGENT_UNRESPONSIVE: - if (info == NULL) - errmsg = _("Guest agent is not responding"); - else - errmsg = _("Guest agent is not responding: %s"); - break; - case VIR_ERR_RESOURCE_BUSY: - if (info == NULL) - errmsg = _("resource busy"); - else - errmsg = _("resource busy: %s"); - break; - case VIR_ERR_ACCESS_DENIED: - if (info == NULL) - errmsg = _("access denied"); - else - errmsg = _("access denied: %s"); - break; - case VIR_ERR_DBUS_SERVICE: - if (info == NULL) - errmsg = _("error from service"); - else - errmsg = _("error from service: %s"); - break; - case VIR_ERR_CPU_INCOMPATIBLE: - if (info == NULL) - errmsg = _("the CPU is incompatible with host CPU"); - else - errmsg = _("the CPU is incompatible with host CPU: %s"); - break; - case VIR_ERR_XML_INVALID_SCHEMA: - if (info == NULL) - errmsg = _("XML document failed to validate against schema"); - else - errmsg = _("XML document failed to validate against schema: %s"); - break; - case VIR_ERR_MIGRATE_FINISH_OK: - if (info == NULL) - errmsg = _("migration successfully aborted"); - else - errmsg = _("migration successfully aborted: %s"); - break; - case VIR_ERR_NO_SERVER: - if (info == NULL) - errmsg = _("Server not found"); - else - errmsg = _("Server not found: %s"); - break; - case VIR_ERR_NO_CLIENT: - if (info == NULL) - errmsg = _("Client not found"); - else - errmsg = _("Client not found: %s"); - break; - case VIR_ERR_AGENT_UNSYNCED: /* DEPRECATED */ - if (info == NULL) - errmsg = _("guest agent replied with wrong id to guest-sync command"); - else - errmsg = _("guest agent replied with wrong id to guest-sync command: %s"); - break; - case VIR_ERR_LIBSSH: - if (info == NULL) - errmsg = _("libssh transport error"); - else - errmsg = _("libssh transport error: %s"); - break; - case VIR_ERR_DEVICE_MISSING: - if (info == NULL) - errmsg = _("device not found"); - else - errmsg = _("device not found: %s"); - break; - case VIR_ERR_INVALID_NWFILTER_BINDING: - if (info == NULL) - errmsg = _("Invalid network filter binding"); - else - errmsg = _("Invalid network filter binding: %s"); - break; - case VIR_ERR_NO_NWFILTER_BINDING: - if (info == NULL) - errmsg = _("Network filter binding not found"); - else - errmsg = _("Network filter binding not found: %s"); - break; - } - return errmsg; + if (info) + return virErrorMsgStrings[error].msginfo; + else + return virErrorMsgStrings[error].msg; } + /** * virReportErrorHelper: * diff --git a/src/util/virerrorpriv.h b/src/util/virerrorpriv.h index bc214393e6..1be40d8a51 100644 --- a/src/util/virerrorpriv.h +++ b/src/util/virerrorpriv.h @@ -21,6 +21,14 @@ #ifndef __VIR_ERROR_PRIV_H__ # define __VIR_ERROR_PRIV_H__ +typedef struct { + virErrorNumber error; + const char *msg; + const char *msginfo; +} virErrorMsgTuple; + +extern const virErrorMsgTuple virErrorMsgStrings[VIR_ERR_NUMBER_LAST]; + const char * virErrorMsg(virErrorNumber error, const char *info); -- 2.19.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list