Statistics
| Branch: | Revision:

root / qerror.h @ c0424934

History | View | Annotate | Download (8 kB)

1 9f9daf9a Luiz Capitulino
/*
2 41836a9f Luiz Capitulino
 * QError Module
3 9f9daf9a Luiz Capitulino
 *
4 9f9daf9a Luiz Capitulino
 * Copyright (C) 2009 Red Hat Inc.
5 9f9daf9a Luiz Capitulino
 *
6 9f9daf9a Luiz Capitulino
 * Authors:
7 9f9daf9a Luiz Capitulino
 *  Luiz Capitulino <lcapitulino@redhat.com>
8 9f9daf9a Luiz Capitulino
 *
9 9f9daf9a Luiz Capitulino
 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10 9f9daf9a Luiz Capitulino
 * See the COPYING.LIB file in the top-level directory.
11 9f9daf9a Luiz Capitulino
 */
12 9f9daf9a Luiz Capitulino
#ifndef QERROR_H
13 9f9daf9a Luiz Capitulino
#define QERROR_H
14 9f9daf9a Luiz Capitulino
15 9f9daf9a Luiz Capitulino
#include "qdict.h"
16 77e595e7 Markus Armbruster
#include "qstring.h"
17 827b0813 Markus Armbruster
#include "qemu-error.h"
18 2a82d936 Anthony Liguori
#include "error.h"
19 9f9daf9a Luiz Capitulino
#include <stdarg.h>
20 9f9daf9a Luiz Capitulino
21 9f9daf9a Luiz Capitulino
typedef struct QErrorStringTable {
22 9f9daf9a Luiz Capitulino
    const char *desc;
23 9f9daf9a Luiz Capitulino
    const char *error_fmt;
24 9f9daf9a Luiz Capitulino
} QErrorStringTable;
25 9f9daf9a Luiz Capitulino
26 9f9daf9a Luiz Capitulino
typedef struct QError {
27 9f9daf9a Luiz Capitulino
    QObject_HEAD;
28 9f9daf9a Luiz Capitulino
    QDict *error;
29 827b0813 Markus Armbruster
    Location loc;
30 9f9daf9a Luiz Capitulino
    int linenr;
31 9f9daf9a Luiz Capitulino
    const char *file;
32 9f9daf9a Luiz Capitulino
    const char *func;
33 9f9daf9a Luiz Capitulino
    const QErrorStringTable *entry;
34 9f9daf9a Luiz Capitulino
} QError;
35 9f9daf9a Luiz Capitulino
36 9f9daf9a Luiz Capitulino
QError *qerror_new(void);
37 9f9daf9a Luiz Capitulino
QError *qerror_from_info(const char *file, int linenr, const char *func,
38 8b7968f7 Stefan Weil
                         const char *fmt, va_list *va) GCC_FMT_ATTR(4, 0);
39 77e595e7 Markus Armbruster
QString *qerror_human(const QError *qerror);
40 827b0813 Markus Armbruster
void qerror_print(QError *qerror);
41 0167f772 Markus Armbruster
void qerror_report_internal(const char *file, int linenr, const char *func,
42 e5924d89 Stefan Weil
                            const char *fmt, ...) GCC_FMT_ATTR(4, 5);
43 2a82d936 Anthony Liguori
void qerror_report_err(Error *err);
44 59f971d4 Paolo Bonzini
void assert_no_error(Error *err);
45 87c2f591 Luiz Capitulino
QString *qerror_format(const char *fmt, QDict *error);
46 0167f772 Markus Armbruster
#define qerror_report(fmt, ...) \
47 0167f772 Markus Armbruster
    qerror_report_internal(__FILE__, __LINE__, __func__, fmt, ## __VA_ARGS__)
48 9f9daf9a Luiz Capitulino
QError *qobject_to_qerror(const QObject *obj);
49 9f9daf9a Luiz Capitulino
50 9f9daf9a Luiz Capitulino
/*
51 9f9daf9a Luiz Capitulino
 * QError class list
52 9d494c4b Markus Armbruster
 * Please keep the definitions in alphabetical order.
53 9737383b Stefan Hajnoczi
 * Use scripts/check-qerror.sh to check.
54 9f9daf9a Luiz Capitulino
 */
55 c1303596 Stefan Hajnoczi
#define QERR_ADD_CLIENT_FAILED \
56 c1303596 Stefan Hajnoczi
    "{ 'class': 'AddClientFailed', 'data': {} }"
57 c1303596 Stefan Hajnoczi
58 11e35bfd Paolo Bonzini
#define QERR_AMBIGUOUS_PATH \
59 11e35bfd Paolo Bonzini
    "{ 'class': 'AmbiguousPath', 'data': { 'path': %s } }"
60 11e35bfd Paolo Bonzini
61 56e9f563 Markus Armbruster
#define QERR_BAD_BUS_FOR_DEVICE \
62 56e9f563 Markus Armbruster
    "{ 'class': 'BadBusForDevice', 'data': { 'device': %s, 'bad_bus_type': %s } }"
63 56e9f563 Markus Armbruster
64 019b8cbf Marcelo Tosatti
#define QERR_BASE_NOT_FOUND \
65 019b8cbf Marcelo Tosatti
    "{ 'class': 'BaseNotFound', 'data': { 'base': %s } }"
66 019b8cbf Marcelo Tosatti
67 1ed520c6 Anthony Liguori
#define QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED \
68 1ed520c6 Anthony Liguori
    "{ 'class': 'BlockFormatFeatureNotSupported', 'data': { 'format': %s, 'name': %s, 'feature': %s } }"
69 1ed520c6 Anthony Liguori
70 c1303596 Stefan Hajnoczi
#define QERR_BUFFER_OVERRUN \
71 c1303596 Stefan Hajnoczi
    "{ 'class': 'BufferOverrun', 'data': {} }"
72 7bbd8237 Markus Armbruster
73 8eae73b5 Markus Armbruster
#define QERR_BUS_NO_HOTPLUG \
74 8eae73b5 Markus Armbruster
    "{ 'class': 'BusNoHotplug', 'data': { 'bus': %s } }"
75 8eae73b5 Markus Armbruster
76 c1303596 Stefan Hajnoczi
#define QERR_BUS_NOT_FOUND \
77 c1303596 Stefan Hajnoczi
    "{ 'class': 'BusNotFound', 'data': { 'bus': %s } }"
78 4b9d4683 Luiz Capitulino
79 abd6cf6d Michael Roth
#define QERR_COMMAND_DISABLED \
80 abd6cf6d Michael Roth
    "{ 'class': 'CommandDisabled', 'data': { 'name': %s } }"
81 abd6cf6d Michael Roth
82 c1303596 Stefan Hajnoczi
#define QERR_COMMAND_NOT_FOUND \
83 c1303596 Stefan Hajnoczi
    "{ 'class': 'CommandNotFound', 'data': { 'name': %s } }"
84 c1303596 Stefan Hajnoczi
85 0df37c41 Luiz Capitulino
#define QERR_DEVICE_ENCRYPTED \
86 903a8814 Luiz Capitulino
    "{ 'class': 'DeviceEncrypted', 'data': { 'device': %s, 'filename': %s } }"
87 9f9daf9a Luiz Capitulino
88 c1303596 Stefan Hajnoczi
#define QERR_DEVICE_FEATURE_BLOCKS_MIGRATION \
89 c1303596 Stefan Hajnoczi
    "{ 'class': 'DeviceFeatureBlocksMigration', 'data': { 'device': %s, 'feature': %s } }"
90 c1303596 Stefan Hajnoczi
91 939a1cc3 Stefan Hajnoczi
#define QERR_DEVICE_HAS_NO_MEDIUM \
92 939a1cc3 Stefan Hajnoczi
    "{ 'class': 'DeviceHasNoMedium', 'data': { 'device': %s } }"
93 939a1cc3 Stefan Hajnoczi
94 4d9a1a15 Markus Armbruster
#define QERR_DEVICE_INIT_FAILED \
95 4d9a1a15 Markus Armbruster
    "{ 'class': 'DeviceInitFailed', 'data': { 'device': %s } }"
96 4d9a1a15 Markus Armbruster
97 5124eb59 Markus Armbruster
#define QERR_DEVICE_IN_USE \
98 5124eb59 Markus Armbruster
    "{ 'class': 'DeviceInUse', 'data': { 'device': %s } }"
99 5124eb59 Markus Armbruster
100 939a1cc3 Stefan Hajnoczi
#define QERR_DEVICE_IS_READ_ONLY \
101 939a1cc3 Stefan Hajnoczi
    "{ 'class': 'DeviceIsReadOnly', 'data': { 'device': %s } }"
102 939a1cc3 Stefan Hajnoczi
103 fc5469d8 Markus Armbruster
#define QERR_DEVICE_LOCKED \
104 b0868380 Markus Armbruster
    "{ 'class': 'DeviceLocked', 'data': { 'device': %s } }"
105 b0868380 Markus Armbruster
106 1ae78718 Markus Armbruster
#define QERR_DEVICE_MULTIPLE_BUSSES \
107 1ae78718 Markus Armbruster
    "{ 'class': 'DeviceMultipleBusses', 'data': { 'device': %s } }"
108 1ae78718 Markus Armbruster
109 c1303596 Stefan Hajnoczi
#define QERR_DEVICE_NO_BUS \
110 c1303596 Stefan Hajnoczi
    "{ 'class': 'DeviceNoBus', 'data': { 'device': %s } }"
111 c1303596 Stefan Hajnoczi
112 c1303596 Stefan Hajnoczi
#define QERR_DEVICE_NO_HOTPLUG \
113 c1303596 Stefan Hajnoczi
    "{ 'class': 'DeviceNoHotplug', 'data': { 'device': %s } }"
114 c1303596 Stefan Hajnoczi
115 055f6122 Luiz Capitulino
#define QERR_DEVICE_NOT_ACTIVE \
116 e16a1812 Markus Armbruster
    "{ 'class': 'DeviceNotActive', 'data': { 'device': %s } }"
117 e16a1812 Markus Armbruster
118 9d494c4b Markus Armbruster
#define QERR_DEVICE_NOT_ENCRYPTED \
119 9d494c4b Markus Armbruster
    "{ 'class': 'DeviceNotEncrypted', 'data': { 'device': %s } }"
120 9d494c4b Markus Armbruster
121 e16a1812 Markus Armbruster
#define QERR_DEVICE_NOT_FOUND \
122 e16a1812 Markus Armbruster
    "{ 'class': 'DeviceNotFound', 'data': { 'device': %s } }"
123 055f6122 Luiz Capitulino
124 5cfe0264 Markus Armbruster
#define QERR_DEVICE_NOT_REMOVABLE \
125 5cfe0264 Markus Armbruster
    "{ 'class': 'DeviceNotRemovable', 'data': { 'device': %s } }"
126 5cfe0264 Markus Armbruster
127 7bc84017 Markus Armbruster
#define QERR_DUPLICATE_ID \
128 7bc84017 Markus Armbruster
    "{ 'class': 'DuplicateId', 'data': { 'id': %s, 'object': %s } }"
129 7bc84017 Markus Armbruster
130 c7c338c4 Markus Armbruster
#define QERR_FD_NOT_FOUND \
131 bd9d3064 Markus Armbruster
    "{ 'class': 'FdNotFound', 'data': { 'name': %s } }"
132 c7c338c4 Markus Armbruster
133 41471a23 Markus Armbruster
#define QERR_FD_NOT_SUPPLIED \
134 bd9d3064 Markus Armbruster
    "{ 'class': 'FdNotSupplied', 'data': {} }"
135 41471a23 Markus Armbruster
136 c1303596 Stefan Hajnoczi
#define QERR_FEATURE_DISABLED \
137 c1303596 Stefan Hajnoczi
    "{ 'class': 'FeatureDisabled', 'data': { 'name': %s } }"
138 c1303596 Stefan Hajnoczi
139 17901e75 Markus Armbruster
#define QERR_INVALID_BLOCK_FORMAT \
140 17901e75 Markus Armbruster
    "{ 'class': 'InvalidBlockFormat', 'data': { 'name': %s } }"
141 17901e75 Markus Armbruster
142 7a046f5f Markus Armbruster
#define QERR_INVALID_PARAMETER \
143 bd9d3064 Markus Armbruster
    "{ 'class': 'InvalidParameter', 'data': { 'name': %s } }"
144 7a046f5f Markus Armbruster
145 c1303596 Stefan Hajnoczi
#define QERR_INVALID_PARAMETER_COMBINATION \
146 c1303596 Stefan Hajnoczi
    "{ 'class': 'InvalidParameterCombination', 'data': {} }"
147 c1303596 Stefan Hajnoczi
148 4b9d4683 Luiz Capitulino
#define QERR_INVALID_PARAMETER_TYPE \
149 e16a1812 Markus Armbruster
    "{ 'class': 'InvalidParameterType', 'data': { 'name': %s,'expected': %s } }"
150 4b9d4683 Luiz Capitulino
151 985a3e52 Markus Armbruster
#define QERR_INVALID_PARAMETER_VALUE \
152 985a3e52 Markus Armbruster
    "{ 'class': 'InvalidParameterValue', 'data': { 'name': %s, 'expected': %s } }"
153 985a3e52 Markus Armbruster
154 f6d855c5 Luiz Capitulino
#define QERR_INVALID_PASSWORD \
155 e16a1812 Markus Armbruster
    "{ 'class': 'InvalidPassword', 'data': {} }"
156 e16a1812 Markus Armbruster
157 58898873 Luiz Capitulino
#define QERR_IO_ERROR \
158 58898873 Luiz Capitulino
    "{ 'class': 'IOError', 'data': {} }"
159 58898873 Luiz Capitulino
160 ef749d07 Anthony Liguori
#define QERR_JSON_PARSE_ERROR \
161 ef749d07 Anthony Liguori
    "{ 'class': 'JSONParseError', 'data': { 'message': %s } }"
162 ef749d07 Anthony Liguori
163 c1303596 Stefan Hajnoczi
#define QERR_JSON_PARSING \
164 c1303596 Stefan Hajnoczi
    "{ 'class': 'JSONParsing', 'data': {} }"
165 c40cc0a0 Michael Roth
166 82a60711 Luiz Capitulino
#define QERR_KVM_MISSING_CAP \
167 e16a1812 Markus Armbruster
    "{ 'class': 'KVMMissingCap', 'data': { 'capability': %s, 'feature': %s } }"
168 82a60711 Luiz Capitulino
169 a4acc064 Luiz Capitulino
#define QERR_MIGRATION_ACTIVE \
170 a4acc064 Luiz Capitulino
    "{ 'class': 'MigrationActive', 'data': {} }"
171 a4acc064 Luiz Capitulino
172 a4acc064 Luiz Capitulino
#define QERR_MIGRATION_NOT_SUPPORTED \
173 a4acc064 Luiz Capitulino
    "{ 'class': 'MigrationNotSupported', 'data': {'device': %s} }"
174 a4acc064 Luiz Capitulino
175 8e84865e Amit Shah
#define QERR_MIGRATION_EXPECTED \
176 8e84865e Amit Shah
    "{ 'class': 'MigrationExpected', 'data': {} }"
177 8e84865e Amit Shah
178 4b9d4683 Luiz Capitulino
#define QERR_MISSING_PARAMETER \
179 e16a1812 Markus Armbruster
    "{ 'class': 'MissingParameter', 'data': { 'name': %s } }"
180 4b9d4683 Luiz Capitulino
181 fab5767f Markus Armbruster
#define QERR_NO_BUS_FOR_DEVICE \
182 fab5767f Markus Armbruster
    "{ 'class': 'NoBusForDevice', 'data': { 'device': %s, 'bus': %s } }"
183 fab5767f Markus Armbruster
184 12bd451f Stefan Hajnoczi
#define QERR_NOT_SUPPORTED \
185 12bd451f Stefan Hajnoczi
    "{ 'class': 'NotSupported', 'data': {} }"
186 12bd451f Stefan Hajnoczi
187 fc5469d8 Markus Armbruster
#define QERR_OPEN_FILE_FAILED \
188 fc5469d8 Markus Armbruster
    "{ 'class': 'OpenFileFailed', 'data': { 'filename': %s } }"
189 fc5469d8 Markus Armbruster
190 44677ded Anthony Liguori
#define QERR_PERMISSION_DENIED \
191 44677ded Anthony Liguori
    "{ 'class': 'PermissionDenied', 'data': {} }"
192 44677ded Anthony Liguori
193 c58a35f8 Markus Armbruster
#define QERR_PROPERTY_NOT_FOUND \
194 c58a35f8 Markus Armbruster
    "{ 'class': 'PropertyNotFound', 'data': { 'device': %s, 'property': %s } }"
195 c58a35f8 Markus Armbruster
196 06b4a703 Markus Armbruster
#define QERR_PROPERTY_VALUE_BAD \
197 06b4a703 Markus Armbruster
    "{ 'class': 'PropertyValueBad', 'data': { 'device': %s, 'property': %s, 'value': %s } }"
198 06b4a703 Markus Armbruster
199 9c5eff95 Markus Armbruster
#define QERR_PROPERTY_VALUE_IN_USE \
200 9c5eff95 Markus Armbruster
    "{ 'class': 'PropertyValueInUse', 'data': { 'device': %s, 'property': %s, 'value': %s } }"
201 9c5eff95 Markus Armbruster
202 84745d68 Markus Armbruster
#define QERR_PROPERTY_VALUE_NOT_FOUND \
203 84745d68 Markus Armbruster
    "{ 'class': 'PropertyValueNotFound', 'data': { 'device': %s, 'property': %s, 'value': %s } }"
204 84745d68 Markus Armbruster
205 02fda01c Stefan Hajnoczi
#define QERR_PROPERTY_VALUE_NOT_POWER_OF_2 \
206 02fda01c Stefan Hajnoczi
    "{ 'class': 'PropertyValueNotPowerOf2', 'data': { " \
207 02fda01c Stefan Hajnoczi
    "'device': %s, 'property': %s, 'value': %"PRId64" } }"
208 02fda01c Stefan Hajnoczi
209 6aced82c Paolo Bonzini
#define QERR_PROPERTY_VALUE_OUT_OF_RANGE \
210 6aced82c Paolo Bonzini
    "{ 'class': 'PropertyValueOutOfRange', 'data': { 'device': %s, 'property': %s, 'value': %"PRId64", 'min': %"PRId64", 'max': %"PRId64" } }"
211 6aced82c Paolo Bonzini
212 c1303596 Stefan Hajnoczi
#define QERR_QGA_COMMAND_FAILED \
213 c1303596 Stefan Hajnoczi
    "{ 'class': 'QgaCommandFailed', 'data': { 'message': %s } }"
214 c1303596 Stefan Hajnoczi
215 c1303596 Stefan Hajnoczi
#define QERR_QGA_LOGGING_FAILED \
216 c1303596 Stefan Hajnoczi
    "{ 'class': 'QgaLoggingFailed', 'data': {} }"
217 c1303596 Stefan Hajnoczi
218 4b9d4683 Luiz Capitulino
#define QERR_QMP_BAD_INPUT_OBJECT \
219 e16a1812 Markus Armbruster
    "{ 'class': 'QMPBadInputObject', 'data': { 'expected': %s } }"
220 4b9d4683 Luiz Capitulino
221 7dfb6123 Luiz Capitulino
#define QERR_QMP_BAD_INPUT_OBJECT_MEMBER \
222 7dfb6123 Luiz Capitulino
    "{ 'class': 'QMPBadInputObjectMember', 'data': { 'member': %s, 'expected': %s } }"
223 7dfb6123 Luiz Capitulino
224 60d76d7b Luiz Capitulino
#define QERR_QMP_EXTRA_MEMBER \
225 60d76d7b Luiz Capitulino
    "{ 'class': 'QMPExtraInputObjectMember', 'data': { 'member': %s } }"
226 60d76d7b Luiz Capitulino
227 6667b23f Luiz Capitulino
#define QERR_RESET_REQUIRED \
228 6667b23f Luiz Capitulino
    "{ 'class': 'ResetRequired', 'data': {} }"
229 6667b23f Luiz Capitulino
230 7a84cb23 Markus Armbruster
#define QERR_SET_PASSWD_FAILED \
231 7a84cb23 Markus Armbruster
    "{ 'class': 'SetPasswdFailed', 'data': {} }"
232 7a84cb23 Markus Armbruster
233 a488be27 Markus Armbruster
#define QERR_TOO_MANY_FILES \
234 bd9d3064 Markus Armbruster
    "{ 'class': 'TooManyFiles', 'data': {} }"
235 a488be27 Markus Armbruster
236 fc5469d8 Markus Armbruster
#define QERR_UNDEFINED_ERROR \
237 fc5469d8 Markus Armbruster
    "{ 'class': 'UndefinedError', 'data': {} }"
238 fc5469d8 Markus Armbruster
239 f54e3641 Kevin Wolf
#define QERR_UNKNOWN_BLOCK_FORMAT_FEATURE \
240 f54e3641 Kevin Wolf
    "{ 'class': 'UnknownBlockFormatFeature', 'data': { 'device': %s, 'format': %s, 'feature': %s } }"
241 f54e3641 Kevin Wolf
242 c1303596 Stefan Hajnoczi
#define QERR_UNSUPPORTED \
243 c1303596 Stefan Hajnoczi
    "{ 'class': 'Unsupported', 'data': {} }"
244 c1303596 Stefan Hajnoczi
245 e9a0152b Aneesh Kumar K.V
#define QERR_VIRTFS_FEATURE_BLOCKS_MIGRATION \
246 e9a0152b Aneesh Kumar K.V
    "{ 'class': 'VirtFSFeatureBlocksMigration', 'data': { 'path': %s, 'tag': %s } }"
247 e9a0152b Aneesh Kumar K.V
248 a6906e31 Markus Armbruster
#define QERR_VNC_SERVER_FAILED \
249 a6906e31 Markus Armbruster
    "{ 'class': 'VNCServerFailed', 'data': { 'target': %s } }"
250 a6906e31 Markus Armbruster
251 9f9daf9a Luiz Capitulino
#endif /* QERROR_H */