[PATCH] gpio-uclass: fix gpio lookup by label
Rasmus Villemoes
rasmus.villemoes at prevas.dk
Tue Oct 4 15:43:05 CEST 2022
On 04/10/2022 01.49, Simon Glass wrote:
> On Mon, 3 Oct 2022 at 03:03, Rasmus Villemoes
> <rasmus.villemoes at prevas.dk> wrote:
>>
>> Matching anything that just happens to have the sought-for label as a
>> prefix is wrong. For example, if the board designer has designated 10
>> lines for debug purposes, named "debug1" through "debug10", and we are
>> looking up "debug1", if debug10 happens to be met first during the
>> iteration we'd wrongly return that.
>>
>> In theory, this can break existing users that could rely on this
>> quirk, but OTOH keeping the current broken semantics can cause a lot
>> of grief for people hitting this in the future and not understanding
>> why they don't find the line they expect. Considering how few in-tree
>> defconfigs currently set DM_GPIO_LOOKUP_LABEL (ignoring sandbox, only
>> four "real" boards), let's fix it before the use becomes more
>> widespread.
>>
>> Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
>> ---
>> drivers/gpio/gpio-uclass.c | 4 +---
>> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
>
> It seems like we need a one-sided strncmp():
>
> int strncmp(const char *match, const char *str, int max_len_of_str)
Eh, could you spell out what the semantics of that one would be? I can't
think of anything that would differ from actual strncmp().
for (i = 0; i < m; ++i) {
if (a[i] != b[i]) return a[i] - b[i];
if (!a[i]) break;
}
return 0;
And why would we want anything other than actual string equality here?
Oh, and now that I look at lib/string.c, both the generic strcmp() and
strncmp() are broken. They correctly distinguish equality/inequality (up
to the given bound), but they don't compare strings correctly, for
several reasons. Sigh. Patch coming later.
Rasmus
More information about the U-Boot
mailing list