Lines Matching +full:- +full:v
4 * Copyright Red Hat, Inc. 2012-2016
10 * See the COPYING.LIB file in the top-level directory.
15 #include "qapi/string-input-visitor.h"
16 #include "qapi/visitor-impl.h"
58 static StringInputVisitor *to_siv(Visitor *v) in to_siv() argument
60 return container_of(v, StringInputVisitor, visitor); in to_siv()
63 static bool start_list(Visitor *v, const char *name, GenericList **list, in start_list() argument
66 StringInputVisitor *siv = to_siv(v); in start_list()
68 assert(siv->lm == LM_NONE); in start_list()
69 siv->list = list; in start_list()
70 siv->unparsed_string = siv->string; in start_list()
72 if (!siv->string[0]) { in start_list()
76 siv->lm = LM_END; in start_list()
81 siv->lm = LM_UNPARSED; in start_list()
86 static GenericList *next_list(Visitor *v, GenericList *tail, size_t size) in next_list() argument
88 StringInputVisitor *siv = to_siv(v); in next_list()
90 switch (siv->lm) { in next_list()
102 tail->next = g_malloc0(size); in next_list()
103 return tail->next; in next_list()
106 static bool check_list(Visitor *v, Error **errp) in check_list() argument
108 const StringInputVisitor *siv = to_siv(v); in check_list()
110 switch (siv->lm) { in check_list()
123 static void end_list(Visitor *v, void **obj) in end_list() argument
125 StringInputVisitor *siv = to_siv(v); in end_list()
127 assert(siv->lm != LM_NONE); in end_list()
128 assert(siv->list == obj); in end_list()
129 siv->list = NULL; in end_list()
130 siv->unparsed_string = NULL; in end_list()
131 siv->lm = LM_NONE; in end_list()
140 if (qemu_strtoi64(siv->unparsed_string, &endptr, 0, &start)) { in try_parse_int64_list_entry()
141 return -EINVAL; in try_parse_int64_list_entry()
147 siv->unparsed_string = endptr; in try_parse_int64_list_entry()
150 siv->unparsed_string = endptr + 1; in try_parse_int64_list_entry()
152 case '-': in try_parse_int64_list_entry()
155 return -EINVAL; in try_parse_int64_list_entry()
157 if (start > end || end - start >= RANGE_MAX_ELEMENTS) { in try_parse_int64_list_entry()
158 return -EINVAL; in try_parse_int64_list_entry()
162 siv->unparsed_string = endptr; in try_parse_int64_list_entry()
165 siv->unparsed_string = endptr + 1; in try_parse_int64_list_entry()
168 return -EINVAL; in try_parse_int64_list_entry()
172 return -EINVAL; in try_parse_int64_list_entry()
176 siv->lm = LM_INT64_RANGE; in try_parse_int64_list_entry()
177 siv->rangeNext.i64 = start; in try_parse_int64_list_entry()
178 siv->rangeEnd.i64 = end; in try_parse_int64_list_entry()
182 static bool parse_type_int64(Visitor *v, const char *name, int64_t *obj, in parse_type_int64() argument
185 StringInputVisitor *siv = to_siv(v); in parse_type_int64()
188 switch (siv->lm) { in parse_type_int64()
191 if (qemu_strtoi64(siv->string, NULL, 0, &val)) { in parse_type_int64()
204 assert(siv->lm == LM_INT64_RANGE); in parse_type_int64()
208 assert(siv->rangeNext.i64 <= siv->rangeEnd.i64); in parse_type_int64()
209 *obj = siv->rangeNext.i64++; in parse_type_int64()
211 if (siv->rangeNext.i64 > siv->rangeEnd.i64 || *obj == INT64_MAX) { in parse_type_int64()
213 siv->lm = siv->unparsed_string[0] ? LM_UNPARSED : LM_END; in parse_type_int64()
230 if (qemu_strtou64(siv->unparsed_string, &endptr, 0, &start)) { in try_parse_uint64_list_entry()
231 return -EINVAL; in try_parse_uint64_list_entry()
237 siv->unparsed_string = endptr; in try_parse_uint64_list_entry()
240 siv->unparsed_string = endptr + 1; in try_parse_uint64_list_entry()
242 case '-': in try_parse_uint64_list_entry()
245 return -EINVAL; in try_parse_uint64_list_entry()
247 if (start > end || end - start >= RANGE_MAX_ELEMENTS) { in try_parse_uint64_list_entry()
248 return -EINVAL; in try_parse_uint64_list_entry()
252 siv->unparsed_string = endptr; in try_parse_uint64_list_entry()
255 siv->unparsed_string = endptr + 1; in try_parse_uint64_list_entry()
258 return -EINVAL; in try_parse_uint64_list_entry()
262 return -EINVAL; in try_parse_uint64_list_entry()
266 siv->lm = LM_UINT64_RANGE; in try_parse_uint64_list_entry()
267 siv->rangeNext.u64 = start; in try_parse_uint64_list_entry()
268 siv->rangeEnd.u64 = end; in try_parse_uint64_list_entry()
272 static bool parse_type_uint64(Visitor *v, const char *name, uint64_t *obj, in parse_type_uint64() argument
275 StringInputVisitor *siv = to_siv(v); in parse_type_uint64()
278 switch (siv->lm) { in parse_type_uint64()
281 if (qemu_strtou64(siv->string, NULL, 0, &val)) { in parse_type_uint64()
294 assert(siv->lm == LM_UINT64_RANGE); in parse_type_uint64()
298 assert(siv->rangeNext.u64 <= siv->rangeEnd.u64); in parse_type_uint64()
299 *obj = siv->rangeNext.u64++; in parse_type_uint64()
301 if (siv->rangeNext.u64 > siv->rangeEnd.u64 || *obj == UINT64_MAX) { in parse_type_uint64()
303 siv->lm = siv->unparsed_string[0] ? LM_UNPARSED : LM_END; in parse_type_uint64()
314 static bool parse_type_size(Visitor *v, const char *name, uint64_t *obj, in parse_type_size() argument
317 StringInputVisitor *siv = to_siv(v); in parse_type_size()
320 assert(siv->lm == LM_NONE); in parse_type_size()
321 if (!parse_option_size(name, siv->string, &val, errp)) { in parse_type_size()
329 static bool parse_type_bool(Visitor *v, const char *name, bool *obj, in parse_type_bool() argument
332 StringInputVisitor *siv = to_siv(v); in parse_type_bool()
334 assert(siv->lm == LM_NONE); in parse_type_bool()
335 return qapi_bool_parse(name ? name : "null", siv->string, obj, errp); in parse_type_bool()
338 static bool parse_type_str(Visitor *v, const char *name, char **obj, in parse_type_str() argument
341 StringInputVisitor *siv = to_siv(v); in parse_type_str()
343 assert(siv->lm == LM_NONE); in parse_type_str()
344 *obj = g_strdup(siv->string); in parse_type_str()
348 static bool parse_type_number(Visitor *v, const char *name, double *obj, in parse_type_number() argument
351 StringInputVisitor *siv = to_siv(v); in parse_type_number()
354 assert(siv->lm == LM_NONE); in parse_type_number()
355 if (qemu_strtod_finite(siv->string, NULL, &val)) { in parse_type_number()
365 static bool parse_type_null(Visitor *v, const char *name, QNull **obj, in parse_type_null() argument
368 StringInputVisitor *siv = to_siv(v); in parse_type_null()
370 assert(siv->lm == LM_NONE); in parse_type_null()
373 if (siv->string[0]) { in parse_type_null()
383 static void string_input_free(Visitor *v) in string_input_free() argument
385 StringInputVisitor *siv = to_siv(v); in string_input_free()
392 StringInputVisitor *v; in string_input_visitor_new() local
395 v = g_malloc0(sizeof(*v)); in string_input_visitor_new()
397 v->visitor.type = VISITOR_INPUT; in string_input_visitor_new()
398 v->visitor.type_int64 = parse_type_int64; in string_input_visitor_new()
399 v->visitor.type_uint64 = parse_type_uint64; in string_input_visitor_new()
400 v->visitor.type_size = parse_type_size; in string_input_visitor_new()
401 v->visitor.type_bool = parse_type_bool; in string_input_visitor_new()
402 v->visitor.type_str = parse_type_str; in string_input_visitor_new()
403 v->visitor.type_number = parse_type_number; in string_input_visitor_new()
404 v->visitor.type_null = parse_type_null; in string_input_visitor_new()
405 v->visitor.start_list = start_list; in string_input_visitor_new()
406 v->visitor.next_list = next_list; in string_input_visitor_new()
407 v->visitor.check_list = check_list; in string_input_visitor_new()
408 v->visitor.end_list = end_list; in string_input_visitor_new()
409 v->visitor.free = string_input_free; in string_input_visitor_new()
411 v->string = str; in string_input_visitor_new()
412 v->lm = LM_NONE; in string_input_visitor_new()
413 return &v->visitor; in string_input_visitor_new()