On Tue, Jul 23, 2013 at 06:23:00PM +0200, Igor Mammedov wrote:
> From: Vasilis Liaskovitis <[email protected]>
>
> Currently visit_type_size checks if the visitor's type_size function pointer
> is
> NULL. If not, it calls it, otherwise it calls v->type_uint64(). But neither of
> these pointers are ever set. Fallback to calling v->type_int() in this third
> (default) case.
>
> Signed-off-by: Vasilis Liaskovitis <[email protected]>
> Signed-off-by: Hu Tao <[email protected]>
> Signed-off-by: Igor Mammedov <[email protected]>
> ---
> qapi/qapi-visit-core.c | 11 ++++++++++-
> 1 files changed, 10 insertions(+), 1 deletions(-)
>
> diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c
> index 401ee6e..fcacaff 100644
> --- a/qapi/qapi-visit-core.c
> +++ b/qapi/qapi-visit-core.c
> @@ -238,8 +238,17 @@ void visit_type_int64(Visitor *v, int64_t *obj, const
> char *name, Error **errp)
>
> void visit_type_size(Visitor *v, uint64_t *obj, const char *name, Error
> **errp)
> {
> + int64_t value;
> if (!error_is_set(errp)) {
> - (v->type_size ? v->type_size : v->type_uint64)(v, obj, name, errp);
> + if (v->type_size) {
> + v->type_size(v, obj, name, errp);
> + } else if (v->type_uint64) {
> + v->type_uint64(v, obj, name, errp);
> + } else {
> + value = *obj;
> + v->type_int(v, &value, name, errp);
> + *obj = value;
> + }
> }
> }
This doesn't address comment from Michael Roth, quoted below:
---
I'd recommend just doing:
if (v->type_size) {
v->type_size(v, obj, name, errp);
} else {
visit_type_uint64(v, obj, name, errp);
}
visit_type_uint64() already handles the fallback to visit_type_int() so no
need to duplicate.
---