aboutsummaryrefslogtreecommitdiff
path: root/qerror.c
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2011-10-10 08:21:46 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2011-10-10 08:21:46 -0500
commitebffe2afceb1a17b5d134b5debf553955fe5ea1a (patch)
tree223ee0630a56a8d1410d5ad283996486ec434ab7 /qerror.c
parent057643f6c4751651ab640edb9b445cb3816edffc (diff)
parent5bc465e4b1b6f4582a400c0a7033a1c841744278 (diff)
Merge remote-tracking branch 'qmp/queue/qmp' into staging
Diffstat (limited to 'qerror.c')
-rw-r--r--qerror.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/qerror.c b/qerror.c
index c591a5443c..68998d4bab 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
*/