summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-10-02 09:00:45 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2012-10-23 13:54:55 +0200
commit680d16dcb79f999fad3a652c5190d6a5c6ea10dd (patch)
treeab13fbe847285bbd18c2e4709cd9f0c04f45f8fd /error.c
parentda124e62de2109a312e21d85d6a3419774c58948 (diff)
downloadqemu-680d16dcb79f999fad3a652c5190d6a5c6ea10dd.tar.gz
error: add error_set_errno and error_setg_errno
These functions help maintaining homogeneous formatting of error messages that include strerror values. Acked-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'error.c')
-rw-r--r--error.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/error.c b/error.c
index 1f05fc466e..128d88cd91 100644
--- a/error.c
+++ b/error.c
@@ -43,6 +43,34 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
*errp = err;
}
+void error_set_errno(Error **errp, int os_errno, ErrorClass err_class,
+ const char *fmt, ...)
+{
+ Error *err;
+ char *msg1;
+ va_list ap;
+
+ if (errp == NULL) {
+ return;
+ }
+ assert(*errp == NULL);
+
+ err = g_malloc0(sizeof(*err));
+
+ va_start(ap, fmt);
+ msg1 = g_strdup_vprintf(fmt, ap);
+ if (os_errno != 0) {
+ err->msg = g_strdup_printf("%s: %s", msg1, strerror(os_errno));
+ g_free(msg1);
+ } else {
+ err->msg = msg1;
+ }
+ va_end(ap);
+ err->err_class = err_class;
+
+ *errp = err;
+}
+
Error *error_copy(const Error *err)
{
Error *err_new;