diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index 0b6a5c91..9da3e3d7 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -559,9 +559,11 @@ void dvr_autorec_add_series_link ( const char *dvr_config_name, epg_broadcast_t *event, const char *creator, const char *comment ) { + char *title; if (!event || !event->episode) return; + title = regexp_escape(epg_broadcast_get_title(event, NULL)); _dvr_autorec_add(dvr_config_name, - epg_broadcast_get_title(event, NULL), + title, event->channel, NULL, 0, // tag/content type NULL, @@ -569,6 +571,8 @@ void dvr_autorec_add_series_link event->serieslink, 0, NULL, creator, comment); + if (title) + free(title); } diff --git a/src/tvheadend.h b/src/tvheadend.h index 7b9e95be..6b0f3ab5 100644 --- a/src/tvheadend.h +++ b/src/tvheadend.h @@ -561,6 +561,8 @@ int makedirs ( const char *path, int mode ); int rmtree ( const char *path ); +char *regexp_escape ( const char *str ); + /* printing */ #if __SIZEOF_LONG__ == 8 #define PRItime_t PRId64 diff --git a/src/utils.c b/src/utils.c index 47b2cff2..a30ea823 100644 --- a/src/utils.c +++ b/src/utils.c @@ -403,3 +403,36 @@ rmtree ( const char *path ) err = rmdir(path); return err; } + +char * +regexp_escape(const char* str) +{ + const char *a; + char *tmp, *b; + if (!str) + return NULL; + a = str; + b = tmp = malloc(strlen(str) * 2); + while (*a) { + switch (*a) { + case '?': + case '+': + case '.': + case '(': + case ')': + case '[': + case ']': + case '*': + *b = '\\'; + b++; + /* -fallthrough */ + default: + break; + } + *b = *a; + b++; + a++; + } + *b = 0; + return tmp; +}