static int Control( demux_t *p_demux, int i_query, va_list args ) { VLC_UNUSED(p_demux); VLC_UNUSED(i_query); VLC_UNUSED(args); return VLC_EGENERIC; }
/***************************************************************************** * Called through lua_scripts_batch_execute to call 'probe' on * the script pointed by psz_filename. *****************************************************************************/ static int probe_luascript( vlc_object_t *p_this, const char * psz_filename, void * user_data ) { VLC_UNUSED(user_data); demux_t * p_demux = (demux_t *)p_this; p_demux->p_sys->psz_filename = strdup(psz_filename); /* Initialise Lua state structure */ lua_State *L = luaL_newstate(); if( !L ) { msg_Err( p_demux, "Could not create new Lua State" ); goto error; } p_demux->p_sys->L = L; /* Load Lua libraries */ luaL_openlibs( L ); /* FIXME: Don't open all the libs? */ vlclua_set_this( L, p_demux ); luaL_register( L, "vlc", p_reg ); luaopen_msg( L ); luaopen_strings( L ); luaopen_stream( L ); luaopen_xml( L ); luaopen_md5( L ); lua_pushstring( L, p_demux->psz_location ); lua_setfield( L, -2, "path" ); lua_pushstring( L, p_demux->psz_access ); lua_setfield( L, -2, "access" ); lua_pop( L, 1 ); /* Setup the module search path */ if( vlclua_add_modules_path( p_demux, L, psz_filename ) ) { msg_Warn( p_demux, "Error while setting the module search path for %s", psz_filename ); goto error; } /* Load and run the script(s) */ if( luaL_dofile( L, psz_filename ) ) { msg_Warn( p_demux, "Error loading script %s: %s", psz_filename, lua_tostring( L, lua_gettop( L ) ) ); goto error; } lua_getglobal( L, "probe" ); if( !lua_isfunction( L, -1 ) ) { msg_Warn( p_demux, "Error while running script %s, " "function probe() not found", psz_filename ); goto error; } if( lua_pcall( L, 0, 1, 0 ) ) { msg_Warn( p_demux, "Error while running script %s, " "function probe(): %s", psz_filename, lua_tostring( L, lua_gettop( L ) ) ); goto error; } if( lua_gettop( L ) ) { if( lua_toboolean( L, 1 ) ) { msg_Dbg( p_demux, "Lua playlist script %s's " "probe() function was successful", psz_filename ); lua_pop( L, 1 ); return VLC_SUCCESS; } } error: lua_pop( L, 1 ); lua_close( p_demux->p_sys->L ); p_demux->p_sys->L = NULL; FREENULL( p_demux->p_sys->psz_filename ); return VLC_EGENERIC; }