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