summary refs log tree commit diff stats
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)
downloadfocaccia-qemu-680d16dcb79f999fad3a652c5190d6a5c6ea10dd.tar.gz
focaccia-qemu-680d16dcb79f999fad3a652c5190d6a5c6ea10dd.zip
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;