root / error.c @ 13ef70f6
History | View | Annotate | Download (1.5 kB)
1 | d5ec4f27 | Luiz Capitulino | /*
|
---|---|---|---|
2 | d5ec4f27 | Luiz Capitulino | * QEMU Error Objects
|
3 | d5ec4f27 | Luiz Capitulino | *
|
4 | d5ec4f27 | Luiz Capitulino | * Copyright IBM, Corp. 2011
|
5 | d5ec4f27 | Luiz Capitulino | *
|
6 | d5ec4f27 | Luiz Capitulino | * Authors:
|
7 | d5ec4f27 | Luiz Capitulino | * Anthony Liguori <aliguori@us.ibm.com>
|
8 | d5ec4f27 | Luiz Capitulino | *
|
9 | d5ec4f27 | Luiz Capitulino | * This work is licensed under the terms of the GNU LGPL, version 2. See
|
10 | d5ec4f27 | Luiz Capitulino | * the COPYING.LIB file in the top-level directory.
|
11 | d5ec4f27 | Luiz Capitulino | */
|
12 | e4ea5e2d | Stefan Weil | |
13 | e4ea5e2d | Stefan Weil | #include "qemu-common.h" |
14 | d5ec4f27 | Luiz Capitulino | #include "error.h" |
15 | f795e743 | Luiz Capitulino | #include "qjson.h" |
16 | f795e743 | Luiz Capitulino | #include "qdict.h" |
17 | 13f59ae8 | Luiz Capitulino | #include "qapi-types.h" |
18 | d5ec4f27 | Luiz Capitulino | #include "qerror.h" |
19 | d5ec4f27 | Luiz Capitulino | |
20 | d5ec4f27 | Luiz Capitulino | struct Error
|
21 | d5ec4f27 | Luiz Capitulino | { |
22 | d5ec4f27 | Luiz Capitulino | char *msg;
|
23 | 13f59ae8 | Luiz Capitulino | ErrorClass err_class; |
24 | d5ec4f27 | Luiz Capitulino | }; |
25 | d5ec4f27 | Luiz Capitulino | |
26 | 13f59ae8 | Luiz Capitulino | void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...) |
27 | d5ec4f27 | Luiz Capitulino | { |
28 | d5ec4f27 | Luiz Capitulino | Error *err; |
29 | d5ec4f27 | Luiz Capitulino | va_list ap; |
30 | d5ec4f27 | Luiz Capitulino | |
31 | d5ec4f27 | Luiz Capitulino | if (errp == NULL) { |
32 | d5ec4f27 | Luiz Capitulino | return;
|
33 | d5ec4f27 | Luiz Capitulino | } |
34 | d195325b | Paolo Bonzini | assert(*errp == NULL);
|
35 | d5ec4f27 | Luiz Capitulino | |
36 | 7267c094 | Anthony Liguori | err = g_malloc0(sizeof(*err));
|
37 | d5ec4f27 | Luiz Capitulino | |
38 | d5ec4f27 | Luiz Capitulino | va_start(ap, fmt); |
39 | df1e608a | Luiz Capitulino | err->msg = g_strdup_vprintf(fmt, ap); |
40 | d5ec4f27 | Luiz Capitulino | va_end(ap); |
41 | 13f59ae8 | Luiz Capitulino | err->err_class = err_class; |
42 | d5ec4f27 | Luiz Capitulino | |
43 | d5ec4f27 | Luiz Capitulino | *errp = err; |
44 | d5ec4f27 | Luiz Capitulino | } |
45 | d5ec4f27 | Luiz Capitulino | |
46 | 79020cfc | Luiz Capitulino | Error *error_copy(const Error *err)
|
47 | 79020cfc | Luiz Capitulino | { |
48 | 79020cfc | Luiz Capitulino | Error *err_new; |
49 | 79020cfc | Luiz Capitulino | |
50 | 79020cfc | Luiz Capitulino | err_new = g_malloc0(sizeof(*err));
|
51 | 79020cfc | Luiz Capitulino | err_new->msg = g_strdup(err->msg); |
52 | 13f59ae8 | Luiz Capitulino | err_new->err_class = err->err_class; |
53 | 79020cfc | Luiz Capitulino | |
54 | 79020cfc | Luiz Capitulino | return err_new;
|
55 | 79020cfc | Luiz Capitulino | } |
56 | 79020cfc | Luiz Capitulino | |
57 | d5ec4f27 | Luiz Capitulino | bool error_is_set(Error **errp)
|
58 | d5ec4f27 | Luiz Capitulino | { |
59 | d5ec4f27 | Luiz Capitulino | return (errp && *errp);
|
60 | d5ec4f27 | Luiz Capitulino | } |
61 | d5ec4f27 | Luiz Capitulino | |
62 | ea25fbca | Luiz Capitulino | ErrorClass error_get_class(const Error *err)
|
63 | ea25fbca | Luiz Capitulino | { |
64 | ea25fbca | Luiz Capitulino | return err->err_class;
|
65 | ea25fbca | Luiz Capitulino | } |
66 | ea25fbca | Luiz Capitulino | |
67 | d5ec4f27 | Luiz Capitulino | const char *error_get_pretty(Error *err) |
68 | d5ec4f27 | Luiz Capitulino | { |
69 | d5ec4f27 | Luiz Capitulino | return err->msg;
|
70 | d5ec4f27 | Luiz Capitulino | } |
71 | d5ec4f27 | Luiz Capitulino | |
72 | d5ec4f27 | Luiz Capitulino | void error_free(Error *err)
|
73 | d5ec4f27 | Luiz Capitulino | { |
74 | d5ec4f27 | Luiz Capitulino | if (err) {
|
75 | 7267c094 | Anthony Liguori | g_free(err->msg); |
76 | 7267c094 | Anthony Liguori | g_free(err); |
77 | d5ec4f27 | Luiz Capitulino | } |
78 | d5ec4f27 | Luiz Capitulino | } |
79 | d5ec4f27 | Luiz Capitulino | |
80 | d5ec4f27 | Luiz Capitulino | void error_propagate(Error **dst_err, Error *local_err)
|
81 | d5ec4f27 | Luiz Capitulino | { |
82 | d195325b | Paolo Bonzini | if (dst_err && !*dst_err) {
|
83 | d5ec4f27 | Luiz Capitulino | *dst_err = local_err; |
84 | d5ec4f27 | Luiz Capitulino | } else if (local_err) { |
85 | d5ec4f27 | Luiz Capitulino | error_free(local_err); |
86 | d5ec4f27 | Luiz Capitulino | } |
87 | d5ec4f27 | Luiz Capitulino | } |