From 7f34935eb111355c76b9e6667e262fb59b83f683 Mon Sep 17 00:00:00 2001 From: Richard Kunze Date: Fri, 18 May 2012 22:44:26 +0200 Subject: [PATCH] Always use the builtin charset conversion --- src/dvb/dvb.c | 2 - src/dvb/dvb_support.c | 124 +++++------------------------------------- src/dvb/dvb_support.h | 1 - support/configure.inc | 1 - 4 files changed, 13 insertions(+), 115 deletions(-) diff --git a/src/dvb/dvb.c b/src/dvb/dvb.c index 0cb78d5c..0b0d8e7c 100644 --- a/src/dvb/dvb.c +++ b/src/dvb/dvb.c @@ -25,6 +25,4 @@ void dvb_init(uint32_t adapter_mask) { dvb_adapter_init(adapter_mask); - dvb_conversion_init(); - } diff --git a/src/dvb/dvb_support.c b/src/dvb/dvb_support.c index 2a6f31fe..9830c2b9 100644 --- a/src/dvb/dvb_support.c +++ b/src/dvb/dvb_support.c @@ -33,32 +33,13 @@ #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 -#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; diff --git a/src/dvb/dvb_support.h b/src/dvb/dvb_support.h index 7ec2d5ee..ed512550 100644 --- a/src/dvb/dvb_support.h +++ b/src/dvb/dvb_support.h @@ -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); diff --git a/support/configure.inc b/support/configure.inc index 588daada..5416be89 100644 --- a/support/configure.inc +++ b/support/configure.inc @@ -25,7 +25,6 @@ CONFIG_LIST=" linuxdvb v4l execinfo - dvbconv " die() {