]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
language: add lang_code_preferred() to properly handle NULL for lang_str_add
authorJaroslav Kysela <perex@perex.cz>
Fri, 29 May 2015 16:50:53 +0000 (18:50 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 29 May 2015 16:50:53 +0000 (18:50 +0200)
src/lang_codes.c
src/lang_codes.h
src/lang_str.c

index 6c0964d858b47b881a6e5f4aa37cae40a8df38e8..ad75fa882bbdbe39f5606b32d927c76c0758b3e6 100644 (file)
@@ -674,7 +674,6 @@ static void lang_code_free( lang_code_lookup_t *l )
 {
   lang_code_lookup_element_t *element;
   if (l == NULL)
-    return;
   while ((element = RB_FIRST(l)) != NULL) {
     RB_REMOVE(l, element, link);
     free(element);
@@ -682,6 +681,20 @@ static void lang_code_free( lang_code_lookup_t *l )
   free(l);
 }
 
+const char *lang_code_preferred( void )
+{
+  const char *codes = config_get_language(), *ret = "und";
+  const lang_code_t *co;
+
+  if (codes) {
+    co = lang_code_get3(codes);
+    if (co && co->code2b)
+      ret = co->code2b;
+  }
+
+  return ret;
+}
+
 void lang_code_done( void )
 {
   lang_code_free(lang_codes_code2b);
index 13f52ba755119428d6d2821673058bcfa47e97ca..ffdf0a457466222007113fd9c1b4caca412b8c98 100644 (file)
@@ -36,6 +36,8 @@ const char *lang_code_get ( const char *code );
 const char *lang_code_get2 ( const char *code, size_t len );
 const lang_code_t *lang_code_get3 ( const char *code );
 
+const char *lang_code_preferred( void );
+
 /* Split list of codes as per HTTP Language-Accept spec */
 const char **lang_code_split ( const char *codes );
 const lang_code_t **lang_code_split2 ( const char *codes );
index fd06c4a593db15bfd15c0d0a640019f5dddf6778..13aaedaa53220a419c14cef4136fa311a4e04abe 100644 (file)
@@ -117,6 +117,7 @@ static int _lang_str_add
   if (!str) return 0;
 
   /* Get proper code */
+  if (!lang) lang = lang_code_preferred();
   if (!(lang = lang_code_get(lang))) return 0;
 
   /* Create skel */