#define CS_OPTIONS "//TRANSLIT"
-char *dvb_default_charset = "iso-8859-1";
-char *dvb_output_charset = "utf-8";
-
struct charset_conv {
unsigned len;
unsigned char data[3];
[0xff] = { 2, {0xc2, 0xad, } },
};
-void iconv_to_charset(struct dvb_v5_fe_parms *parms,
- char *dest,
- size_t destlen,
- const unsigned char *src,
- size_t len,
- char *type, char *output_charset)
+void dvb_iconv_to_charset(struct dvb_v5_fe_parms *parms,
+ char *dest,
+ size_t destlen,
+ const unsigned char *src,
+ size_t len,
+ char *input_charset, char *output_charset)
{
char out_cs[strlen(output_charset) + 1 + sizeof(CS_OPTIONS)];
char *p = dest;
strcpy(out_cs, output_charset);
strcat(out_cs, CS_OPTIONS);
- iconv_t cd = iconv_open(out_cs, type);
+ iconv_t cd = iconv_open(out_cs, input_charset);
if (cd == (iconv_t)(-1)) {
memcpy(p, src, len);
p[len] = '\0';
dvb_logerr("Conversion from %s to %s not supported\n",
- type, output_charset);
+ input_charset, output_charset);
} else {
iconv(cd, (ICONV_CONST char **)&src, &len, &p, &destlen);
iconv_close(cd);
}
static void charset_conversion(struct dvb_v5_fe_parms *parms, char **dest, const unsigned char *s,
- size_t len,
- char *type, char *output_charset)
+ size_t len, char *input_charset)
{
size_t destlen = len * 3;
int need_conversion = 1;
/* Special handler for ISO-6937 */
- if (!strcasecmp(type, "ISO-6937")) {
+ if (!strcasecmp(input_charset, "ISO-6937")) {
char *p = *dest;
unsigned char *tmp;
unsigned char *p1, *p2;
*p = '\0';
/* If desired charset is not UTF-8, prepare for conversion */
- if (strcasecmp(output_charset, "UTF-8")) {
+ if (strcasecmp(parms->output_charset, "UTF-8")) {
tmp = (unsigned char *)*dest;
len = p - *dest;
*dest = malloc(destlen + 1);
- type = "UTF-8";
+ input_charset = "UTF-8";
s = tmp;
} else
need_conversion = 0;
/* Convert from original charset to the desired one */
if (need_conversion)
- iconv_to_charset(parms, *dest, destlen, s, len, type,
- output_charset);
+ dvb_iconv_to_charset(parms, *dest, destlen, s, len,
+ input_charset,
+ parms->output_charset);
}
-void parse_string(struct dvb_v5_fe_parms *parms, char **dest, char **emph,
- const unsigned char *src, size_t len,
- char *default_charset, char *output_charset)
+void dvb_parse_string(struct dvb_v5_fe_parms *parms, char **dest, char **emph,
+ const unsigned char *src, size_t len)
{
size_t destlen, i, len2 = 0;
- char *p, *p2, *type = default_charset;
+ char *p, *p2, *type = parms->default_charset;
unsigned char *tmp1 = NULL, *tmp2 = NULL;
const unsigned char *s;
int emphasis = 0;
else
s = src;
- charset_conversion(parms, dest, s, len, type, output_charset);
+ charset_conversion(parms, dest, s, len, type);
/* The code had over-sized the space. Fix it. */
if (*dest)
*dest = realloc(*dest, strlen(*dest) + 1);
free (*emph);
*emph = NULL;
} else {
- charset_conversion(parms, emph, tmp2, len2, type, output_charset);
+ charset_conversion(parms, emph, tmp2, len2, type);
*emph = realloc(*emph, strlen(*emph) + 1);
}
struct dvb_v5_fe_parms;
-void iconv_to_charset(struct dvb_v5_fe_parms *parms,
- char *dest,
- size_t destlen,
- const unsigned char *src,
- size_t len,
- char *type, char *output_charset);
+void dvb_iconv_to_charset(struct dvb_v5_fe_parms *parms,
+ char *dest,
+ size_t destlen,
+ const unsigned char *src,
+ size_t len,
+ char *type, char *output_charset);
-void parse_string(struct dvb_v5_fe_parms *parms, char **dest, char **emph,
- const unsigned char *src, size_t len,
- char *default_charset, char *output_charset);
-
-extern char *dvb_default_charset;
-extern char *dvb_output_charset;
+void dvb_parse_string(struct dvb_v5_fe_parms *parms, char **dest, char **emph,
+ const unsigned char *src, size_t len);
#if HAVE_VISIBILITY
#pragma GCC visibility pop