* This work is licensed under the terms of the GNU LGPL, version 2. See
* the COPYING.LIB file in the top-level directory.
*/
+
+#include "qemu-common.h"
#include "error.h"
+#include "qjson.h"
+#include "qdict.h"
#include "error_int.h"
-#include "qemu-objects.h"
#include "qerror.h"
-#include <assert.h>
struct Error
{
return;
}
- err = qemu_mallocz(sizeof(*err));
+ err = g_malloc0(sizeof(*err));
va_start(ap, fmt);
err->obj = qobject_to_qdict(qobject_from_jsonv(fmt, &ap));
*errp = err;
}
+Error *error_copy(const Error *err)
+{
+ Error *err_new;
+
+ err_new = g_malloc0(sizeof(*err));
+ err_new->msg = g_strdup(err->msg);
+ err_new->fmt = err->fmt;
+ err_new->obj = err->obj;
+ QINCREF(err_new->obj);
+
+ return err_new;
+}
+
bool error_is_set(Error **errp)
{
return (errp && *errp);
if (err->msg == NULL) {
QString *str;
str = qerror_format(err->fmt, err->obj);
- err->msg = qemu_strdup(qstring_get_str(str));
+ err->msg = g_strdup(qstring_get_str(str));
QDECREF(str);
}
void error_set_field(Error *err, const char *field, const char *value)
{
QDict *dict = qdict_get_qdict(err->obj, "data");
- return qdict_put(dict, field, qstring_from_str(value));
+ qdict_put(dict, field, qstring_from_str(value));
}
void error_free(Error *err)
{
if (err) {
QDECREF(err->obj);
- qemu_free(err->msg);
- qemu_free(err);
+ g_free(err->msg);
+ g_free(err);
}
}
char *ptr;
char *end;
+ if (!err) {
+ return false;
+ }
+
ptr = strstr(fmt, "'class': '");
assert(ptr != NULL);
ptr += strlen("'class': '");
if (errp == NULL) {
return;
}
- err = qemu_mallocz(sizeof(*err));
+ err = g_malloc0(sizeof(*err));
err->obj = qobject_to_qdict(obj);
qobject_incref(obj);