From patchwork Tue Feb 19 04:02:10 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v2,2/2] qom/object.c: Allow itf cast with num_itfs = 0 From: Peter Crosthwaite X-Patchwork-Id: 221611 Message-Id: To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, aliguori@us.ibm.com, Peter Crosthwaite Date: Tue, 19 Feb 2013 14:02:10 +1000 num_interfaces only tells you how many interfaces the concrete child class has (as defined in the TypeInfo). This means if you have a child class which defines no interfaces of its own, but its parent has interfaces you cannot cast to those parent interfaces. Fixed changing the guard to check the class->interfaces list instead (which is a complete flattened list of implemented interfaces). Signed-off-by: Peter Crosthwaite --- changed from v1: Change guard implementation rather than removed it (Paolo review) qom/object.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/qom/object.c b/qom/object.c index 4b72a64..3d638ff 100644 --- a/qom/object.c +++ b/qom/object.c @@ -449,7 +449,8 @@ ObjectClass *object_class_dynamic_cast(ObjectClass *class, TypeImpl *type = class->type; ObjectClass *ret = NULL; - if (type->num_interfaces && type_is_ancestor(target_type, type_interface)) { + if (type->class->interfaces && + type_is_ancestor(target_type, type_interface)) { int found = 0; GSList *i;