From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:34146) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TPGED-0000b5-OD for qemu-devel@nongnu.org; Fri, 19 Oct 2012 13:19:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TPGE4-0003VK-3o for qemu-devel@nongnu.org; Fri, 19 Oct 2012 13:19:21 -0400 Received: from 38.0.169.217.in-addr.arpa ([217.169.0.38]:40153 helo=mnementh.archaic.org.uk) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TPGE3-0003Uz-Su for qemu-devel@nongnu.org; Fri, 19 Oct 2012 13:19:12 -0400 From: Peter Maydell Date: Fri, 19 Oct 2012 18:19:06 +0100 Message-Id: <1350667146-26273-3-git-send-email-peter.maydell@linaro.org> In-Reply-To: <1350667146-26273-1-git-send-email-peter.maydell@linaro.org> References: <1350667146-26273-1-git-send-email-peter.maydell@linaro.org> Subject: [Qemu-devel] [PATCH 2/2] qom: Detect attempts to add a property that already exists List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Anthony Liguori , patches@linaro.org Detect attempts to add a property to an object if one of that name already exists, and report them as critical errors. In particular, for static properties (eg qdev Property arrays) this will manifest as an abort() with a useful error message. Signed-off-by: Peter Maydell --- qom/object.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/qom/object.c b/qom/object.c index e3e9242..228ca92 100644 --- a/qom/object.c +++ b/qom/object.c @@ -620,7 +620,18 @@ void object_property_add(Object *obj, const char *name, const char *type, ObjectPropertyRelease *release, void *opaque, Error **errp) { - ObjectProperty *prop = g_malloc0(sizeof(*prop)); + ObjectProperty *prop; + + QTAILQ_FOREACH(prop, &obj->properties, node) { + if (strcmp(prop->name, name) == 0) { + error_setg_critical(errp, "attempt to add duplicate property '%s'" + " to object (type '%s')\n", name, + object_get_typename(obj)); + return; + } + } + + prop = g_malloc0(sizeof(*prop)); prop->name = g_strdup(name); prop->type = g_strdup(type); -- 1.7.9.5