mirror of
https://github.com/mii443/qemu.git
synced 2025-12-16 17:18:49 +00:00
qerror: add qerror_report_err()
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 <aliguori@us.ibm.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
committed by
Luiz Capitulino
parent
acceb4d99f
commit
2a82d936a2
33
qerror.c
33
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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user