From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:32793) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SPXmg-00037j-PO for qemu-devel@nongnu.org; Wed, 02 May 2012 07:31:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SPXmb-0000IC-UB for qemu-devel@nongnu.org; Wed, 02 May 2012 07:31:50 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:48124) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SPXmb-0000FY-MC for qemu-devel@nongnu.org; Wed, 02 May 2012 07:31:45 -0400 Received: by mail-pb0-f45.google.com with SMTP id ro12so1148607pbb.4 for ; Wed, 02 May 2012 04:31:44 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Wed, 2 May 2012 13:30:57 +0200 Message-Id: <1335958273-769-6-git-send-email-pbonzini@redhat.com> In-Reply-To: <1335958273-769-1-git-send-email-pbonzini@redhat.com> References: <1335958273-769-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 05/21] qom: assert that public types have a non-NULL parent field List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, aliguori@us.ibm.com, liwp@linux.vnet.ibm.com, afaerber@suse.de This protects against unwanted effects of changing TYPE_OBJECT from NULL to a string. Suggested by Andreas Faerber. Signed-off-by: Paolo Bonzini --- include/qemu/object.h | 1 - qom/object.c | 14 ++++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/qemu/object.h b/include/qemu/object.h index 9c49d99..ec2b382 100644 --- a/include/qemu/object.h +++ b/include/qemu/object.h @@ -527,7 +527,6 @@ const char *object_get_typename(Object *obj); */ Type type_register_static(const TypeInfo *info); -#define type_register_static_alias(info, name) do { } while (0) /** * type_register: diff --git a/qom/object.c b/qom/object.c index 88ec417..e536ece 100644 --- a/qom/object.c +++ b/qom/object.c @@ -95,7 +95,7 @@ static TypeImpl *type_table_lookup(const char *name) return g_hash_table_lookup(type_table_get(), name); } -TypeImpl *type_register(const TypeInfo *info) +static TypeImpl *type_register_internal(const TypeInfo *info) { TypeImpl *ti = g_malloc0(sizeof(*ti)); @@ -137,6 +137,12 @@ TypeImpl *type_register(const TypeInfo *info) return ti; } +TypeImpl *type_register(const TypeInfo *info) +{ + assert(info->parent); + return type_register_internal(info); +} + TypeImpl *type_register_static(const TypeInfo *info) { return type_register(info); @@ -204,7 +210,7 @@ static void type_class_interface_init(TypeImpl *ti, InterfaceImpl *iface) char *name = g_strdup_printf("<%s::%s>", ti->name, iface->parent); info.name = name; - iface->type = type_register(&info); + iface->type = type_register_internal(&info); g_free(name); } @@ -1212,8 +1218,8 @@ static void register_types(void) .abstract = true, }; - type_interface = type_register_static(&interface_info); - type_register_static(&object_info); + type_interface = type_register_internal(&interface_info); + type_register_internal(&object_info); } type_init(register_types) -- 1.7.9.3