static int ScanExtensions( extensions_manager_t *p_this );
static int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
- void *pb_continue );
+ void *dummy );
static int Control( extensions_manager_t *, int, va_list );
static int GetMenuEntries( extensions_manager_t *p_mgr, extension_t *p_ext,
char ***pppsz_titles, uint16_t **ppi_ids );
**/
static int ScanExtensions( extensions_manager_t *p_mgr )
{
- bool b_true = true;
int i_ret =
vlclua_scripts_batch_execute( VLC_OBJECT( p_mgr ),
"extensions",
&ScanLuaCallback,
- &b_true );
+ NULL );
if( !i_ret )
return VLC_EGENERIC;
return VLC_SUCCESS;
}
+/**
+ * Dummy Lua function: does nothing
+ * @note This function can be used to replace "require" while scanning for
+ * extensions
+ * Even the built-in libraries are not loaded when calling descriptor()
+ **/
+static int vlclua_dummy_require( lua_State *L )
+{
+ (void) L;
+ return 0;
+}
+
/**
* Batch scan all Lua files in folder "extensions": callback
* @param p_this This extensions_manager_t object
* @param psz_script Name of the script to run
* @param L Lua State, common to all scripts here
- * @param pb_continue bool* that indicates whether to continue batch or not
+ * @param dummy: unused
**/
int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
- void *pb_continue )
+ void *dummy )
{
+ VLC_UNUSED(dummy);
extensions_manager_t *p_mgr = ( extensions_manager_t* ) p_this;
bool b_ok = false;
vlc_mutex_init( &p_ext->p_sys->running_lock );
vlc_cond_init( &p_ext->p_sys->wait );
- /* Load and run the script(s) */
+ /* Prepare Lua state */
lua_State *L = luaL_newstate();
+ lua_register( L, "require", &vlclua_dummy_require );
+
+ /* Let's run it */
if( luaL_dofile( L, psz_script ) )
{
msg_Warn( p_mgr, "Error loading script %s: %s", psz_script,
if( !lua_isfunction( L, -1 ) )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function descriptor() not found", psz_script );
goto exit;
}
if( lua_pcall( L, 0, 1, 0 ) )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function descriptor(): %s", psz_script,
lua_tostring( L, lua_gettop( L ) ) );
goto exit;
/* Get author */
lua_getfield( L, -1, "author" );
- if( lua_isstring( L, -1 ) )
- {
- p_ext->psz_author = strdup( luaL_checkstring( L, -1 ) );
- }
- else
- {
- p_ext->psz_author = NULL;
- }
+ p_ext->psz_author = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get description */
lua_getfield( L, -1, "description" );
- if( lua_isstring( L, -1 ) )
- {
- p_ext->psz_description = strdup( luaL_checkstring( L, -1 ) );
- }
- else
- {
- p_ext->psz_description = NULL;
- }
+ p_ext->psz_description = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get short description */
lua_getfield( L, -1, "shortdesc" );
- if( lua_isstring( L, -1 ) )
- {
- p_ext->psz_shortdescription = strdup( luaL_checkstring( L, -1 ) );
- }
- else
- {
- p_ext->psz_shortdescription = NULL;
- }
+ p_ext->psz_shortdescription = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get URL */
lua_getfield( L, -1, "url" );
- if( lua_isstring( L, -1 ) )
- {
- p_ext->psz_url = strdup( luaL_checkstring( L, -1 ) );
- }
- else
- {
- p_ext->psz_url = NULL;
- }
+ p_ext->psz_url = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get version */
lua_getfield( L, -1, "version" );
- if( lua_isstring( L, -1 ) )
- {
- p_ext->psz_version = strdup( luaL_checkstring( L, -1 ) );
- }
- else
- {
- p_ext->psz_version = NULL;
- }
+ p_ext->psz_version = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
}
else
vlc_mutex_unlock( &p_mgr->lock );
/* Continue batch execution */
- return pb_continue ? ( (* (bool*)pb_continue) ? -1 : 0 ) : -1;
+ return VLC_EGENERIC;
}
static int Control( extensions_manager_t *p_mgr, int i_control, va_list args )
* @param p_mgr
* @param p_ext
* @param pppsz_titles Pointer to NULL. All strings must be freed by the caller
- * @param ppi_ids Pointer to NULL. Must be feed by the caller.
+ * @param ppi_ids Pointer to NULL. Must be freed by the caller.
* @note This function is allowed to run in the UI thread. This means
* that it MUST respond very fast.
* @todo Remove the menu() hook and provide a new function vlc.set_menu()
if( !lua_isfunction( L, -1 ) )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function menu() not found", p_ext->psz_name );
goto exit;
}
if( lua_pcall( L, 0, 1, 0 ) )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function menu(): %s", p_ext->psz_name,
lua_tostring( L, lua_gettop( L ) ) );
goto exit;
p_ext->p_sys->L = L;
}
}
-#ifndef NDEBUG
- else
- {
- msg_Dbg( p_mgr, "Reusing old Lua state for extension '%s'",
- p_ext->psz_name );
- }
-#endif
return L;
}
if( !lua_isfunction( L, -1 ) )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function %s() not found", p_ext->psz_name, psz_function );
goto exit;
}
}
if( lua_pcall( L, i_args, 1, 0 ) )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function %s(): %s", p_ext->psz_name, psz_function,
lua_tostring( L, lua_gettop( L ) ) );
goto exit;
lua_getglobal( L, "trigger_menu" );
if( !lua_isfunction( L, -1 ) )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function trigger_menu() not found", p_ext->psz_name );
return VLC_EGENERIC;
}
if( lua_pcall( L, 1, 1, 0 ) != 0 )
{
- msg_Warn( p_mgr, "Error while runing script %s, "
+ msg_Warn( p_mgr, "Error while running script %s, "
"function trigger_menu(): %s", p_ext->psz_name,
lua_tostring( L, lua_gettop( L ) ) );
return VLC_EGENERIC;