From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:38868) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RW5qW-0004PM-1O for qemu-devel@nongnu.org; Thu, 01 Dec 2011 07:34:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RW5qQ-00087S-DJ for qemu-devel@nongnu.org; Thu, 01 Dec 2011 07:34:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:18365) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RW5qQ-00087N-4B for qemu-devel@nongnu.org; Thu, 01 Dec 2011 07:34:30 -0500 Message-ID: <4ED7744D.1080306@redhat.com> Date: Thu, 01 Dec 2011 14:34:21 +0200 From: Avi Kivity MIME-Version: 1.0 References: <1322687028-29714-1-git-send-email-aliguori@us.ibm.com> <1322687028-29714-8-git-send-email-aliguori@us.ibm.com> <4ED76325.6080305@redhat.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 07/18] qom: add link properties List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Kevin Wolf , Peter Maydell , Anthony Liguori , Stefan Hajnoczi , Jan Kiszka , qemu-devel@nongnu.org, Markus Armbruster , Luiz Capitulino On 12/01/2011 01:35 PM, Stefan Hajnoczi wrote: > >> > >> +static void qdev_get_link_property(DeviceState *dev, Visitor *v, void *opaque, > >> + const char *name, Error **errp) > >> +{ > >> + DeviceState **child = opaque; > >> + gchar *path; > >> + > >> + if (*child) { > >> + path = qdev_get_canonical_path(*child); > >> + visit_type_str(v, &path, name, errp); > >> + g_free(path); > >> + } else { > >> + path = (gchar *)""; > > > > If gchar != char, this is wrong. Also, you're converting a const > > pointer into a non-const pointer, discarding type safety. > > This looked weird to me too but the cast has to do with the fact that > the visitor function works both for input and output visitors. The > output visitor needs to write to gchar** while the input visitor does > not. So you need to pass a non-const pointer to an array of const char, or const gchar **. You don't modify the string in place, you allocate a new string and free the old one. > When this function is called with the correct visitor type we are > guaranteed that path will not be modified. What if it's called with the output visitor? (warning: confusing convention). -- error compiling committee.c: too many arguments to function