From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from gofer.mess.org ([80.229.237.210]:44509 "EHLO gofer.mess.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753412AbdBRTZ0 (ORCPT ); Sat, 18 Feb 2017 14:25:26 -0500 Date: Sat, 18 Feb 2017 19:24:43 +0000 From: Sean Young To: Matthias Reichl Cc: Mauro Carvalho Chehab , linux-media@vger.kernel.org Subject: Re: [PATCH] v4l-utils: fix invalid protocol in streamzap keymap Message-ID: <20170218192443.GA5892@gofer.mess.org> References: <20170217091916.GA24266@camel2.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170217091916.GA24266@camel2.lan> Sender: linux-media-owner@vger.kernel.org List-ID: 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 > --- > 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. 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. Sean From: Sean Young 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 Signed-off-by: Sean Young --- 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++; + } + + 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