From: Daniel P. Berrange Date: Fri, 10 May 2013 17:09:44 +0000 (+0100) Subject: Add a virGetLastErrorMessage() function X-Git-Tag: CVE-2013-1962~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=69c6a58a1d3906fdb3ee7929a03ce9b59f33e1c3;p=thirdparty%2Flibvirt.git Add a virGetLastErrorMessage() function Apps using libvirt will often have code like if (virXXXX() < 0) { virErrorPtr err = virGetLastError(); fprintf(stderr, "Something failed: %s\n", err && err->message ? err->message : "unknown error"); return -1; } Checking for a NULL error object or message leads to very verbose code. A virGetLastErrorMessage() helper from libvirt can simplify this to if (virXXXX() < 0) { fprintf(stderr, "Something failed: %s\n", virGetLastErrorMessage()); return -1; } Signed-off-by: Daniel P. Berrange --- diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h index 3864a31b31..cd7e3b31e0 100644 --- a/include/libvirt/virterror.h +++ b/include/libvirt/virterror.h @@ -313,6 +313,8 @@ void virResetLastError (void); void virResetError (virErrorPtr err); void virFreeError (virErrorPtr err); +const char * virGetLastErrorMessage (void); + virErrorPtr virConnGetLastError (virConnectPtr conn); void virConnResetLastError (virConnectPtr conn); int virCopyLastError (virErrorPtr to); diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index dfbf44ef53..4ee2d27539 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -616,4 +616,9 @@ LIBVIRT_1.0.5 { virNodeDeviceDetachFlags; } LIBVIRT_1.0.3; +LIBVIRT_1.0.6 { + global: + virGetLastErrorMessage; +} LIBVIRT_1.0.5; + # .... define new API here using predicted next version number .... diff --git a/src/util/virerror.c b/src/util/virerror.c index af4da8c8fb..4e1dc9a32b 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -234,6 +234,27 @@ virGetLastError(void) return err; } + +/** + * virGetLastErrorMessage: + * + * Get the most recent error message + * + * Returns the most recent error message string in this + * thread, or a generic message if none is set + */ +const char * +virGetLastErrorMessage(void) +{ + virErrorPtr err = virLastErrorObject(); + if (!err || err->code == VIR_ERR_OK) + return _("no error"); + if (err->message == NULL) + return _("unknown error"); + return err->message; +} + + /** * virSetError: * @newerr: previously saved error object