draw: use only one iconv for all

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2008-07-09 08:48:51 +02:00
parent 58eac8af1c
commit 9c495c0dee
1 changed files with 12 additions and 11 deletions

View File

@ -56,6 +56,8 @@ void draw_parser_data_wipe(draw_parser_data_t *pdata)
draw_image_delete(&pdata->bg_image);
}
static iconv_t iso2utf8 = (iconv_t) -1;
/** Convert text from any charset to UTF-8 using iconv.
* \param iso The ISO string to convert.
* \param len The string size.
@ -64,7 +66,6 @@ void draw_parser_data_wipe(draw_parser_data_t *pdata)
char *
draw_iso2utf8(const char *iso, size_t len)
{
iconv_t iso2utf8;
size_t utf8len;
char *utf8, *utf8p;
@ -74,16 +75,19 @@ draw_iso2utf8(const char *iso, size_t len)
if(!a_strcmp(nl_langinfo(CODESET), "UTF-8"))
return NULL;
iso2utf8 = iconv_open("UTF-8", nl_langinfo(CODESET));
if(iso2utf8 == (iconv_t) -1)
{
if(errno == EINVAL)
warn("unable to convert text from %s to UTF-8, not available",
nl_langinfo(CODESET));
else
warn("unable to convert text: %s", strerror(errno));
iso2utf8 = iconv_open("UTF-8", nl_langinfo(CODESET));
if(iso2utf8 == (iconv_t) -1)
{
if(errno == EINVAL)
warn("unable to convert text from %s to UTF-8, not available",
nl_langinfo(CODESET));
else
warn("unable to convert text: %s", strerror(errno));
return NULL;
return NULL;
}
}
utf8len = 2 * len + 1;
@ -95,9 +99,6 @@ draw_iso2utf8(const char *iso, size_t len)
p_delete(&utf8p);
}
if(iconv_close(iso2utf8))
warn("error closing iconv");
return utf8p;
}