Lines Matching +full:- +full:v

4  * Copyright (C) 2012-2017 Red Hat, Inc.
11 * See the COPYING.LIB file in the top-level directory.
17 #include "qapi/compat-policy.h"
19 #include "qapi/qobject-input-visitor.h"
20 #include "qapi/visitor-impl.h"
59 static QObjectInputVisitor *to_qiv(Visitor *v) in to_qiv() argument
61 return container_of(v, QObjectInputVisitor, visitor); in to_qiv()
67 * @qiv->stack.
69 * If @n is positive, return the full name of the @n-th container
72 * The returned string is valid until the next full_name_nth(@v) or
73 * destruction of @v.
81 if (qiv->errname) { in full_name_nth()
82 g_string_truncate(qiv->errname, 0); in full_name_nth()
84 qiv->errname = g_string_new(""); in full_name_nth()
87 QSLIST_FOREACH(so , &qiv->stack, node) { in full_name_nth()
89 n--; in full_name_nth()
90 } else if (qobject_type(so->obj) == QTYPE_QDICT) { in full_name_nth()
91 g_string_prepend(qiv->errname, name ?: "<anonymous>"); in full_name_nth()
92 g_string_prepend_c(qiv->errname, '.'); in full_name_nth()
95 qiv->keyval ? ".%u" : "[%u]", in full_name_nth()
96 so->index); in full_name_nth()
97 g_string_prepend(qiv->errname, buf); in full_name_nth()
99 name = so->name; in full_name_nth()
104 g_string_prepend(qiv->errname, name); in full_name_nth()
105 } else if (qiv->errname->str[0] == '.') { in full_name_nth()
106 g_string_erase(qiv->errname, 0, 1); in full_name_nth()
107 } else if (!qiv->errname->str[0]) { in full_name_nth()
111 return qiv->errname->str; in full_name_nth()
127 if (QSLIST_EMPTY(&qiv->stack)) { in qobject_input_try_get_object()
129 assert(qiv->root); in qobject_input_try_get_object()
130 return qiv->root; in qobject_input_try_get_object()
134 tos = QSLIST_FIRST(&qiv->stack); in qobject_input_try_get_object()
135 qobj = tos->obj; in qobject_input_try_get_object()
141 if (tos->h && consume && ret) { in qobject_input_try_get_object()
142 bool removed = g_hash_table_remove(tos->h, name); in qobject_input_try_get_object()
148 if (tos->entry) { in qobject_input_try_get_object()
149 ret = qlist_entry_obj(tos->entry); in qobject_input_try_get_object()
151 tos->entry = qlist_next(tos->entry); in qobject_input_try_get_object()
157 tos->index++; in qobject_input_try_get_object()
197 /* Non-string scalar (should this be an assertion?) */ in qobject_input_get_keyval()
218 tos->name = name; in qobject_input_push()
219 tos->obj = obj; in qobject_input_push()
220 tos->qapi = qapi; in qobject_input_push()
229 tos->h = h; in qobject_input_push()
232 tos->entry = qlist_first(qlist); in qobject_input_push()
233 tos->index = -1; in qobject_input_push()
236 QSLIST_INSERT_HEAD(&qiv->stack, tos, node); in qobject_input_push()
237 return tos->entry; in qobject_input_push()
241 static bool qobject_input_check_struct(Visitor *v, Error **errp) in qobject_input_check_struct() argument
243 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_check_struct()
244 StackObject *tos = QSLIST_FIRST(&qiv->stack); in qobject_input_check_struct()
248 assert(tos && !tos->entry); in qobject_input_check_struct()
250 g_hash_table_iter_init(&iter, tos->h); in qobject_input_check_struct()
261 if (tos->h) { in qobject_input_stack_object_free()
262 g_hash_table_unref(tos->h); in qobject_input_stack_object_free()
268 static void qobject_input_pop(Visitor *v, void **obj) in qobject_input_pop() argument
270 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_pop()
271 StackObject *tos = QSLIST_FIRST(&qiv->stack); in qobject_input_pop()
273 assert(tos && tos->qapi == obj); in qobject_input_pop()
274 QSLIST_REMOVE_HEAD(&qiv->stack, node); in qobject_input_pop()
278 static bool qobject_input_start_struct(Visitor *v, const char *name, void **obj, in qobject_input_start_struct() argument
281 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_start_struct()
304 static void qobject_input_end_struct(Visitor *v, void **obj) in qobject_input_end_struct() argument
306 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_end_struct()
307 StackObject *tos = QSLIST_FIRST(&qiv->stack); in qobject_input_end_struct()
309 assert(qobject_type(tos->obj) == QTYPE_QDICT && tos->h); in qobject_input_end_struct()
310 qobject_input_pop(v, obj); in qobject_input_end_struct()
314 static bool qobject_input_start_list(Visitor *v, const char *name, in qobject_input_start_list() argument
318 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_start_list()
341 static GenericList *qobject_input_next_list(Visitor *v, GenericList *tail, in qobject_input_next_list() argument
344 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_next_list()
345 StackObject *tos = QSLIST_FIRST(&qiv->stack); in qobject_input_next_list()
347 assert(tos && qobject_to(QList, tos->obj)); in qobject_input_next_list()
349 if (!tos->entry) { in qobject_input_next_list()
352 tail->next = g_malloc0(size); in qobject_input_next_list()
353 return tail->next; in qobject_input_next_list()
356 static bool qobject_input_check_list(Visitor *v, Error **errp) in qobject_input_check_list() argument
358 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_check_list()
359 StackObject *tos = QSLIST_FIRST(&qiv->stack); in qobject_input_check_list()
361 assert(tos && qobject_to(QList, tos->obj)); in qobject_input_check_list()
363 if (tos->entry) { in qobject_input_check_list()
365 tos->index + 1, full_name_nth(qiv, NULL, 1)); in qobject_input_check_list()
371 static void qobject_input_end_list(Visitor *v, void **obj) in qobject_input_end_list() argument
373 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_end_list()
374 StackObject *tos = QSLIST_FIRST(&qiv->stack); in qobject_input_end_list()
376 assert(qobject_type(tos->obj) == QTYPE_QLIST && !tos->h); in qobject_input_end_list()
377 qobject_input_pop(v, obj); in qobject_input_end_list()
380 static bool qobject_input_start_alternate(Visitor *v, const char *name, in qobject_input_start_alternate() argument
384 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_start_alternate()
392 (*obj)->type = qobject_type(qobj); in qobject_input_start_alternate()
396 static bool qobject_input_type_int64(Visitor *v, const char *name, int64_t *obj, in qobject_input_type_int64() argument
399 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_int64()
415 static bool qobject_input_type_int64_keyval(Visitor *v, const char *name, in qobject_input_type_int64_keyval() argument
418 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_int64_keyval()
426 /* TODO report -ERANGE more nicely */ in qobject_input_type_int64_keyval()
434 static bool qobject_input_type_uint64(Visitor *v, const char *name, in qobject_input_type_uint64() argument
437 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_uint64()
466 static bool qobject_input_type_uint64_keyval(Visitor *v, const char *name, in qobject_input_type_uint64_keyval() argument
469 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_uint64_keyval()
477 /* TODO report -ERANGE more nicely */ in qobject_input_type_uint64_keyval()
485 static bool qobject_input_type_bool(Visitor *v, const char *name, bool *obj, in qobject_input_type_bool() argument
488 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_bool()
506 static bool qobject_input_type_bool_keyval(Visitor *v, const char *name, in qobject_input_type_bool_keyval() argument
509 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_bool_keyval()
524 static bool qobject_input_type_str(Visitor *v, const char *name, char **obj, in qobject_input_type_str() argument
527 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_str()
546 static bool qobject_input_type_str_keyval(Visitor *v, const char *name, in qobject_input_type_str_keyval() argument
549 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_str_keyval()
556 static bool qobject_input_type_number(Visitor *v, const char *name, double *obj, in qobject_input_type_number() argument
559 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_number()
577 static bool qobject_input_type_number_keyval(Visitor *v, const char *name, in qobject_input_type_number_keyval() argument
580 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_number_keyval()
589 /* TODO report -ERANGE more nicely */ in qobject_input_type_number_keyval()
599 static bool qobject_input_type_any(Visitor *v, const char *name, QObject **obj, in qobject_input_type_any() argument
602 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_any()
614 static bool qobject_input_type_null(Visitor *v, const char *name, in qobject_input_type_null() argument
617 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_null()
634 static bool qobject_input_type_size_keyval(Visitor *v, const char *name, in qobject_input_type_size_keyval() argument
637 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_type_size_keyval()
645 /* TODO report -ERANGE more nicely */ in qobject_input_type_size_keyval()
653 static void qobject_input_optional(Visitor *v, const char *name, bool *present) in qobject_input_optional() argument
655 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_optional()
666 static bool qobject_input_policy_reject(Visitor *v, const char *name, in qobject_input_policy_reject() argument
670 return !compat_policy_input_ok(features, &v->compat_policy, in qobject_input_policy_reject()
675 static void qobject_input_free(Visitor *v) in qobject_input_free() argument
677 QObjectInputVisitor *qiv = to_qiv(v); in qobject_input_free()
679 while (!QSLIST_EMPTY(&qiv->stack)) { in qobject_input_free()
680 StackObject *tos = QSLIST_FIRST(&qiv->stack); in qobject_input_free()
682 QSLIST_REMOVE_HEAD(&qiv->stack, node); in qobject_input_free()
686 qobject_unref(qiv->root); in qobject_input_free()
687 if (qiv->errname) { in qobject_input_free()
688 g_string_free(qiv->errname, TRUE); in qobject_input_free()
695 QObjectInputVisitor *v = g_malloc0(sizeof(*v)); in qobject_input_visitor_base_new() local
699 v->visitor.type = VISITOR_INPUT; in qobject_input_visitor_base_new()
700 v->visitor.start_struct = qobject_input_start_struct; in qobject_input_visitor_base_new()
701 v->visitor.check_struct = qobject_input_check_struct; in qobject_input_visitor_base_new()
702 v->visitor.end_struct = qobject_input_end_struct; in qobject_input_visitor_base_new()
703 v->visitor.start_list = qobject_input_start_list; in qobject_input_visitor_base_new()
704 v->visitor.next_list = qobject_input_next_list; in qobject_input_visitor_base_new()
705 v->visitor.check_list = qobject_input_check_list; in qobject_input_visitor_base_new()
706 v->visitor.end_list = qobject_input_end_list; in qobject_input_visitor_base_new()
707 v->visitor.start_alternate = qobject_input_start_alternate; in qobject_input_visitor_base_new()
708 v->visitor.optional = qobject_input_optional; in qobject_input_visitor_base_new()
709 v->visitor.policy_reject = qobject_input_policy_reject; in qobject_input_visitor_base_new()
710 v->visitor.free = qobject_input_free; in qobject_input_visitor_base_new()
712 v->root = qobject_ref(obj); in qobject_input_visitor_base_new()
714 return v; in qobject_input_visitor_base_new()
719 QObjectInputVisitor *v = qobject_input_visitor_base_new(obj); in qobject_input_visitor_new() local
721 v->visitor.type_int64 = qobject_input_type_int64; in qobject_input_visitor_new()
722 v->visitor.type_uint64 = qobject_input_type_uint64; in qobject_input_visitor_new()
723 v->visitor.type_bool = qobject_input_type_bool; in qobject_input_visitor_new()
724 v->visitor.type_str = qobject_input_type_str; in qobject_input_visitor_new()
725 v->visitor.type_number = qobject_input_type_number; in qobject_input_visitor_new()
726 v->visitor.type_any = qobject_input_type_any; in qobject_input_visitor_new()
727 v->visitor.type_null = qobject_input_type_null; in qobject_input_visitor_new()
729 return &v->visitor; in qobject_input_visitor_new()
734 QObjectInputVisitor *v = qobject_input_visitor_base_new(obj); in qobject_input_visitor_new_keyval() local
736 v->visitor.type_int64 = qobject_input_type_int64_keyval; in qobject_input_visitor_new_keyval()
737 v->visitor.type_uint64 = qobject_input_type_uint64_keyval; in qobject_input_visitor_new_keyval()
738 v->visitor.type_bool = qobject_input_type_bool_keyval; in qobject_input_visitor_new_keyval()
739 v->visitor.type_str = qobject_input_type_str_keyval; in qobject_input_visitor_new_keyval()
740 v->visitor.type_number = qobject_input_type_number_keyval; in qobject_input_visitor_new_keyval()
741 v->visitor.type_any = qobject_input_type_any; in qobject_input_visitor_new_keyval()
742 v->visitor.type_null = qobject_input_type_null; in qobject_input_visitor_new_keyval()
743 v->visitor.type_size = qobject_input_type_size_keyval; in qobject_input_visitor_new_keyval()
744 v->keyval = true; in qobject_input_visitor_new_keyval()
746 return &v->visitor; in qobject_input_visitor_new_keyval()
756 Visitor *v; in qobject_input_visitor_new_str() local
765 v = qobject_input_visitor_new(QOBJECT(args)); in qobject_input_visitor_new_str()
771 v = qobject_input_visitor_new_keyval(QOBJECT(args)); in qobject_input_visitor_new_str()
775 return v; in qobject_input_visitor_new_str()