From e14391323fbe80f8df61e8416bc9d33e9a44a1be Mon Sep 17 00:00:00 2001
From: Adam Sutton <dev@adamsutton.me.uk>
Date: Fri, 3 Aug 2012 09:45:29 +0200
Subject: [PATCH] PR-108 - fix possible problems with some Polish channels char
 encoding.

Credit to bigtarget for the original PR.
---
 src/dvb/dvb_support.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/dvb/dvb_support.c b/src/dvb/dvb_support.c
index e1066c0c..f2d0470e 100644
--- a/src/dvb/dvb_support.c
+++ b/src/dvb/dvb_support.c
@@ -41,6 +41,11 @@ static int convert_iso_8859[16] = {
 #define convert_utf8   14
 #define convert_iso6937 15
 
+#define PL_FIX_CHARS \
+"\xA1\xA3\xA6\xAC\xAF\xB1\xB3\xB6\xBC\xBF"\
+"\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xCA\xCB\xCD\xCE\xCF"\
+"\xD1\xD3\xE6\xE8\xEA\xF1\xF3\xF8"
+
 static inline int encode_utf8(unsigned int c, char *outb, int outleft)
 {
   if (c <= 0x7F && outleft >= 1) {
@@ -225,7 +230,11 @@ dvb_get_string(char *dst, size_t dstlen, const uint8_t *src, size_t srclen, char
     return -1;
 
   case 0x01 ... 0x0b:
-    ic = convert_iso_8859[src[0] + 4];
+    // NOTE: some Polish channels using ISO6937 while specifying ISO8859-4
+    if ((src[0] + 4) == 5 && strpbrk((const char*)src, PL_FIX_CHARS))
+      ic = convert_iso6937;
+    else
+      ic = convert_iso_8859[src[0] + 4];
     src++; srclen--;
     break;
 
@@ -257,7 +266,11 @@ dvb_get_string(char *dst, size_t dstlen, const uint8_t *src, size_t srclen, char
         ic = convert_iso6937;
       }
     } else {
-      ic = convert_iso6937;
+      // Note: some Polish channels using ISO8859-2 while specifying no encoding
+      if (strpbrk((const char*)src, PL_FIX_CHARS))
+        ic = convert_iso_8859[2];
+      else
+        ic = convert_iso6937;
     }
     break;
   }