From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48861) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a4W3z-00072g-8j for qemu-devel@nongnu.org; Thu, 03 Dec 2015 10:44:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a4W3v-0002rV-QZ for qemu-devel@nongnu.org; Thu, 03 Dec 2015 10:44:55 -0500 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]:34543) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a4W3v-0002qv-Du for qemu-devel@nongnu.org; Thu, 03 Dec 2015 10:44:51 -0500 Received: by wmvv187 with SMTP id v187so33533545wmv.1 for ; Thu, 03 Dec 2015 07:44:50 -0800 (PST) References: <1447946528-1533-1-git-send-email-eric.auger@linaro.org> <1447946528-1533-4-git-send-email-eric.auger@linaro.org> <8737vtyngq.fsf@linaro.org> From: Eric Auger Message-ID: <56606353.2050108@linaro.org> Date: Thu, 3 Dec 2015 16:44:19 +0100 MIME-Version: 1.0 In-Reply-To: <8737vtyngq.fsf@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [RESEND RFC 3/6] device_tree: introduce qemu_fdt_node_path List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?Q?Alex_Benn=c3=a9e?= Cc: peter.maydell@linaro.org, eric.auger@st.com, thomas.lendacky@amd.com, patches@linaro.org, qemu-devel@nongnu.org, alex.williamson@redhat.com, qemu-arm@nongnu.org, suravee.suthikulpanit@amd.com, pbonzini@redhat.com, b.reynal@virtualopensystems.com, christoffer.dall@linaro.org On 11/26/2015 01:06 PM, Alex Bennée wrote: > > Eric Auger writes: > >> This new helper routine returns the node path of a device >> referred to by its name and compat string. >> >> Signed-off-by: Eric Auger >> --- >> device_tree.c | 40 ++++++++++++++++++++++++++++++++++++++++ >> include/sysemu/device_tree.h | 3 +++ >> 2 files changed, 43 insertions(+) >> >> diff --git a/device_tree.c b/device_tree.c >> index 58a5329..f184e3c 100644 >> --- a/device_tree.c >> +++ b/device_tree.c >> @@ -171,6 +171,46 @@ static int findnode_nofail(void *fdt, const char *node_path) >> return offset; >> } >> >> +/** >> + * qemu_fdt_node_path >> + * >> + * return the node path of a device, referred to by its node name >> + * and its compat string >> + * fdt: pointer to the dt blob >> + * name: name of the device >> + * compat: compatibility string of the device >> + * >> + * returns the node path >> + */ >> +int qemu_fdt_node_path(void *fdt, const char *name, char *compat, >> + char **node_path) >> +{ >> + int offset = 0, len; >> + const char *iter_name; >> + char path[256]; >> + int ret; >> + >> + *node_path = NULL; >> + while (1) { >> + offset = fdt_node_offset_by_compatible(fdt, offset, compat); >> + if (offset == -FDT_ERR_NOTFOUND) { > > Is this not the only error code fdt_node_offset_by_compatible() won't > return? > >> + break; >> + } >> + iter_name = fdt_get_name(fdt, offset, &len); >> + if (!strncmp(iter_name, name, len)) { > > is it possible for fdt_get_name to fail here and give you NULL and -len? I agree with both of your comments. Thanks for spotting my wrong handling of the errors. Thank you for your time! Eric > >> + goto found; >> + } >> + } >> + return offset; >> + >> +found: >> + ret = fdt_get_path(fdt, offset, path, 256); >> + if (!ret) { >> + *node_path = g_strdup(path); >> + } >> + return ret; >> +} >> + >> int qemu_fdt_setprop(void *fdt, const char *node_path, >> const char *property, const void *val, int size) >> { >> diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h >> index 307e53d..f9e6e6e 100644 >> --- a/include/sysemu/device_tree.h >> +++ b/include/sysemu/device_tree.h >> @@ -18,6 +18,9 @@ void *create_device_tree(int *sizep); >> void *load_device_tree(const char *filename_path, int *sizep); >> void *load_device_tree_from_sysfs(void); >> >> +int qemu_fdt_node_path(void *fdt, const char *name, char *compat, >> + char **node_path); >> + >> int qemu_fdt_setprop(void *fdt, const char *node_path, >> const char *property, const void *val, int size); >> int qemu_fdt_setprop_cell(void *fdt, const char *node_path, > > > -- > Alex Bennée >