[libvirt] [PATCH] virsh: Show errors reported by nonAPI functions

Only API calls trigger the error callback, which is required for proper virsh error reporting. Since we use non API functions from util/, make sure we properly report these errors. Fixes lack of error message from 'virsh create idontexit.xml' Signed-off-by: Cole Robinson <crobinso@redhat.com> --- tools/virsh.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index 5fdbbe5..74e3fad 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -352,8 +352,16 @@ virshErrorHandler(void *unused ATTRIBUTE_UNUSED, virErrorPtr error) static void virshReportError(vshControl *ctl) { - if (last_error == NULL) - return; + if (last_error == NULL) { + /* Calling directly into libvirt util functions won't trigger the + * error callback (which sets last_error), so check it ourselves. + * + * If the returned error has CODE_OK, this most likely means that + * no error was ever raised, so just ignore */ + last_error = virSaveLastError(); + if (!last_error || last_error->code == VIR_ERR_OK) + return NULL; + } if (last_error->code == VIR_ERR_OK) { vshError(ctl, "%s", _("unknown error")); -- 1.6.5.2

On Wed, Feb 24, 2010 at 12:55:17PM -0500, Cole Robinson wrote:
Only API calls trigger the error callback, which is required for proper virsh error reporting. Since we use non API functions from util/, make sure we properly report these errors.
Fixes lack of error message from 'virsh create idontexit.xml'
Signed-off-by: Cole Robinson <crobinso@redhat.com> --- tools/virsh.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c index 5fdbbe5..74e3fad 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -352,8 +352,16 @@ virshErrorHandler(void *unused ATTRIBUTE_UNUSED, virErrorPtr error) static void virshReportError(vshControl *ctl) { - if (last_error == NULL) - return; + if (last_error == NULL) { + /* Calling directly into libvirt util functions won't trigger the + * error callback (which sets last_error), so check it ourselves. + * + * If the returned error has CODE_OK, this most likely means that + * no error was ever raised, so just ignore */ + last_error = virSaveLastError(); + if (!last_error || last_error->code == VIR_ERR_OK) + return NULL; + }
if (last_error->code == VIR_ERR_OK) { vshError(ctl, "%s", _("unknown error"));
Looks fine, ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/
participants (2)
-
Cole Robinson
-
Daniel Veillard