Commit 91e56a1e authored by Ilkka Ollakka's avatar Ilkka Ollakka

lua: add vlc.strings.iconv to use vlc_iconv, shouldn't eat kittens

Not sure if I remembered to do all the checks needed for errors, but
works for me ok.
parent e352b7d5
...@@ -112,6 +112,34 @@ static int vlclua_convert_xml_special_chars( lua_State *L ) ...@@ -112,6 +112,34 @@ static int vlclua_convert_xml_special_chars( lua_State *L )
return i_top; return i_top;
} }
static int vlclua_iconv( lua_State *L )
{
int i_ret;
size_t i_out_bytes, i_in_bytes;
char *psz_output, *psz_original;
if( lua_gettop( L ) < 3 ) return vlclua_error( L );
const char *psz_input = luaL_checklstring( L, 3, &i_in_bytes );
if( i_in_bytes == 0 ) return vlclua_error( L );
vlc_iconv_t iconv_handle = vlc_iconv_open( luaL_checkstring(L, 1),
luaL_checkstring(L, 2) );
if( iconv_handle == (vlc_iconv_t)-1 )
return vlclua_error( L );
psz_output = psz_original = malloc( 4 * i_in_bytes );
i_out_bytes = 4 * i_in_bytes;
i_ret = vlc_iconv( iconv_handle, &psz_input ,
&i_in_bytes, &psz_output, &i_out_bytes );
*psz_output = '\0';
lua_pushstring( L, psz_original );
vlc_iconv_close( iconv_handle );
free( psz_original );
return 1;
}
/***************************************************************************** /*****************************************************************************
* *
*****************************************************************************/ *****************************************************************************/
...@@ -120,6 +148,7 @@ static const luaL_Reg vlclua_strings_reg[] = { ...@@ -120,6 +148,7 @@ static const luaL_Reg vlclua_strings_reg[] = {
{ "encode_uri_component", vlclua_encode_uri_component }, { "encode_uri_component", vlclua_encode_uri_component },
{ "resolve_xml_special_chars", vlclua_resolve_xml_special_chars }, { "resolve_xml_special_chars", vlclua_resolve_xml_special_chars },
{ "convert_xml_special_chars", vlclua_convert_xml_special_chars }, { "convert_xml_special_chars", vlclua_convert_xml_special_chars },
{ "iconv", vlclua_iconv },
{ NULL, NULL } { NULL, NULL }
}; };
......
...@@ -359,6 +359,8 @@ strings.resolve_xml_special_chars( [str1, [str2, [...]]] ): Resolve XML ...@@ -359,6 +359,8 @@ strings.resolve_xml_special_chars( [str1, [str2, [...]]] ): Resolve XML
variables as it had arguments. variables as it had arguments.
strings.convert_xml_special_chars( [str1, [str2, [...]]] ): Do the inverse strings.convert_xml_special_chars( [str1, [str2, [...]]] ): Do the inverse
operation. operation.
strings.iconv( str1 to, str2 from, str ): use vlc_iconv to convert string
from encoding to another
Variables Variables
--------- ---------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment