Commit bddd76b0 authored by Antoine Cellerier's avatar Antoine Cellerier

Some more simplification of the luaplaylist/luameta code.

Fix a few FIXMEs.
parent 1b653546
......@@ -60,14 +60,9 @@ struct demux_sys_t
static int vlclua_demux_peek( lua_State *L )
{
demux_t *p_demux = (demux_t *)vlclua_get_this( L );
int i = lua_gettop( L );
int n;
int n = luaL_checkint( L, 1 );
const uint8_t *p_peek;
int i_peek;
if( !i ) return 0;
n = lua_tonumber( L, 1 );
lua_pop( L, i );
i_peek = stream_Peek( p_demux->s, &p_peek, n );
int i_peek = stream_Peek( p_demux->s, &p_peek, n );
lua_pushlstring( L, (const char *)p_peek, i_peek );
return 1;
}
......@@ -75,14 +70,9 @@ static int vlclua_demux_peek( lua_State *L )
static int vlclua_demux_read( lua_State *L )
{
demux_t *p_demux = (demux_t *)vlclua_get_this( L );
int i = lua_gettop( L );
int n;
byte_t *p_read;
int i_read;
if( !i ) return 0;
n = lua_tonumber( L, 1 );
lua_pop( L, i );
i_read = stream_Read( p_demux->s, &p_read, n );
int n = luaL_checkint( L, 1 );
int i_read = stream_Read( p_demux->s, &p_read, n );
lua_pushlstring( L, (const char *)p_read, i_read );
return 1;
}
......@@ -153,7 +143,7 @@ static int probe_luascript( vlc_object_t *p_this, const char * psz_filename,
lua_getglobal( L, "probe" );
if( !lua_isfunction( L, lua_gettop( L ) ) )
if( !lua_isfunction( L, -1 ) )
{
msg_Warn( p_demux, "Error while runing script %s, "
"function probe() not found", psz_filename );
......@@ -259,7 +249,7 @@ static int Demux( demux_t *p_demux )
lua_getglobal( L, "parse" );
if( !lua_isfunction( L, lua_gettop( L ) ) )
if( !lua_isfunction( L, -1 ) )
{
msg_Warn( p_demux, "Error while runing script %s, "
"function parse() not found", psz_filename );
......
......@@ -136,7 +136,7 @@ int vlclua_quit( lua_State *L )
int vlclua_volume_set( lua_State *L )
{
vlc_object_t *p_this = vlclua_get_this( L );
int i_volume = luaL_checkint( L, -1 );
int i_volume = luaL_checkint( L, 1 );
/* Do we need to check that i_volume is in the AOUT_VOLUME_MIN->MAX range?*/
return vlclua_push_ret( L, aout_VolumeSet( p_this, i_volume ) );
}
......@@ -184,7 +184,6 @@ int vlclua_stream_new( lua_State *L )
p_stream = stream_UrlNew( p_this, psz_url );
if( !p_stream )
return luaL_error( L, "Error when opening url: `%s'", psz_url );
lua_pop( L, 1 );
lua_pushlightuserdata( L, p_stream );
return 1;
}
......@@ -195,10 +194,8 @@ int vlclua_stream_read( lua_State *L )
int n;
byte_t *p_read;
int i_read;
if( lua_gettop( L ) != 2 ) return vlclua_error( L );
p_stream = (stream_t *)luaL_checklightuserdata( L, -2 );
n = luaL_checkint( L, -1 );
lua_pop( L, 2 );
p_stream = (stream_t *)luaL_checklightuserdata( L, 1 );
n = luaL_checkint( L, 2 );
p_read = malloc( n );
if( !p_read ) return vlclua_error( L );
i_read = stream_Read( p_stream, p_read, n );
......@@ -210,9 +207,7 @@ int vlclua_stream_read( lua_State *L )
int vlclua_stream_readline( lua_State *L )
{
stream_t * p_stream;
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
p_stream = (stream_t *)luaL_checklightuserdata( L, -1 );
lua_pop( L, 1 );
p_stream = (stream_t *)luaL_checklightuserdata( L, 1 );
char *psz_line = stream_ReadLine( p_stream );
if( psz_line )
{
......@@ -220,94 +215,94 @@ int vlclua_stream_readline( lua_State *L )
free( psz_line );
}
else
{
lua_pushnil( L );
}
return 1;
}
int vlclua_stream_delete( lua_State *L )
{
stream_t * p_stream;
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
p_stream = (stream_t *)luaL_checklightuserdata( L, -1 );
lua_pop( L, 1 );
p_stream = (stream_t *)luaL_checklightuserdata( L, 1 );
stream_Delete( p_stream );
return 1;
return 0;
}
/*****************************************************************************
* String transformations
*****************************************************************************/
/* TODO: make it work for any number of arguments */
int vlclua_decode_uri( lua_State *L )
{
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
int i_top = lua_gettop( L );
int i;
for( i = 1; i <= i_top; i++ )
{
const char *psz_cstring = luaL_checkstring( L, 1 );
if( !psz_cstring ) return vlclua_error( L );
char *psz_string = strdup( psz_cstring );
lua_pop( L, 1 );
lua_remove( L, 1 ); /* remove elements to prevent being limited by
* the stack's size (this function will work with
* up to (stack size - 1) arguments */
decode_URI( psz_string );
lua_pushstring( L, psz_string );
free( psz_string );
return 1;
}
return i_top;
}
/* TODO: make it work for any number of arguments */
int vlclua_resolve_xml_special_chars( lua_State *L )
{
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
int i_top = lua_gettop( L );
int i;
for( i = 1; i <= i_top; i++ )
{
const char *psz_cstring = luaL_checkstring( L, 1 );
if( !psz_cstring ) return vlclua_error( L );
char *psz_string = strdup( psz_cstring );
lua_pop( L, 1 );
lua_remove( L, 1 ); /* remove elements to prevent being limited by
* the stack's size (this function will work with
* up to (stack size - 1) arguments */
resolve_xml_special_chars( psz_string );
lua_pushstring( L, psz_string );
free( psz_string );
return 1;
}
return i_top;
}
/*****************************************************************************
* Messaging facilities
*****************************************************************************/
/* TODO: make it work for any number of arguments */
int vlclua_msg_dbg( lua_State *L )
{
int i_top = lua_gettop( L );
vlc_object_t *p_this = vlclua_get_this( L );
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
const char *psz_cstring = luaL_checkstring( L, 1 );
if( !psz_cstring ) return vlclua_error( L );
msg_Dbg( p_this, "%s", psz_cstring );
int i;
for( i = 1; i <= i_top; i++ )
msg_Dbg( p_this, "%s", luaL_checkstring( L, 1 ) );
return 0;
}
/* TODO: make it work for any number of arguments */
int vlclua_msg_warn( lua_State *L )
{
int i_top = lua_gettop( L );
vlc_object_t *p_this = vlclua_get_this( L );
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
const char *psz_cstring = luaL_checkstring( L, 1 );
if( !psz_cstring ) return vlclua_error( L );
msg_Warn( p_this, "%s", psz_cstring );
int i;
for( i = 1; i <= i_top; i++ )
msg_Warn( p_this, "%s", luaL_checkstring( L, i ) );
return 0;
}
/* TODO: make it work for any number of arguments */
int vlclua_msg_err( lua_State *L )
{
int i_top = lua_gettop( L );
vlc_object_t *p_this = vlclua_get_this( L );
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
const char *psz_cstring = luaL_checkstring( L, 1 );
if( !psz_cstring ) return vlclua_error( L );
msg_Err( p_this, "%s", psz_cstring );
int i;
for( i = 1; i <= i_top; i++ )
msg_Err( p_this, "%s", luaL_checkstring( L, i ) );
return 0;
}
/* TODO: make it work for any number of arguments */
int vlclua_msg_info( lua_State *L )
{
int i_top = lua_gettop( L );
vlc_object_t *p_this = vlclua_get_this( L );
if( lua_gettop( L ) != 1 ) return vlclua_error( L );
const char *psz_cstring = luaL_checkstring( L, 1 );
if( !psz_cstring ) return vlclua_error( L );
msg_Info( p_this, "%s", psz_cstring );
int i;
for( i = 1; i <= i_top; i++ )
msg_Info( p_this, "%s", luaL_checkstring( L, i ) );
return 0;
}
......
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