From: Matthias Reichl <hias@horus.com>
To: Sean Young <sean@mess.org>
Cc: Mauro Carvalho Chehab <mchehab@s-opensource.com>,
linux-media@vger.kernel.org
Subject: Re: [PATCH] v4l-utils: fix invalid protocol in streamzap keymap
Date: Mon, 20 Feb 2017 18:33:38 +0100 [thread overview]
Message-ID: <20170220173338.GA4170@camel2.lan> (raw)
In-Reply-To: <20170218192443.GA5892@gofer.mess.org>
On Sat, Feb 18, 2017 at 07:24:43PM +0000, Sean Young wrote:
> On Fri, Feb 17, 2017 at 10:19:16AM +0100, Matthias Reichl wrote:
> > ir-keytable can't load the streamzap keymap because the
> > protocol type RC5_SZ is invalid:
> >
> > ./ir-keytable -w rc_keymaps/streamzap
> > Protocol RC5_SZ invalid
> > ...
> >
> > Fix this by changing the protocol type to RC-5-SZ which
> > matches the kernel protocol rc-5-sz
> >
> > Signed-off-by: Matthias Reichl <hias@horus.com>
> > ---
> > utils/keytable/rc_keymaps/streamzap | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/utils/keytable/rc_keymaps/streamzap b/utils/keytable/rc_keymaps/streamzap
> > index 3512cd8..03d2cb8 100644
> > --- a/utils/keytable/rc_keymaps/streamzap
> > +++ b/utils/keytable/rc_keymaps/streamzap
>
> This is file is generated by utils/keytable/gen_keytables.pl, so there is no
> use in patching it.
Ouch, I totally missed that. Thanks for pointing it out!
> Actually I think a better solution would be to be less pernickety about how
> the protocol is specified. ir-ctl also does this. How about the following
> patch.
I agree, this is a much better solution. It simplifies the protocol_map
and being more tolerant about spelling is also a benefit to the user.
> Sean
>
> From: Sean Young <sean@mess.org>
> Subject: [PATCH] [PATCH v4l-utils] ir-keytable: be more permissive on protocol
> name
>
> Allowed the protocol to be specified with or without underscores or
> dashes. This also solves the problem of not being able to load
> the streamzap keymap.
>
> ./ir-keytable -w rc_keymaps/streamzap
> Protocol RC5_SZ invalid
>
> Reported-by: Matthias Reichl <hias@horus.com>
> Signed-off-by: Sean Young <sean@mess.org>
> ---
> utils/keytable/keytable.c | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/utils/keytable/keytable.c b/utils/keytable/keytable.c
> index a6ecc9e..a35db5b 100644
> --- a/utils/keytable/keytable.c
> +++ b/utils/keytable/keytable.c
> @@ -120,9 +120,7 @@ const struct protocol_map_entry protocol_map[] = {
> { "other", NULL, SYSFS_OTHER },
> { "lirc", NULL, SYSFS_LIRC },
> { "rc-5", "/rc5_decoder", SYSFS_RC5 },
> - { "rc5", NULL, SYSFS_RC5 },
> { "rc-5x", NULL, SYSFS_INVALID },
> - { "rc5x", NULL, SYSFS_INVALID },
> { "rc-5-sz", NULL, SYSFS_RC5_SZ },
> { "jvc", "/jvc_decoder", SYSFS_JVC },
> { "sony", "/sony_decoder",SYSFS_SONY },
> @@ -134,7 +132,6 @@ const struct protocol_map_entry protocol_map[] = {
> { "mce_kbd", NULL, SYSFS_MCE_KBD },
> { "mce-kbd", NULL, SYSFS_MCE_KBD },
> { "rc-6", "/rc6_decoder", SYSFS_RC6 },
> - { "rc6", NULL, SYSFS_RC6 },
> { "rc-6-0", NULL, SYSFS_INVALID },
> { "rc-6-6a-20", NULL, SYSFS_INVALID },
> { "rc-6-6a-24", NULL, SYSFS_INVALID },
> @@ -145,6 +142,21 @@ const struct protocol_map_entry protocol_map[] = {
> { NULL, NULL, SYSFS_INVALID },
> };
>
> +static bool str_like(const char *a, const char *b)
> +{
> + while (*a && *b) {
> + if (*a == '-' || *a == '_')
> + a++;
> + if (*b == '-' || *b == '_')
> + b++;
> + if (tolower(*a) != tolower(*b))
> + return false;
> + a++; b++;
> + }
A small nit: this code will fail if both strings are identical
and end with a dash or underscore. In that case we'll iterate
beyond then end of the strings.
Adding a continue after the dash/underscore increment should fix
this, then we won't increment the pointer by 2 within a loop
if (*a == '-' || *a == '_') {
a++;
continue;
}
if (*b == '-' || *b == '_') {
b++;
continue;
}
Other than that the patch looks fine to me and worked well.
> +
> + return !*a && !*b;
> +}
> +
> static enum sysfs_protocols parse_sysfs_protocol(const char *name, bool all_allowed)
> {
> const struct protocol_map_entry *pme;
> @@ -156,7 +168,7 @@ static enum sysfs_protocols parse_sysfs_protocol(const char *name, bool all_allo
> return ~0;
>
> for (pme = protocol_map; pme->name; pme++) {
> - if (!strcasecmp(name, pme->name))
> + if (str_like(name, pme->name))
> return pme->sysfs_protocol;
> }
>
> --
> 2.9.3
>
prev parent reply other threads:[~2017-02-20 17:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-17 9:19 [PATCH] v4l-utils: fix invalid protocol in streamzap keymap Matthias Reichl
2017-02-18 19:24 ` Sean Young
2017-02-20 17:33 ` Matthias Reichl [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170220173338.GA4170@camel2.lan \
--to=hias@horus.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@s-opensource.com \
--cc=sean@mess.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox