From: Jaroslav Kysela Date: Fri, 19 Feb 2016 16:22:23 +0000 (+0100) Subject: DVR: accept char limiting for title and subtitle formatters, fixes #3541. X-Git-Tag: v4.2.1~1006 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d1570110facd610c8e89aaf099fff43dc7e8752a;p=thirdparty%2Ftvheadend.git DVR: accept char limiting for title and subtitle formatters, fixes #3541. --- diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 878a7a536..86dfc149f 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -281,6 +281,16 @@ dvr_clean_directory_separator(char *s, char *tmp, size_t tmplen) static const char * dvr_do_prefix(const char *id, const char *s, char *tmp, size_t tmplen) { + if (id[0] == '?') { + if (*s >= '0' && *s <= '9') { + char *endptr; + long l = strtol(s, &endptr, 10); + if (l && tmplen > l) + tmplen = l; + s = endptr; + } + id++; + } if (s == NULL) { tmp[0] = '\0'; } else if (s[0] && !isalpha(id[0])) { @@ -398,42 +408,42 @@ dvr_sub_stop(const char *id, const void *aux, char *tmp, size_t tmplen) } static htsstr_substitute_t dvr_subs_entry[] = { - { .id = "t", .getval = dvr_sub_title }, - { .id = " t", .getval = dvr_sub_title }, - { .id = "-t", .getval = dvr_sub_title }, - { .id = "_t", .getval = dvr_sub_title }, - { .id = ".t", .getval = dvr_sub_title }, - { .id = ",t", .getval = dvr_sub_title }, - { .id = ";t", .getval = dvr_sub_title }, - { .id = "s", .getval = dvr_sub_subtitle }, - { .id = " s", .getval = dvr_sub_subtitle }, - { .id = "-s", .getval = dvr_sub_subtitle }, - { .id = "_s", .getval = dvr_sub_subtitle }, - { .id = ".s", .getval = dvr_sub_subtitle }, - { .id = ",s", .getval = dvr_sub_subtitle }, - { .id = ";s", .getval = dvr_sub_subtitle }, - { .id = "e", .getval = dvr_sub_episode }, - { .id = " e", .getval = dvr_sub_episode }, - { .id = "-e", .getval = dvr_sub_episode }, - { .id = "_e", .getval = dvr_sub_episode }, - { .id = ".e", .getval = dvr_sub_episode }, - { .id = ",e", .getval = dvr_sub_episode }, - { .id = ";e", .getval = dvr_sub_episode }, - { .id = "c", .getval = dvr_sub_channel }, - { .id = " c", .getval = dvr_sub_channel }, - { .id = "-c", .getval = dvr_sub_channel }, - { .id = "_c", .getval = dvr_sub_channel }, - { .id = ".c", .getval = dvr_sub_channel }, - { .id = ",c", .getval = dvr_sub_channel }, - { .id = ";c", .getval = dvr_sub_channel }, - { .id = "g", .getval = dvr_sub_genre }, - { .id = " g", .getval = dvr_sub_genre }, - { .id = "-g", .getval = dvr_sub_genre }, - { .id = "_g", .getval = dvr_sub_genre }, - { .id = ".g", .getval = dvr_sub_genre }, - { .id = ",g", .getval = dvr_sub_genre }, - { .id = ";g", .getval = dvr_sub_genre }, - { .id = NULL, .getval = NULL } + { .id = "?t", .getval = dvr_sub_title }, + { .id = "? t", .getval = dvr_sub_title }, + { .id = "?-t", .getval = dvr_sub_title }, + { .id = "?_t", .getval = dvr_sub_title }, + { .id = "?.t", .getval = dvr_sub_title }, + { .id = "?,t", .getval = dvr_sub_title }, + { .id = "?;t", .getval = dvr_sub_title }, + { .id = "?s", .getval = dvr_sub_subtitle }, + { .id = "? s", .getval = dvr_sub_subtitle }, + { .id = "?-s", .getval = dvr_sub_subtitle }, + { .id = "?_s", .getval = dvr_sub_subtitle }, + { .id = "?.s", .getval = dvr_sub_subtitle }, + { .id = "?,s", .getval = dvr_sub_subtitle }, + { .id = "?;s", .getval = dvr_sub_subtitle }, + { .id = "e", .getval = dvr_sub_episode }, + { .id = " e", .getval = dvr_sub_episode }, + { .id = "-e", .getval = dvr_sub_episode }, + { .id = "_e", .getval = dvr_sub_episode }, + { .id = ".e", .getval = dvr_sub_episode }, + { .id = ",e", .getval = dvr_sub_episode }, + { .id = ";e", .getval = dvr_sub_episode }, + { .id = "c", .getval = dvr_sub_channel }, + { .id = " c", .getval = dvr_sub_channel }, + { .id = "-c", .getval = dvr_sub_channel }, + { .id = "_c", .getval = dvr_sub_channel }, + { .id = ".c", .getval = dvr_sub_channel }, + { .id = ",c", .getval = dvr_sub_channel }, + { .id = ";c", .getval = dvr_sub_channel }, + { .id = "g", .getval = dvr_sub_genre }, + { .id = " g", .getval = dvr_sub_genre }, + { .id = "-g", .getval = dvr_sub_genre }, + { .id = "_g", .getval = dvr_sub_genre }, + { .id = ".g", .getval = dvr_sub_genre }, + { .id = ",g", .getval = dvr_sub_genre }, + { .id = ";g", .getval = dvr_sub_genre }, + { .id = NULL, .getval = NULL } }; static const char * diff --git a/src/htsstr.c b/src/htsstr.c index e435d38f3..19d0badcf 100644 --- a/src/htsstr.c +++ b/src/htsstr.c @@ -250,9 +250,16 @@ htsstr_substitute(const char *src, char *dst, size_t dstlen, src++; } for (s = sub; s->id; s++) { - for (p = s->id, x = src; *p; p++, x++) + for (p = s->id, x = src; *p; p++, x++) { + if (*p == '?') { + while (*x >= '0' && *x <= '9') + x++; + x--; + continue; + } if (*p != *x) break; + } if (*p == '\0') { src = x; if ((l = dstlen) > 0) {