]> git.proxmox.com Git - mirror_qemu.git/blob - error.c
error: drop unused functions
[mirror_qemu.git] / error.c
1 /*
2 * QEMU Error Objects
3 *
4 * Copyright IBM, Corp. 2011
5 *
6 * Authors:
7 * Anthony Liguori <aliguori@us.ibm.com>
8 *
9 * This work is licensed under the terms of the GNU LGPL, version 2. See
10 * the COPYING.LIB file in the top-level directory.
11 */
12
13 #include "qemu-common.h"
14 #include "error.h"
15 #include "qjson.h"
16 #include "qdict.h"
17 #include "qapi-types.h"
18 #include "error_int.h"
19 #include "qerror.h"
20
21 struct Error
22 {
23 QDict *obj;
24 char *msg;
25 ErrorClass err_class;
26 };
27
28 void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
29 {
30 Error *err;
31 va_list ap;
32
33 if (errp == NULL) {
34 return;
35 }
36 assert(*errp == NULL);
37
38 err = g_malloc0(sizeof(*err));
39
40 va_start(ap, fmt);
41 err->obj = qobject_to_qdict(qobject_from_jsonv(fmt, &ap));
42 va_end(ap);
43 err->msg = qerror_format(fmt, err->obj);
44 err->err_class = err_class;
45
46 *errp = err;
47 }
48
49 Error *error_copy(const Error *err)
50 {
51 Error *err_new;
52
53 err_new = g_malloc0(sizeof(*err));
54 err_new->msg = g_strdup(err->msg);
55 err_new->err_class = err->err_class;
56 err_new->obj = err->obj;
57 QINCREF(err_new->obj);
58
59 return err_new;
60 }
61
62 bool error_is_set(Error **errp)
63 {
64 return (errp && *errp);
65 }
66
67 ErrorClass error_get_class(const Error *err)
68 {
69 return err->err_class;
70 }
71
72 const char *error_get_pretty(Error *err)
73 {
74 return err->msg;
75 }
76
77 void error_free(Error *err)
78 {
79 if (err) {
80 QDECREF(err->obj);
81 g_free(err->msg);
82 g_free(err);
83 }
84 }
85
86 void error_propagate(Error **dst_err, Error *local_err)
87 {
88 if (dst_err && !*dst_err) {
89 *dst_err = local_err;
90 } else if (local_err) {
91 error_free(local_err);
92 }
93 }
94
95 QObject *error_get_qobject(Error *err)
96 {
97 QINCREF(err->obj);
98 return QOBJECT(err->obj);
99 }
100
101 void error_set_qobject(Error **errp, QObject *obj)
102 {
103 Error *err;
104 if (errp == NULL) {
105 return;
106 }
107 err = g_malloc0(sizeof(*err));
108 err->obj = qobject_to_qdict(obj);
109 qobject_incref(obj);
110
111 *errp = err;
112 }