Revision df1e608a

b/error.c
37 37
    err = g_malloc0(sizeof(*err));
38 38

  
39 39
    va_start(ap, fmt);
40
    err->obj = qobject_to_qdict(qobject_from_jsonv(fmt, &ap));
40
    err->msg = g_strdup_vprintf(fmt, ap);
41 41
    va_end(ap);
42
    err->msg = qerror_format(fmt, err->obj);
43 42
    err->err_class = err_class;
44 43

  
45 44
    *errp = err;
b/error.h
17 17
#include <stdbool.h>
18 18

  
19 19
/**
20
 * A class representing internal errors within QEMU.  An error has a string
21
 * typename and optionally a set of named string parameters.
20
 * A class representing internal errors within QEMU.  An error has a ErrorClass
21
 * code and a human message.
22 22
 */
23 23
typedef struct Error Error;
24 24

  
25 25
/**
26
 * Set an indirect pointer to an error given a printf-style format parameter.
27
 * Currently, qerror.h defines these error formats.  This function is not
28
 * meant to be used outside of QEMU.
26
 * Set an indirect pointer to an error given a ErrorClass value and a
27
 * printf-style human message.  This function is not meant to be used outside
28
 * of QEMU.
29 29
 */
30 30
void error_set(Error **err, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
31 31

  
b/qerror.c
342 342
    return qerr;
343 343
}
344 344

  
345
static QDict *error_obj_from_fmt_no_fail(const char *fmt, va_list *va)
346
{
347
    QObject *obj;
348
    QDict *ret;
349

  
350
    obj = qobject_from_jsonv(fmt, va);
351
    if (!obj) {
352
        fprintf(stderr, "invalid json in error dict '%s'\n", fmt);
353
        abort();
354
    }
355
    if (qobject_type(obj) != QTYPE_QDICT) {
356
        fprintf(stderr, "error is not a dict '%s'\n", fmt);
357
        abort();
358
    }
359

  
360
    ret = qobject_to_qdict(obj);
361
    obj = qdict_get(ret, "class");
362
    if (!obj) {
363
        fprintf(stderr, "missing 'class' key in '%s'\n", fmt);
364
        abort();
365
    }
366
    if (qobject_type(obj) != QTYPE_QSTRING) {
367
        fprintf(stderr, "'class' key value should be a string in '%s'\n", fmt);
368
        abort();
369
    }
370

  
371
    obj = qdict_get(ret, "data");
372
    if (!obj) {
373
        fprintf(stderr, "missing 'data' key in '%s'\n", fmt);
374
        abort();
375
    }
376
    if (qobject_type(obj) != QTYPE_QDICT) {
377
        fprintf(stderr, "'data' key value should be a dict in '%s'\n", fmt);
378
        abort();
379
    }
380

  
381
    return ret;
382
}
383

  
384 345
/**
385 346
 * qerror_from_info(): Create a new QError from error information
386 347
 *
......
394 355
    qerr = qerror_new();
395 356
    loc_save(&qerr->loc);
396 357

  
358
    qerr->err_msg = g_strdup_vprintf(fmt, *va);
397 359
    qerr->err_class = err_class;
398
    qerr->error = error_obj_from_fmt_no_fail(fmt, va);
399
    qerr->err_msg = qerror_format(fmt, qerr->error);
400 360

  
401 361
    return qerr;
402 362
}
b/qerror.h
45 45
 * Use scripts/check-qerror.sh to check.
46 46
 */
47 47
#define QERR_ADD_CLIENT_FAILED \
48
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'AddClientFailed', 'data': {} }"
48
    ERROR_CLASS_GENERIC_ERROR, "Could not add client"
49 49

  
50 50
#define QERR_AMBIGUOUS_PATH \
51
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'AmbiguousPath', 'data': { 'path': %s } }"
51
    ERROR_CLASS_GENERIC_ERROR, "Path '%s' does not uniquely identify an object"
52 52

  
53 53
#define QERR_BAD_BUS_FOR_DEVICE \
54
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'BadBusForDevice', 'data': { 'device': %s, 'bad_bus_type': %s } }"
54
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' can't go on a %s bus"
55 55

  
56 56
#define QERR_BASE_NOT_FOUND \
57
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'BaseNotFound', 'data': { 'base': %s } }"
57
    ERROR_CLASS_GENERIC_ERROR, "Base '%s' not found"
58 58

  
59 59
#define QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED \
60
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'BlockFormatFeatureNotSupported', 'data': { 'format': %s, 'name': %s, 'feature': %s } }"
60
    ERROR_CLASS_GENERIC_ERROR, "Block format '%s' used by device '%s' does not support feature '%s'"
61 61

  
62 62
#define QERR_BUFFER_OVERRUN \
63
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'BufferOverrun', 'data': {} }"
63
    ERROR_CLASS_GENERIC_ERROR, "An internal buffer overran"
64 64

  
65 65
#define QERR_BUS_NO_HOTPLUG \
66
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'BusNoHotplug', 'data': { 'bus': %s } }"
66
    ERROR_CLASS_GENERIC_ERROR, "Bus '%s' does not support hotplugging"
67 67

  
68 68
#define QERR_BUS_NOT_FOUND \
69
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'BusNotFound', 'data': { 'bus': %s } }"
69
    ERROR_CLASS_GENERIC_ERROR, "Bus '%s' not found"
70 70

  
71 71
#define QERR_COMMAND_DISABLED \
72
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'CommandDisabled', 'data': { 'name': %s } }"
72
    ERROR_CLASS_GENERIC_ERROR, "The command %s has been disabled for this instance"
73 73

  
74 74
#define QERR_COMMAND_NOT_FOUND \
75
    ERROR_CLASS_COMMAND_NOT_FOUND, "{ 'class': 'CommandNotFound', 'data': { 'name': %s } }"
75
    ERROR_CLASS_COMMAND_NOT_FOUND, "The command %s has not been found"
76 76

  
77 77
#define QERR_DEVICE_ENCRYPTED \
78
    ERROR_CLASS_DEVICE_ENCRYPTED, "{ 'class': 'DeviceEncrypted', 'data': { 'device': %s, 'filename': %s } }"
78
    ERROR_CLASS_DEVICE_ENCRYPTED, "'%s' (%s) is encrypted"
79 79

  
80 80
#define QERR_DEVICE_FEATURE_BLOCKS_MIGRATION \
81
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceFeatureBlocksMigration', 'data': { 'device': %s, 'feature': %s } }"
81
    ERROR_CLASS_GENERIC_ERROR, "Migration is disabled when using feature '%s' in device '%s'"
82 82

  
83 83
#define QERR_DEVICE_HAS_NO_MEDIUM \
84
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceHasNoMedium', 'data': { 'device': %s } }"
84
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' has no medium"
85 85

  
86 86
#define QERR_DEVICE_INIT_FAILED \
87
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceInitFailed', 'data': { 'device': %s } }"
87
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' could not be initialized"
88 88

  
89 89
#define QERR_DEVICE_IN_USE \
90
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceInUse', 'data': { 'device': %s } }"
90
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' is in use"
91 91

  
92 92
#define QERR_DEVICE_IS_READ_ONLY \
93
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceIsReadOnly', 'data': { 'device': %s } }"
93
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' is read only"
94 94

  
95 95
#define QERR_DEVICE_LOCKED \
96
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceLocked', 'data': { 'device': %s } }"
96
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' is locked"
97 97

  
98 98
#define QERR_DEVICE_MULTIPLE_BUSSES \
99
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceMultipleBusses', 'data': { 'device': %s } }"
99
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' has multiple child busses"
100 100

  
101 101
#define QERR_DEVICE_NO_BUS \
102
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceNoBus', 'data': { 'device': %s } }"
102
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' has no child bus"
103 103

  
104 104
#define QERR_DEVICE_NO_HOTPLUG \
105
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceNoHotplug', 'data': { 'device': %s } }"
105
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' does not support hotplugging"
106 106

  
107 107
#define QERR_DEVICE_NOT_ACTIVE \
108
    ERROR_CLASS_DEVICE_NOT_ACTIVE, "{ 'class': 'DeviceNotActive', 'data': { 'device': %s } }"
108
    ERROR_CLASS_DEVICE_NOT_ACTIVE, "Device '%s' has not been activated"
109 109

  
110 110
#define QERR_DEVICE_NOT_ENCRYPTED \
111
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceNotEncrypted', 'data': { 'device': %s } }"
111
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' is not encrypted"
112 112

  
113 113
#define QERR_DEVICE_NOT_FOUND \
114
    ERROR_CLASS_DEVICE_NOT_FOUND, "{ 'class': 'DeviceNotFound', 'data': { 'device': %s } }"
114
    ERROR_CLASS_DEVICE_NOT_FOUND, "Device '%s' not found"
115 115

  
116 116
#define QERR_DEVICE_NOT_REMOVABLE \
117
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DeviceNotRemovable', 'data': { 'device': %s } }"
117
    ERROR_CLASS_GENERIC_ERROR, "Device '%s' is not removable"
118 118

  
119 119
#define QERR_DUPLICATE_ID \
120
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'DuplicateId', 'data': { 'id': %s, 'object': %s } }"
120
    ERROR_CLASS_GENERIC_ERROR, "Duplicate ID '%s' for %s"
121 121

  
122 122
#define QERR_FD_NOT_FOUND \
123
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'FdNotFound', 'data': { 'name': %s } }"
123
    ERROR_CLASS_GENERIC_ERROR, "File descriptor named '%s' not found"
124 124

  
125 125
#define QERR_FD_NOT_SUPPLIED \
126
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'FdNotSupplied', 'data': {} }"
126
    ERROR_CLASS_GENERIC_ERROR, "No file descriptor supplied via SCM_RIGHTS"
127 127

  
128 128
#define QERR_FEATURE_DISABLED \
129
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'FeatureDisabled', 'data': { 'name': %s } }"
129
    ERROR_CLASS_GENERIC_ERROR, "The feature '%s' is not enabled"
130 130

  
131 131
#define QERR_INVALID_BLOCK_FORMAT \
132
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'InvalidBlockFormat', 'data': { 'name': %s } }"
132
    ERROR_CLASS_GENERIC_ERROR, "Invalid block format '%s'"
133 133

  
134 134
#define QERR_INVALID_OPTION_GROUP \
135
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'InvalidOptionGroup', 'data': { 'group': %s } }"
135
    ERROR_CLASS_GENERIC_ERROR, "There is no option group '%s'"
136 136

  
137 137
#define QERR_INVALID_PARAMETER \
138
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'InvalidParameter', 'data': { 'name': %s } }"
138
    ERROR_CLASS_GENERIC_ERROR, "Invalid parameter '%s'"
139 139

  
140 140
#define QERR_INVALID_PARAMETER_COMBINATION \
141
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'InvalidParameterCombination', 'data': {} }"
141
    ERROR_CLASS_GENERIC_ERROR, "Invalid parameter combination"
142 142

  
143 143
#define QERR_INVALID_PARAMETER_TYPE \
144
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'InvalidParameterType', 'data': { 'name': %s,'expected': %s } }"
144
    ERROR_CLASS_GENERIC_ERROR, "Invalid parameter type for '%s', expected: %s"
145 145

  
146 146
#define QERR_INVALID_PARAMETER_VALUE \
147
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'InvalidParameterValue', 'data': { 'name': %s, 'expected': %s } }"
147
    ERROR_CLASS_GENERIC_ERROR, "Parameter '%s' expects %s"
148 148

  
149 149
#define QERR_INVALID_PASSWORD \
150
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'InvalidPassword', 'data': {} }"
150
    ERROR_CLASS_GENERIC_ERROR, "Password incorrect"
151 151

  
152 152
#define QERR_IO_ERROR \
153
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'IOError', 'data': {} }"
153
    ERROR_CLASS_GENERIC_ERROR, "An IO error has occurred"
154 154

  
155 155
#define QERR_JSON_PARSE_ERROR \
156
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'JSONParseError', 'data': { 'message': %s } }"
156
    ERROR_CLASS_GENERIC_ERROR, "JSON parse error, %s"
157 157

  
158 158
#define QERR_JSON_PARSING \
159
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'JSONParsing', 'data': {} }"
159
    ERROR_CLASS_GENERIC_ERROR, "Invalid JSON syntax"
160 160

  
161 161
#define QERR_KVM_MISSING_CAP \
162
    ERROR_CLASS_K_V_M_MISSING_CAP, "{ 'class': 'KVMMissingCap', 'data': { 'capability': %s, 'feature': %s } }"
162
    ERROR_CLASS_K_V_M_MISSING_CAP, "Using KVM without %s, %s unavailable"
163 163

  
164 164
#define QERR_MIGRATION_ACTIVE \
165
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'MigrationActive', 'data': {} }"
165
    ERROR_CLASS_GENERIC_ERROR, "There's a migration process in progress"
166 166

  
167 167
#define QERR_MIGRATION_NOT_SUPPORTED \
168
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'MigrationNotSupported', 'data': {'device': %s} }"
168
    ERROR_CLASS_GENERIC_ERROR, "State blocked by non-migratable device '%s'"
169 169

  
170 170
#define QERR_MIGRATION_EXPECTED \
171
    ERROR_CLASS_MIGRATION_EXPECTED, "{ 'class': 'MigrationExpected', 'data': {} }"
171
    ERROR_CLASS_MIGRATION_EXPECTED, "An incoming migration is expected before this command can be executed"
172 172

  
173 173
#define QERR_MISSING_PARAMETER \
174
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'MissingParameter', 'data': { 'name': %s } }"
174
    ERROR_CLASS_GENERIC_ERROR, "Parameter '%s' is missing"
175 175

  
176 176
#define QERR_NO_BUS_FOR_DEVICE \
177
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'NoBusForDevice', 'data': { 'device': %s, 'bus': %s } }"
177
    ERROR_CLASS_GENERIC_ERROR, "No '%s' bus found for device '%s'"
178 178

  
179 179
#define QERR_NOT_SUPPORTED \
180
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'NotSupported', 'data': {} }"
180
    ERROR_CLASS_GENERIC_ERROR, "Not supported"
181 181

  
182 182
#define QERR_OPEN_FILE_FAILED \
183
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'OpenFileFailed', 'data': { 'filename': %s } }"
183
    ERROR_CLASS_GENERIC_ERROR, "Could not open '%s'"
184 184

  
185 185
#define QERR_PERMISSION_DENIED \
186
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'PermissionDenied', 'data': {} }"
186
    ERROR_CLASS_GENERIC_ERROR, "Insufficient permission to perform this operation"
187 187

  
188 188
#define QERR_PROPERTY_NOT_FOUND \
189
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'PropertyNotFound', 'data': { 'device': %s, 'property': %s } }"
189
    ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' not found"
190 190

  
191 191
#define QERR_PROPERTY_VALUE_BAD \
192
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'PropertyValueBad', 'data': { 'device': %s, 'property': %s, 'value': %s } }"
192
    ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' doesn't take value '%s'"
193 193

  
194 194
#define QERR_PROPERTY_VALUE_IN_USE \
195
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'PropertyValueInUse', 'data': { 'device': %s, 'property': %s, 'value': %s } }"
195
    ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' can't take value '%s', it's in use"
196 196

  
197 197
#define QERR_PROPERTY_VALUE_NOT_FOUND \
198
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'PropertyValueNotFound', 'data': { 'device': %s, 'property': %s, 'value': %s } }"
198
    ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' can't find value '%s'"
199 199

  
200 200
#define QERR_PROPERTY_VALUE_NOT_POWER_OF_2 \
201
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'PropertyValueNotPowerOf2', 'data': { " \
202
    "'device': %s, 'property': %s, 'value': %"PRId64" } }"
201
    ERROR_CLASS_GENERIC_ERROR, "Property %s.%s doesn't take value '%" PRId64 "', it's not a power of 2"
203 202

  
204 203
#define QERR_PROPERTY_VALUE_OUT_OF_RANGE \
205
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'PropertyValueOutOfRange', 'data': { 'device': %s, 'property': %s, 'value': %"PRId64", 'min': %"PRId64", 'max': %"PRId64" } }"
204
    ERROR_CLASS_GENERIC_ERROR, "Property %s.%s doesn't take value %" PRId64 " (minimum: %" PRId64 ", maximum: %" PRId64 ")"
206 205

  
207 206
#define QERR_QGA_COMMAND_FAILED \
208
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'QgaCommandFailed', 'data': { 'message': %s } }"
207
    ERROR_CLASS_GENERIC_ERROR, "Guest agent command failed, error was '%s'"
209 208

  
210 209
#define QERR_QGA_LOGGING_FAILED \
211
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'QgaLoggingFailed', 'data': {} }"
210
    ERROR_CLASS_GENERIC_ERROR, "Guest agent failed to log non-optional log statement"
212 211

  
213 212
#define QERR_QMP_BAD_INPUT_OBJECT \
214
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'QMPBadInputObject', 'data': { 'expected': %s } }"
213
    ERROR_CLASS_GENERIC_ERROR, "Expected '%s' in QMP input"
215 214

  
216 215
#define QERR_QMP_BAD_INPUT_OBJECT_MEMBER \
217
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'QMPBadInputObjectMember', 'data': { 'member': %s, 'expected': %s } }"
216
    ERROR_CLASS_GENERIC_ERROR, "QMP input object member '%s' expects '%s'"
218 217

  
219 218
#define QERR_QMP_EXTRA_MEMBER \
220
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'QMPExtraInputObjectMember', 'data': { 'member': %s } }"
219
    ERROR_CLASS_GENERIC_ERROR, "QMP input object member '%s' is unexpected"
221 220

  
222 221
#define QERR_RESET_REQUIRED \
223
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'ResetRequired', 'data': {} }"
222
    ERROR_CLASS_GENERIC_ERROR, "Resetting the Virtual Machine is required"
224 223

  
225 224
#define QERR_SET_PASSWD_FAILED \
226
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'SetPasswdFailed', 'data': {} }"
225
    ERROR_CLASS_GENERIC_ERROR, "Could not set password"
227 226

  
228 227
#define QERR_TOO_MANY_FILES \
229
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'TooManyFiles', 'data': {} }"
228
    ERROR_CLASS_GENERIC_ERROR, "Too many open files"
230 229

  
231 230
#define QERR_UNDEFINED_ERROR \
232
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'UndefinedError', 'data': {} }"
231
    ERROR_CLASS_GENERIC_ERROR, "An undefined error has occurred"
233 232

  
234 233
#define QERR_UNKNOWN_BLOCK_FORMAT_FEATURE \
235
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'UnknownBlockFormatFeature', 'data': { 'device': %s, 'format': %s, 'feature': %s } }"
234
    ERROR_CLASS_GENERIC_ERROR, "'%s' uses a %s feature which is not supported by this qemu version: %s"
236 235

  
237 236
#define QERR_UNSUPPORTED \
238
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'Unsupported', 'data': {} }"
237
    ERROR_CLASS_GENERIC_ERROR, "this feature or command is not currently supported"
239 238

  
240 239
#define QERR_VIRTFS_FEATURE_BLOCKS_MIGRATION \
241
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'VirtFSFeatureBlocksMigration', 'data': { 'path': %s, 'tag': %s } }"
240
    ERROR_CLASS_GENERIC_ERROR, "Migration is disabled when VirtFS export path '%s' is mounted in the guest using mount_tag '%s'"
242 241

  
243 242
#define QERR_VNC_SERVER_FAILED \
244
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'VNCServerFailed', 'data': { 'target': %s } }"
243
    ERROR_CLASS_GENERIC_ERROR, "Could not start VNC server on %s"
245 244

  
246 245
#define QERR_SOCKET_CONNECT_FAILED \
247
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'SockConnectFailed', 'data': {} }"
246
    ERROR_CLASS_GENERIC_ERROR, "Failed to connect to socket"
248 247

  
249 248
#define QERR_SOCKET_LISTEN_FAILED \
250
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'SockListenFailed', 'data': {} }"
249
    ERROR_CLASS_GENERIC_ERROR, "Failed to set socket to listening mode"
251 250

  
252 251
#define QERR_SOCKET_BIND_FAILED \
253
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'SockBindFailed', 'data': {} }"
252
    ERROR_CLASS_GENERIC_ERROR, "Failed to bind socket"
254 253

  
255 254
#define QERR_SOCKET_CREATE_FAILED \
256
    ERROR_CLASS_GENERIC_ERROR, "{ 'class': 'SockCreateFailed', 'data': {} }"
255
    ERROR_CLASS_GENERIC_ERROR, "Failed to create socket"
257 256

  
258 257
#endif /* QERROR_H */

Also available in: Unified diff