[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/29] error: add error_set_errno and error_setg_err
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 01/29] error: add error_set_errno and error_setg_errno |
Date: |
Fri, 19 Oct 2012 15:31:40 +0200 |
These functions help maintaining homogeneous formatting of error
messages that include strerror values.
Acked-by: Luiz Capitulino <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
error.c | 28 ++++++++++++++++++++++++++++
error.h | 9 +++++++++
2 file modificati, 37 inserzioni(+)
diff --git a/error.c b/error.c
index 1f05fc4..128d88c 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;
diff --git a/error.h b/error.h
index da7fed3..4d52e73 100644
--- a/error.h
+++ b/error.h
@@ -30,10 +30,19 @@ typedef struct Error Error;
void error_set(Error **err, ErrorClass err_class, const char *fmt, ...)
GCC_FMT_ATTR(3, 4);
/**
+ * Set an indirect pointer to an error given a ErrorClass value and a
+ * printf-style human message, followed by a strerror() string if
+ * @os_error is not zero.
+ */
+void error_set_errno(Error **err, int os_error, ErrorClass err_class, const
char *fmt, ...) GCC_FMT_ATTR(4, 5);
+
+/**
* Same as error_set(), but sets a generic error
*/
#define error_setg(err, fmt, ...) \
error_set(err, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
+#define error_setg_errno(err, os_error, fmt, ...) \
+ error_set_errno(err, os_error, ERROR_CLASS_GENERIC_ERROR, fmt, ##
__VA_ARGS__)
/**
* Returns true if an indirect pointer to an error is pointing to a valid
--
1.7.12.1
- [Qemu-devel] [PULL 00/29] qemu-sockets error propagation + NBD server, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 01/29] error: add error_set_errno and error_setg_errno,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 02/29] qemu-sockets: add Error ** to all functions, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 04/29] qemu-sockets: add nonblocking connect for Unix sockets, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 03/29] qemu-sockets: unix_listen and unix_connect are portable, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 05/29] migration: avoid using error_is_set and thus relying on errp != NULL, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 07/29] migration: use qemu-sockets to establish Unix sockets, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 06/29] migration: centralize call to migrate_fd_error(), Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 11/29] nbd: ask and print error information from qemu-sockets, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 15/29] vnc: reorganize code for reverse mode, Paolo Bonzini, 2012/10/19
- [Qemu-devel] [PATCH 16/29] vnc: add error propagation to vnc_display_open, Paolo Bonzini, 2012/10/19