.error_fmt = QERR_QMP_EXTRA_MEMBER,
.desc = "QMP input object member '%(member)' is unexpected",
},
+ {
+ .error_fmt = QERR_RESET_REQUIRED,
+ .desc = "Resetting the Virtual Machine is required",
+ },
{
.error_fmt = QERR_SET_PASSWD_FAILED,
.desc = "Could not set password",
},
+ {
+ .error_fmt = QERR_ADD_CLIENT_FAILED,
+ .desc = "Could not add client",
+ },
{
.error_fmt = QERR_TOO_MANY_FILES,
.desc = "Too many open files",
{
QError *qerr;
- qerr = qemu_mallocz(sizeof(*qerr));
+ qerr = g_malloc0(sizeof(*qerr));
QOBJECT_INIT(qerr, &qerror_type);
return qerr;
}
}
+/* 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
*/
qerr = qobject_to_qerror(obj);
QDECREF(qerr->error);
- qemu_free(qerr);
+ g_free(qerr);
}