/** * qerror_from_info(): Create a new QError from error information * * Return strong reference. */ static QError *qerror_from_info(ErrorClass err_class, const char *fmt, va_list *va) { QError *qerr; qerr = qerror_new(); loc_save(&qerr->loc); qerr->err_msg = g_strdup_vprintf(fmt, *va); qerr->err_class = err_class; return qerr; }
void qerror_report_err(Error *err) { QError *qerr; qerr = qerror_new(); loc_save(&qerr->loc); qerr->err_msg = g_strdup(err->msg); qerr->err_class = err->err_class; if (monitor_cur_is_qmp()) { monitor_set_error(cur_mon, qerr); } else { qerror_print(qerr); QDECREF(qerr); } }
/** * qerror_from_info(): Create a new QError from error information * * The information consists of: * * - file the file name of where the error occurred * - linenr the line number of where the error occurred * - func the function name of where the error occurred * - fmt JSON printf-like dictionary, there must exist keys 'class' and * 'data' * - va va_list of all arguments specified by fmt * * Return strong reference. */ QError *qerror_from_info(const char *file, int linenr, const char *func, const char *fmt, va_list *va) { QError *qerr; qerr = qerror_new(); qerr->linenr = linenr; qerr->file = file; qerr->func = func; if (!fmt) { qerror_abort(qerr, "QDict not specified"); } qerror_set_data(qerr, fmt, va); qerror_set_desc(qerr, fmt); return qerr; }
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); } }