diff mbox

[U-Boot,v2,04/17] dm: fdt: Correct handling of aliases with embedded digits

Message ID 1415727993-22032-5-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass Nov. 11, 2014, 5:46 p.m. UTC
Since we scan from left to right looking for the first digit, "i2c0" returns
2 instead of 0 for the alias number. Adjust the code to scan from right to
left instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2:
- Add new patch to correct handling of aliases with embedded digits

 lib/fdtdec.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Tom Rini Nov. 17, 2014, 12:46 a.m. UTC | #1
On Tue, Nov 11, 2014 at 10:46:20AM -0700, Simon Glass wrote:

> Since we scan from left to right looking for the first digit, "i2c0" returns
> 2 instead of 0 for the alias number. Adjust the code to scan from right to
> left instead.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

How about i2c10 ?  I assume you see where I'm worried about here..
Simon Glass Nov. 17, 2014, 5:57 a.m. UTC | #2
Hi Tom,

On 17 November 2014 00:46, Tom Rini <trini@ti.com> wrote:
>
> On Tue, Nov 11, 2014 at 10:46:20AM -0700, Simon Glass wrote:
>
> > Since we scan from left to right looking for the first digit, "i2c0" returns
> > 2 instead of 0 for the alias number. Adjust the code to scan from right to
> > left instead.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
>
> How about i2c10 ?  I assume you see where I'm worried about here..

It goes back to the first non-digit, so will produce 10 in this case
as expected.

Regards,
Simon
Heiko Schocher Nov. 17, 2014, 6:28 a.m. UTC | #3
Hello Simon,

Am 11.11.2014 18:46, schrieb Simon Glass:
> Since we scan from left to right looking for the first digit, "i2c0" returns
> 2 instead of 0 for the alias number. Adjust the code to scan from right to
> left instead.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> Changes in v2:
> - Add new patch to correct handling of aliases with embedded digits
>
>   lib/fdtdec.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)

Acked-by: Heiko Schocher <hs@denx.de>

bye,
Heiko
Tom Rini Nov. 17, 2014, 6:32 p.m. UTC | #4
On Mon, Nov 17, 2014 at 05:57:43AM +0000, Simon Glass wrote:
> Hi Tom,
> 
> On 17 November 2014 00:46, Tom Rini <trini@ti.com> wrote:
> >
> > On Tue, Nov 11, 2014 at 10:46:20AM -0700, Simon Glass wrote:
> >
> > > Since we scan from left to right looking for the first digit, "i2c0" returns
> > > 2 instead of 0 for the alias number. Adjust the code to scan from right to
> > > left instead.
> > >
> > > Signed-off-by: Simon Glass <sjg@chromium.org>
> >
> > How about i2c10 ?  I assume you see where I'm worried about here..
> 
> It goes back to the first non-digit, so will produce 10 in this case
> as expected.

Oh good.

Reviewed-by: Tom Rini <trini@ti.com>
Simon Glass Nov. 23, 2014, 1 p.m. UTC | #5
On 17 November 2014 at 19:32, Tom Rini <trini@ti.com> wrote:
> On Mon, Nov 17, 2014 at 05:57:43AM +0000, Simon Glass wrote:
>> Hi Tom,
>>
>> On 17 November 2014 00:46, Tom Rini <trini@ti.com> wrote:
>> >
>> > On Tue, Nov 11, 2014 at 10:46:20AM -0700, Simon Glass wrote:
>> >
>> > > Since we scan from left to right looking for the first digit, "i2c0" returns
>> > > 2 instead of 0 for the alias number. Adjust the code to scan from right to
>> > > left instead.
>> > >
>> > > Signed-off-by: Simon Glass <sjg@chromium.org>
>> >
>> > How about i2c10 ?  I assume you see where I'm worried about here..
>>
>> It goes back to the first non-digit, so will produce 10 in this case
>> as expected.
>
> Oh good.
>
> Reviewed-by: Tom Rini <trini@ti.com>

Applied to u-boot-dm.
diff mbox

Patch

diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 9714620..da6ef6b 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -355,9 +355,9 @@  int fdtdec_get_alias_seq(const void *blob, const char *base, int offset,
 		slash = strrchr(prop, '/');
 		if (strcmp(slash + 1, find_name))
 			continue;
-		for (p = name; *p; p++) {
-			if (isdigit(*p)) {
-				*seqp = simple_strtoul(p, NULL, 10);
+		for (p = name + strlen(name) - 1; p > name; p--) {
+			if (!isdigit(*p)) {
+				*seqp = simple_strtoul(p + 1, NULL, 10);
 				debug("Found seq %d\n", *seqp);
 				return 0;
 			}