]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Always use the builtin charset conversion 90/head
authorRichard Kunze <richard.kunze@web.de>
Fri, 18 May 2012 20:44:26 +0000 (22:44 +0200)
committerRichard Kunze <richard.kunze@web.de>
Fri, 18 May 2012 20:44:26 +0000 (22:44 +0200)
src/dvb/dvb.c
src/dvb/dvb_support.c
src/dvb/dvb_support.h
support/configure.inc

index 0cb78d5c0be4af48070f43117ae8b4609eb66410..0b0d8e7c664a1c26f1c8e50bd0f6a48c510148d4 100644 (file)
@@ -25,6 +25,4 @@ void
 dvb_init(uint32_t adapter_mask)
 {
   dvb_adapter_init(adapter_mask);
-  dvb_conversion_init();
-
 }
index 2a6f31fefb311c8a68327ef6d2f46565bdb7d6df..9830c2b96c9094073b549adb0419f66ad787e838 100644 (file)
 #include "tvheadend.h"
 #include "dvb_support.h"
 #include "dvb.h"
-
-#ifdef CONFIG_DVBCONV // Use builtin charset conversion
-#define dvbconv_t int
-static dvbconv_t convert_iso_8859[16];
-static dvbconv_t convert_utf8;
-static dvbconv_t convert_latin1;
-
 #include "dvb_charset_tables.h"
 
-#define CONV_UTF8      14
-#define CONV_ISO6937   15
-void
-dvb_conversion_init(void)
-{
-  int i;
-  convert_utf8 = CONV_UTF8;
-  convert_iso_8859[0] = -1;
-  for (i=1; i<=11; i++) {
-    convert_iso_8859[i] = i-1;
-  }
-  convert_iso_8859[12] = -1; // There is no ISO-8859-12
-  for (i=13; i<=15; i++) {
-    convert_iso_8859[i] = i-2;
-  }
-  convert_latin1 = CONV_ISO6937;
-}
+static int convert_iso_8859[16] = {
+  -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, 11, 12, 13
+};
+#define convert_utf8   14
+#define convert_iso6937 15
 
 static inline int encode_utf8(uint16_t c, char *outb, int outleft)
 {
@@ -100,7 +81,7 @@ static inline size_t conv_utf8(const uint8_t *src, size_t srclen,
   return 0;
 }
 
-static inline size_t conv_8859(dvbconv_t conv,
+static inline size_t conv_8859(int conv,
                               const uint8_t *src, size_t srclen,
                               char *dst, size_t *dstlen)
 {
@@ -204,96 +185,17 @@ static inline size_t conv_6937(const uint8_t *src, size_t srclen,
   return 0;
 }
 
-static size_t dvb_convert(dvbconv_t conv,
+static inline size_t dvb_convert(int conv,
                           const uint8_t *src, size_t srclen,
                           char *dst, size_t *dstlen)
 {
   switch (conv) {
-    case CONV_UTF8: return conv_utf8(src, srclen, dst, dstlen);
-    case CONV_ISO6937: return conv_6937(src, srclen, dst, dstlen);
+    case convert_utf8: return conv_utf8(src, srclen, dst, dstlen);
+    case convert_iso6937: return conv_6937(src, srclen, dst, dstlen);
     default: return conv_8859(conv, src, srclen, dst, dstlen);
   }
 }
 
-#else // use iconv for charset conversion
-
-#include <iconv.h>
-#define dvbconv_t iconv_t
-static dvbconv_t convert_iso_8859[16];
-static dvbconv_t convert_utf8;
-static dvbconv_t convert_latin1;
-
-static dvbconv_t
-dvb_iconv_open(const char *srcencoding)
-{
-  dvbconv_t ic;
-  ic = iconv_open("UTF-8", srcencoding);
-  return ic;
-}
-
-void
-dvb_conversion_init(void)
-{
-  char buf[50];
-  int i;
-  for(i = 1; i <= 15; i++) {
-    snprintf(buf, sizeof(buf), "ISO-8859-%d", i);
-    convert_iso_8859[i] = dvb_iconv_open(buf);
-  }
-
-  convert_utf8   = dvb_iconv_open("UTF-8");
-  convert_latin1 = dvb_iconv_open("ISO6937");
-  if(convert_latin1 == (dvbconv_t)(-1)) {
-    convert_latin1 = dvb_iconv_open("ISO_8859-1");
-  }
-}
-static size_t dvb_convert(dvbconv_t ic,
-                          const uint8_t *src, size_t srclen,
-                          char *dst, size_t *outlen) {
-  char *in, *out;
-  size_t inlen;
-  unsigned char *tmp;
-  int i;
-  int r;
-
-  tmp = alloca(srclen + 1);
-  memcpy(tmp, src, srclen);
-  tmp[srclen] = 0;
-
-  /* Escape control codes */
-  if(ic != convert_utf8) {
-    for(i = 0; i < srclen; i++) {
-      if(tmp[i] >= 0x80 && tmp[i] <= 0x9f)
-       tmp[i] = ' ';
-    }
-  }
-
-  out = dst;
-  in = (char *)tmp;
-  inlen = srclen;
-
-  while(inlen > 0) {
-    r = iconv(ic, &in, &inlen, &out, outlen);
-
-    if(r == (size_t) -1) {
-      if(errno == EILSEQ) {
-       in++;
-       inlen--;
-       continue;
-      } else {
-       return -1;
-      }
-    }
-  }
-  return 0;
-}
-#endif
-/**
- *
- */
-
-
 /*
  * DVB String conversion according to EN 300 468, Annex A
  * Not all character sets are supported, but it should cover most of them
@@ -302,7 +204,7 @@ static size_t dvb_convert(dvbconv_t ic,
 int
 dvb_get_string(char *dst, size_t dstlen, const uint8_t *src, size_t srclen, char *dvb_default_charset)
 {
-  dvbconv_t ic;
+  int ic;
   size_t len, outlen;
   int i;
 
@@ -345,10 +247,10 @@ dvb_get_string(char *dst, size_t dstlen, const uint8_t *src, size_t srclen, char
       if (i > 0 && i < 16) {
         ic = convert_iso_8859[i];
       } else {
-        ic = convert_latin1;
+        ic = convert_iso6937;
       }
     } else {
-      ic = convert_latin1;
+      ic = convert_iso6937;
     }
     break;
   }
@@ -358,7 +260,7 @@ dvb_get_string(char *dst, size_t dstlen, const uint8_t *src, size_t srclen, char
     return 0;
   }
 
-  if(ic == (dvbconv_t) -1)
+  if(ic == -1)
     return -1;
 
   outlen = dstlen - 1;
index 7ec2d5ee45ce0fba9bf4b934357fc5f7f043e1f5..ed51255010de55ef4cbe72bbc20ad77589b04854 100644 (file)
@@ -69,7 +69,6 @@ th_dvb_mux_instance_t *dvb_mux_find_by_identifier(const char *identifier);
 void dvb_mux_nicename(char *buf, size_t size, th_dvb_mux_instance_t *tdmi);
 int dvb_mux_badness(th_dvb_mux_instance_t *tdmi);
 const char *dvb_mux_status(th_dvb_mux_instance_t *tdmi);
-void dvb_conversion_init(void);
 void dvb_mux_nicefreq(char *buf, size_t size, th_dvb_mux_instance_t *tdmi);
 
 void atsc_utf16_to_utf8(uint8_t *src, int len, char *buf, int buflen);
index 588daadaebd9f1b08182af009dc064f7af8eb764..5416be89f2db50a3b37bcec3db700b9a5249547a 100644 (file)
@@ -25,7 +25,6 @@ CONFIG_LIST="
  linuxdvb
  v4l
  execinfo
- dvbconv
 "
 
 die() {