From: Jaroslav Kysela Date: Sun, 6 Mar 2016 19:35:15 +0000 (+0100) Subject: DVR: fixed wrong dvr_do_prefix X-Git-Tag: v4.2.1~951 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f1c42d3eec52fbcbc278973c980f9b0c74dc245b;p=thirdparty%2Ftvheadend.git DVR: fixed wrong dvr_do_prefix --- diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 7a4289930..87fc4a10e 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -286,17 +286,15 @@ 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) +dvr_do_prefix(const char *id, const char *fmt, const char *s, char *tmp, size_t tmplen) { if (id[0] == '?') { - if (s != NULL && *s >= '0' && *s <= '9') { - char *endptr; - long l = strtol(s, &endptr, 10); + id++; + if (fmt && *fmt >= '0' && *fmt <= '9') { + long l = strtol(fmt, NULL, 10); if (l && tmplen > l) tmplen = l; - s = endptr; } - id++; } if (s == NULL) { tmp[0] = '\0'; @@ -311,25 +309,25 @@ dvr_do_prefix(const char *id, const char *s, char *tmp, size_t tmplen) static const char * -dvr_sub_title(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_title(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { - return dvr_do_prefix(id, lang_str_get(((dvr_entry_t *)aux)->de_title, NULL), tmp, tmplen); + return dvr_do_prefix(id, fmt, lang_str_get(((dvr_entry_t *)aux)->de_title, NULL), tmp, tmplen); } static const char * -dvr_sub_subtitle(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_subtitle(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { - return dvr_do_prefix(id, lang_str_get(((dvr_entry_t *)aux)->de_subtitle, NULL), tmp, tmplen); + return dvr_do_prefix(id, fmt, lang_str_get(((dvr_entry_t *)aux)->de_subtitle, NULL), tmp, tmplen); } static const char * -dvr_sub_description(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_description(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { - return dvr_do_prefix(id, lang_str_get(((dvr_entry_t *)aux)->de_desc, NULL), tmp, tmplen); + return dvr_do_prefix(id, fmt, lang_str_get(((dvr_entry_t *)aux)->de_desc, NULL), tmp, tmplen); } static const char * -dvr_sub_episode(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_episode(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { const dvr_entry_t *de = aux; char buf[64]; @@ -339,17 +337,17 @@ dvr_sub_episode(const char *id, const void *aux, char *tmp, size_t tmplen) epg_episode_number_format(de->de_bcast->episode, buf, sizeof(buf), NULL, "S%02d", NULL, "E%02d", NULL); - return dvr_do_prefix(id, buf, tmp, tmplen); + return dvr_do_prefix(id, fmt, buf, tmp, tmplen); } static const char * -dvr_sub_channel(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_channel(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { - return dvr_do_prefix(id, DVR_CH_NAME((dvr_entry_t *)aux), tmp, tmplen); + return dvr_do_prefix(id, fmt, DVR_CH_NAME((dvr_entry_t *)aux), tmp, tmplen); } static const char * -dvr_sub_genre(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_genre(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { const dvr_entry_t *de = aux; epg_genre_t *genre; @@ -361,57 +359,57 @@ dvr_sub_genre(const char *id, const void *aux, char *tmp, size_t tmplen) if (!genre || !genre->code) return ""; epg_genre_get_str(genre, 0, 1, buf, sizeof(buf), "en"); - return dvr_do_prefix(id, buf, tmp, tmplen); + return dvr_do_prefix(id, fmt, buf, tmp, tmplen); } static const char * -dvr_sub_owner(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_owner(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { - return dvr_do_prefix(id, ((dvr_entry_t *)aux)->de_owner, tmp, tmplen); + return dvr_do_prefix(id, fmt, ((dvr_entry_t *)aux)->de_owner, tmp, tmplen); } static const char * -dvr_sub_creator(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_creator(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { - return dvr_do_prefix(id, ((dvr_entry_t *)aux)->de_creator, tmp, tmplen); + return dvr_do_prefix(id, fmt, ((dvr_entry_t *)aux)->de_creator, tmp, tmplen); } static const char * -dvr_sub_last_error(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_last_error(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { - return dvr_do_prefix(id, streaming_code2txt(((dvr_entry_t *)aux)->de_last_error), tmp, tmplen); + return dvr_do_prefix(id, fmt, streaming_code2txt(((dvr_entry_t *)aux)->de_last_error), tmp, tmplen); } static const char * -dvr_sub_start(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_start(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { char buf[16]; snprintf(buf, sizeof(buf), "%"PRItime_t, (time_t)dvr_entry_get_start_time((dvr_entry_t *)aux, 0)); - return dvr_do_prefix(id, buf, tmp, tmplen); + return dvr_do_prefix(id, fmt, buf, tmp, tmplen); } static const char * -dvr_sub_errors(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_errors(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { char buf[16]; snprintf(buf, sizeof(buf), "%"PRIu32, (uint32_t)((dvr_entry_t *)aux)->de_errors); - return dvr_do_prefix(id, buf, tmp, tmplen); + return dvr_do_prefix(id, fmt, buf, tmp, tmplen); } static const char * -dvr_sub_data_errors(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_data_errors(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { char buf[16]; snprintf(buf, sizeof(buf), "%"PRIu32, (uint32_t)((dvr_entry_t *)aux)->de_data_errors); - return dvr_do_prefix(id, buf, tmp, tmplen); + return dvr_do_prefix(id, fmt, buf, tmp, tmplen); } static const char * -dvr_sub_stop(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_stop(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { char buf[16]; snprintf(buf, sizeof(buf), "%"PRItime_t, (time_t)dvr_entry_get_stop_time((dvr_entry_t *)aux)); - return dvr_do_prefix(id, buf, tmp, tmplen); + return dvr_do_prefix(id, fmt, buf, tmp, tmplen); } static htsstr_substitute_t dvr_subs_entry[] = { @@ -454,7 +452,7 @@ static htsstr_substitute_t dvr_subs_entry[] = { }; static const char * -dvr_sub_strftime(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_strftime(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { char fid[8], *p; snprintf(fid, sizeof(fid), "%%%s", id); @@ -531,13 +529,13 @@ static htsstr_substitute_t dvr_subs_time[] = { }; static const char * -dvr_sub_str(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_str(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { return (const char *)aux; } static const char * -dvr_sub_str_separator(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_str_separator(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { strncpy(tmp, (const char *)aux, tmplen-1); tmp[tmplen-1] = '\0'; @@ -571,7 +569,7 @@ static htsstr_substitute_t dvr_subs_postproc_entry[] = { }; static const char * -dvr_sub_basename(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_basename(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { strncpy(tmp, (const char *)aux, tmplen); tmp[tmplen-1] = '\0'; @@ -585,7 +583,7 @@ static htsstr_substitute_t dvr_subs_postproc_filename[] = { }; static const char * -dvr_sub_basic_info(const char *id, const void *aux, char *tmp, size_t tmplen) +dvr_sub_basic_info(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { htsmsg_t *info = (htsmsg_t *)aux, *e; htsmsg_field_t *f; diff --git a/src/htsstr.c b/src/htsstr.c index 6990824e7..41a5bb47e 100644 --- a/src/htsstr.c +++ b/src/htsstr.c @@ -259,14 +259,14 @@ htsstr_substitute(const char *src, char *dst, size_t dstlen, break; } if (*p == '\0') { - src = x; if ((l = dstlen) > 0) { - v = s->getval(s->id, aux, tmp, tmplen); + v = s->getval(s->id, src, aux, tmp, tmplen); strncpy(dst, v, l); l = MIN(strlen(v), l); dst += l; dstlen -= l; } + src = x; break; } } diff --git a/src/htsstr.h b/src/htsstr.h index 719ba7cf1..48f916035 100644 --- a/src/htsstr.h +++ b/src/htsstr.h @@ -35,7 +35,7 @@ void htsstr_argsplit_free(char **argv); typedef struct { const char *id; - const char *(*getval)(const char *id, const void *aux, char *tmp, size_t tmplen); + const char *(*getval)(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen); } htsstr_substitute_t; const char * diff --git a/src/input/mpegts/iptv/iptv.c b/src/input/mpegts/iptv/iptv.c index 3fddd71a0..a14086727 100644 --- a/src/input/mpegts/iptv/iptv.c +++ b/src/input/mpegts/iptv/iptv.c @@ -264,7 +264,7 @@ iptv_sub_url_encode(iptv_mux_t *im, const char *s, char *tmp, size_t tmplen) } static const char * -iptv_sub_mux_name(const char *id, const void *aux, char *tmp, size_t tmplen) +iptv_sub_mux_name(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { const mpegts_mux_instance_t *mmi = aux; iptv_mux_t *im = (iptv_mux_t*)mmi->mmi_mux; @@ -272,7 +272,7 @@ iptv_sub_mux_name(const char *id, const void *aux, char *tmp, size_t tmplen) } static const char * -iptv_sub_service_name(const char *id, const void *aux, char *tmp, size_t tmplen) +iptv_sub_service_name(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { const mpegts_mux_instance_t *mmi = aux; iptv_mux_t *im = (iptv_mux_t*)mmi->mmi_mux; @@ -280,7 +280,7 @@ iptv_sub_service_name(const char *id, const void *aux, char *tmp, size_t tmplen) } static const char * -iptv_sub_weight(const char *id, const void *aux, char *tmp, size_t tmplen) +iptv_sub_weight(const char *id, const char *fmt, const void *aux, char *tmp, size_t tmplen) { const mpegts_mux_instance_t *mmi = aux; snprintf(tmp, tmplen, "%d", mmi->mmi_start_weight);