[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/21] qerror: add qerror_report_err()
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 02/21] qerror: add qerror_report_err() |
Date: |
Wed, 28 Sep 2011 11:44:26 -0300 |
From: Anthony Liguori <address@hidden>
This provides a bridge between Error (new error mechanism) and QError (old error
mechanism). Errors can be propagated whereas QError cannot.
The minor evilness avoids layering violations. Since QError should go away RSN,
it seems like a reasonable hack.
Signed-off-by: Anthony Liguori <address@hidden>
Signed-off-by: Luiz Capitulino <address@hidden>
---
qerror.c | 33 +++++++++++++++++++++++++++++++++
qerror.h | 2 ++
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/qerror.c b/qerror.c
index c591a54..68998d4 100644
--- a/qerror.c
+++ b/qerror.c
@@ -482,6 +482,39 @@ void qerror_report_internal(const char *file, int linenr,
const char *func,
}
}
+/* Evil... */
+struct Error
+{
+ QDict *obj;
+ const char *fmt;
+ char *msg;
+};
+
+void qerror_report_err(Error *err)
+{
+ QError *qerr;
+ int i;
+
+ qerr = qerror_new();
+ loc_save(&qerr->loc);
+ QINCREF(err->obj);
+ qerr->error = err->obj;
+
+ for (i = 0; qerror_table[i].error_fmt; i++) {
+ if (strcmp(qerror_table[i].error_fmt, err->fmt) == 0) {
+ qerr->entry = &qerror_table[i];
+ break;
+ }
+ }
+
+ if (monitor_cur_is_qmp()) {
+ monitor_set_error(cur_mon, qerr);
+ } else {
+ qerror_print(qerr);
+ QDECREF(qerr);
+ }
+}
+
/**
* qobject_to_qerror(): Convert a QObject into a QError
*/
diff --git a/qerror.h b/qerror.h
index d407001..d4bfcfd 100644
--- a/qerror.h
+++ b/qerror.h
@@ -15,6 +15,7 @@
#include "qdict.h"
#include "qstring.h"
#include "qemu-error.h"
+#include "error.h"
#include <stdarg.h>
typedef struct QErrorStringTable {
@@ -39,6 +40,7 @@ QString *qerror_human(const QError *qerror);
void qerror_print(QError *qerror);
void qerror_report_internal(const char *file, int linenr, const char *func,
const char *fmt, ...) GCC_FMT_ATTR(4, 5);
+void qerror_report_err(Error *err);
QString *qerror_format(const char *fmt, QDict *error);
#define qerror_report(fmt, ...) \
qerror_report_internal(__FILE__, __LINE__, __func__, fmt, ## __VA_ARGS__)
--
1.7.7.rc0.72.g4b5ea
- [Qemu-devel] [PATCH v1 00/21]: First round of QAPI conversions, Luiz Capitulino, 2011/09/28
- [Qemu-devel] [PATCH 02/21] qerror: add qerror_report_err(),
Luiz Capitulino <=
- [Qemu-devel] [PATCH 03/21] qapi: add code generation support for middle mode, Luiz Capitulino, 2011/09/28
- [Qemu-devel] [PATCH 04/21] qapi: use middle mode in QMP server, Luiz Capitulino, 2011/09/28
- [Qemu-devel] [PATCH 01/21] error: let error_is_type take a NULL error, Luiz Capitulino, 2011/09/28
- [Qemu-devel] [PATCH 07/21] qapi: generate qapi_free_* functions for *List types, Luiz Capitulino, 2011/09/28
- [Qemu-devel] [PATCH 05/21] qapi: fixup command generation for functions that return list types, Luiz Capitulino, 2011/09/28
- [Qemu-devel] [PATCH 08/21] qapi: add test cases for generated free functions, Luiz Capitulino, 2011/09/28
- [Qemu-devel] [PATCH 09/21] qapi: dealloc visitor, support freeing of nested lists, Luiz Capitulino, 2011/09/28