From patchwork Tue Jul 1 08:34:53 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 365908 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BCB514008C for ; Tue, 1 Jul 2014 18:38:07 +1000 (EST) Received: from localhost ([::1]:39468 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1tZl-0006C8-8R for incoming@patchwork.ozlabs.org; Tue, 01 Jul 2014 04:38:05 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48133) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1tXF-0002HR-Bc for qemu-devel@nongnu.org; Tue, 01 Jul 2014 04:35:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X1tX9-0000pc-2n for qemu-devel@nongnu.org; Tue, 01 Jul 2014 04:35:29 -0400 Received: from mail-wi0-x231.google.com ([2a00:1450:400c:c05::231]:43266) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X1tX8-0000pV-SM for qemu-devel@nongnu.org; Tue, 01 Jul 2014 04:35:23 -0400 Received: by mail-wi0-f177.google.com with SMTP id r20so7315495wiv.4 for ; Tue, 01 Jul 2014 01:35:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=ZMreAebXMu9pVSEw39qbIaVZKHv9LFZBOfq4AX3QRGU=; b=V9FlsJD8R9PuL0gl55/EXyQ5IJ5sM88kQ/r7pDZgocrK9W2HjQ1aGps6rurRW27osC T3t8eDE9sR/swqKIBKlr6TRoDbrtZYafpWFIfhHpEq3pw6ZnK0cnyfvBPHLfnKF6gvUD b/JOPPCMUC1u0n+oRl7axJHKX5o3iObHf5BH7wyQ3cTWsLZ6py2pXW/NOz8XiFIxfAwc bPm1Zc4ftSGWN7mdh7NCEAXhyZgvQef23o2IRD/hUKzm3hc6iXZzUT0lnShlDSORjoSG S/d4DFHErn36Tz9Jn+ypxM0fcuCkHKY/7j3HPus/TAbO5QLoq6Hg4WoRKvryNueoObiR YDIQ== X-Received: by 10.194.77.177 with SMTP id t17mr48686674wjw.55.1404203722072; Tue, 01 Jul 2014 01:35:22 -0700 (PDT) Received: from playground.station (net-37-116-207-238.cust.vodafonedsl.it. [37.116.207.238]) by mx.google.com with ESMTPSA id dj2sm40758365wib.11.2014.07.01.01.35.20 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Jul 2014 01:35:21 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 1 Jul 2014 10:34:53 +0200 Message-Id: <1404203705-15674-4-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1404203705-15674-1-git-send-email-pbonzini@redhat.com> References: <1404203705-15674-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c05::231 Subject: [Qemu-devel] [PULL 03/15] qom: allow creating an alias of a child<> property X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Child properties must be unique. Fix this problem by turning their aliases into links. The resolve function that forwards to the target property does not have any knowledge of the target property's type, so it works fine. Reviewed-by: Peter Crosthwaite Signed-off-by: Paolo Bonzini --- qom/object.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/qom/object.c b/qom/object.c index 7a892ef..f49335f 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1607,22 +1607,32 @@ void object_property_add_alias(Object *obj, const char *name, AliasProperty *prop; ObjectProperty *op; ObjectProperty *target_prop; + gchar *prop_type; target_prop = object_property_find(target_obj, target_name, errp); if (!target_prop) { return; } + if (object_property_is_child(target_prop)) { + prop_type = g_strdup_printf("link%s", + target_prop->type + strlen("child")); + } else { + prop_type = g_strdup(target_prop->type); + } + prop = g_malloc(sizeof(*prop)); prop->target_obj = target_obj; prop->target_name = target_name; - op = object_property_add(obj, name, target_prop->type, + op = object_property_add(obj, name, prop_type, property_get_alias, property_set_alias, property_release_alias, prop, errp); op->resolve = property_resolve_alias; + + g_free(prop_type); } static void object_instance_init(Object *obj)