]> git.sesse.net Git - vlc/blobdiff - modules/misc/lua/extension.c
lua_extension: remove dummy variable (we want to run every extension anyway).
[vlc] / modules / misc / lua / extension.c
index 4483b4441206c691d56e663915f4b80fcf6fbdff..2a529b85a5e6415f9c94e096946125652dc6931c 100644 (file)
@@ -56,7 +56,7 @@ const char* const ppsz_capabilities[] = {
 
 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 );
@@ -181,12 +181,11 @@ void Close_Extension( vlc_object_t *p_this )
  **/
 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;
@@ -194,16 +193,29 @@ static int ScanExtensions( extensions_manager_t *p_mgr )
     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;
 
@@ -236,8 +248,11 @@ int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
     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,
@@ -251,14 +266,14 @@ int ScanLuaCallback( vlc_object_t *p_this, const char *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;
@@ -327,61 +342,31 @@ int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
             /* 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 = strdup( luaL_optstring( L, -1, NULL ) );
             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 = strdup( luaL_optstring( L, -1, NULL ) );
             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 = strdup( luaL_optstring( L, -1, NULL ) );
             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 = strdup( luaL_optstring( L, -1, NULL ) );
             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 = strdup( luaL_optstring( L, -1, NULL ) );
             lua_pop( L, 1 );
         }
         else
@@ -426,7 +411,7 @@ exit:
 
     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 )
@@ -641,14 +626,14 @@ static int GetMenuEntries( extensions_manager_t *p_mgr, extension_t *p_ext,
 
     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;
@@ -776,13 +761,6 @@ static lua_State* GetLuaState( extensions_manager_t *p_mgr,
             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;
 }
@@ -820,7 +798,7 @@ int lua_ExecuteFunctionVa( extensions_manager_t *p_mgr, extension_t *p_ext,
 
     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;
     }
@@ -846,7 +824,7 @@ int lua_ExecuteFunctionVa( extensions_manager_t *p_mgr, extension_t *p_ext,
     }
     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;
@@ -877,7 +855,7 @@ int lua_ExtensionTriggerMenu( extensions_manager_t *p_mgr,
     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;
     }
@@ -887,7 +865,7 @@ int lua_ExtensionTriggerMenu( extensions_manager_t *p_mgr,
 
     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;