From: E.Smith <31170571+azlm8t@users.noreply.github.com> Date: Mon, 25 Sep 2017 00:41:42 +0000 (+0100) Subject: xmltv: Only parse number from display-name if config allows. (#4615) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=75c2b30a2ece06ecc033a4989dfbf05c53253359;p=thirdparty%2Ftvheadend.git xmltv: Only parse number from display-name if config allows. (#4615) Earlier commit accidentally removed the check for configuration (chnum) which means leading number would be stripped from xmltv names. --- diff --git a/src/epggrab/module/xmltv.c b/src/epggrab/module/xmltv.c index 522f9698b..a519a54e7 100644 --- a/src/epggrab/module/xmltv.c +++ b/src/epggrab/module/xmltv.c @@ -662,38 +662,42 @@ static int _xmltv_parse_channel if (!(subtag = htsmsg_field_get_map(f))) continue; if (strcmp(f->hmf_name, "display-name") == 0) { name = htsmsg_get_str(subtag, "cdata"); - int major = 0; - int minor = 0; const char *cur = name; - /* Some xmltv providers supply a display-name that is the - * channel number. So attempt to grab it. - */ + if (chnum && cur) { + /* Some xmltv providers supply a display-name that is the + * channel number. So attempt to grab it. + * But only if chnum (enum meaning to process numbers). + */ - /* Check and grab major part of channel number */ - while (isdigit(*cur)) - major = (major * 10) + *cur++ - '0'; + int major = 0; + int minor = 0; - /* If a period then it's an atsc-style number of major.minor. - * So skip the period and parse the minor. - */ - if (major && *cur == '.') { - ++cur; + /* Check and grab major part of channel number */ while (isdigit(*cur)) - minor = (minor * 10) + *cur++ - '0'; - } + major = (major * 10) + *cur++ - '0'; + + /* If a period then it's an atsc-style number of major.minor. + * So skip the period and parse the minor. + */ + if (major && *cur == '.') { + ++cur; + while (isdigit(*cur)) + minor = (minor * 10) + *cur++ - '0'; + } - /* If we have a channel number and then either end of string - * or (if chnum is 'first words') a space, then save the channel. - * The space is necessary to avoid channels such as "4Music" - * being treated as channel number 4. - * - * We assume channel number has to be >0. - */ - if (major && (!*cur || (*cur == ' ' && chnum == 1))) { - save |= epggrab_channel_set_number(ch, major, minor); - /* Skip extra spaces between channel number and actual name */ - while (*cur == ' ') ++cur; + /* If we have a channel number and then either end of string + * or (if chnum is 'first words') a space, then save the channel. + * The space is necessary to avoid channels such as "4Music" + * being treated as channel number 4. + * + * We assume channel number has to be >0. + */ + if (major && (!*cur || (*cur == ' ' && chnum == 1))) { + save |= epggrab_channel_set_number(ch, major, minor); + /* Skip extra spaces between channel number and actual name */ + while (*cur == ' ') ++cur; + } } if (cur && *cur)