]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
DVR: fixed wrong dvr_do_prefix
authorJaroslav Kysela <perex@perex.cz>
Sun, 6 Mar 2016 19:35:15 +0000 (20:35 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sun, 6 Mar 2016 19:35:15 +0000 (20:35 +0100)
src/dvr/dvr_rec.c
src/htsstr.c
src/htsstr.h
src/input/mpegts/iptv/iptv.c

index 7a4289930869a1f01c647f3629c38fa1487565fc..87fc4a10e3cb86fadc74ac8e45620ab76c98e5e9 100644 (file)
@@ -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;
index 6990824e7b46d62bafae33663781d3e6e90976e2..41a5bb47e0ddacc2fcaefe9afcd35db240406cfd 100644 (file)
@@ -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;
       }
     }
index 719ba7cf179da8abcaa100d8907135b1b7b4a6a6..48f9160353a6ded13dc1fa11b11d68dd89c01159 100644 (file)
@@ -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 *
index 3fddd71a0315872c8b3e5c660260bc4204d020f4..a140867273e2ef6954e4982419a4dab5fb1f8f57 100644 (file)
@@ -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);