]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
config: fix EPG language parsing, fixes #3270
authorJaroslav Kysela <perex@perex.cz>
Sat, 7 Nov 2015 14:38:28 +0000 (15:38 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sat, 7 Nov 2015 14:43:30 +0000 (15:43 +0100)
src/config.c
src/htsmsg.c

index acf05e630d281b87c060780aaec9422d6a05b112..9a21229d4ded1939c3987f97c017f5d690f97d8b 100644 (file)
@@ -1621,6 +1621,7 @@ config_boot ( const char *path, gid_t gid, uid_t uid )
   struct stat st;
   char buf[1024];
   htsmsg_t *config2;
+  htsmsg_field_t *f;
   const char *s;
 
   memset(&config, 0, sizeof(config));
@@ -1676,11 +1677,14 @@ config_boot ( const char *path, gid_t gid, uid_t uid )
   if (!config2) {
     tvhlog(LOG_DEBUG, "config", "no configuration, loading defaults");
   } else {
-    s = htsmsg_get_str(config2, "language");
-    if (s) {
-      htsmsg_t *m = htsmsg_csv_2_list(s, ',');
-      htsmsg_delete_field(config2, "language");
-      htsmsg_add_msg(config2, "language", m);
+    f = htsmsg_field_find(config2, "language");
+    if (f && f->hmf_type == HMF_STR) {
+      s = htsmsg_get_str(config2, "language");
+      if (s) {
+        htsmsg_t *m = htsmsg_csv_2_list(s, ',');
+        htsmsg_delete_field(config2, "language");
+        htsmsg_add_msg(config2, "language", m);
+      }
     }
     config.version = htsmsg_get_u32_or_default(config2, "config", 0);
     s = htsmsg_get_str(config2, "full_version");
@@ -1802,7 +1806,7 @@ config_class_language_get ( void *o )
 static int
 config_class_language_set ( void *o, const void *v )
 {
-  char *s = htsmsg_list_2_csv((htsmsg_t *)v, ',', 0);
+  char *s = htsmsg_list_2_csv((htsmsg_t *)v, ',', 3);
   if (strcmp(s ?: "", config.language ?: "")) {
     free(config.language);
     config.language = s;
@@ -1831,7 +1835,7 @@ config_class_info_area_get ( void *o )
 static int
 config_class_info_area_set ( void *o, const void *v )
 {
-  char *s = htsmsg_list_2_csv((htsmsg_t *)v, ',', 0);
+  char *s = htsmsg_list_2_csv((htsmsg_t *)v, ',', 3);
   if (strcmp(s ?: "", config.info_area ?: "")) {
     free(config.info_area);
     config.info_area = s;
index f996d8a7fadf3bdd64ebdbc0269c5df6dbdf15fa..ca59df8d3d4d8d3ec00fb36be700d547c99df77d 100644 (file)
@@ -1068,8 +1068,12 @@ htsmsg_list_2_csv(htsmsg_t *m, char delim, int human)
   used = 0;
   if (human) {
     sep[0] = delim;
-    sep[1] = ' ';
-    sep[2] = '\0';
+    if (human & 2) {
+      sep[1] = '\0';
+    } else {
+      sep[1] = ' ';
+      sep[2] = '\0';
+    }
     ssep = "";
   } else {
     sep[0] = delim;