]> git.sesse.net Git - vlc/blobdiff - modules/misc/lua/meta.c
Do not store p_this in a table value visible from lua code.
[vlc] / modules / misc / lua / meta.c
index 23220ca2b7eab65a65c1cb556e2ddb9319632093..a56fd091d2f27cd63916d2de8463c8d347b0397e 100644 (file)
@@ -51,7 +51,7 @@
  *****************************************************************************/
 static const luaL_Reg p_reg[] = { { NULL, NULL } };
 
-static lua_State * init( vlc_object_t *p_this, input_item_t * p_item )
+static lua_State * init( vlc_object_t *p_this, input_item_t * p_item, const char *psz_filename )
 {
     lua_State * L = luaL_newstate();
     if( !L )
@@ -60,6 +60,8 @@ static lua_State * init( vlc_object_t *p_this, input_item_t * p_item )
         return NULL;
     }
 
+    vlclua_set_this( L, p_this );
+
     /* Load Lua libraries */
     luaL_openlibs( L ); /* XXX: Don't open all the libs? */
 
@@ -71,10 +73,17 @@ static lua_State * init( vlc_object_t *p_this, input_item_t * p_item )
     luaopen_variables( L );
     luaopen_object( L );
     luaopen_misc( L );
+    luaopen_xml( L );
+    luaopen_md5( L );
     luaopen_input_item( L, p_item );
 
-    lua_pushlightuserdata( L, p_this );
-    lua_setfield( L, -2, "private" );
+    if( vlclua_add_modules_path( p_this, L, psz_filename ) )
+    {
+        msg_Warn( p_this, "Error while setting the module search path for %s",
+                  psz_filename );
+        lua_close( L );
+        return NULL;
+    }
 
     return L;
 }
@@ -131,7 +140,9 @@ static int fetch_art( vlc_object_t *p_this, const char * psz_filename,
     input_item_t * p_item = user_data;
     int s;
 
-    lua_State *L = init( p_this, p_item );
+    lua_State *L = init( p_this, p_item, psz_filename );
+    if( !L )
+        return VLC_EGENERIC;
 
     int i_ret = run(p_this, psz_filename, L, "fetch_art");
     if(i_ret != VLC_SUCCESS)
@@ -178,7 +189,9 @@ static int read_meta( vlc_object_t *p_this, const char * psz_filename,
                       void * user_data )
 {
     input_item_t * p_item = user_data;
-    lua_State *L = init( p_this, p_item );
+    lua_State *L = init( p_this, p_item, psz_filename );
+    if( !L )
+        return VLC_EGENERIC;
 
     int i_ret = run(p_this, psz_filename, L, "read_meta");
     if(i_ret != VLC_SUCCESS)
@@ -201,7 +214,9 @@ static int fetch_meta( vlc_object_t *p_this, const char * psz_filename,
                        void * user_data )
 {
     input_item_t * p_item = user_data;
-    lua_State *L = init( p_this, p_item );
+    lua_State *L = init( p_this, p_item, psz_filename );
+    if( !L )
+        return VLC_EGENERIC;
 
     int ret = run(p_this, psz_filename, L, "fetch_meta");
     lua_close( L );
@@ -218,9 +233,8 @@ int ReadMeta( vlc_object_t *p_this )
     demux_meta_t *p_demux_meta = (demux_meta_t *)p_this;
     input_item_t *p_item = p_demux_meta->p_item;
 
-    int i_ret = vlclua_scripts_batch_execute( p_this, "meta/reader", &read_meta, p_item );
-
-    return i_ret;
+    return vlclua_scripts_batch_execute( p_this, "meta"DIR_SEP"reader",
+                                         &read_meta, p_item );
 }
 
 
@@ -233,9 +247,8 @@ int FetchMeta( vlc_object_t *p_this )
     demux_meta_t *p_demux_meta = (demux_meta_t *)p_this;
     input_item_t *p_item = p_demux_meta->p_item;
 
-    int i_ret = vlclua_scripts_batch_execute( p_this, "meta/fetcher", &fetch_meta, p_item );
-
-    return i_ret;
+    return vlclua_scripts_batch_execute( p_this, "meta"DIR_SEP"fetcher",
+                                         &fetch_meta, p_item );
 }
 
 
@@ -247,8 +260,7 @@ int FindArt( vlc_object_t *p_this )
     art_finder_t *p_finder = (art_finder_t *)p_this;
     input_item_t *p_item = p_finder->p_item;
 
-    int i_ret = vlclua_scripts_batch_execute( p_this, "meta/art", &fetch_art, p_item );
-
-    return i_ret;
+    return vlclua_scripts_batch_execute( p_this, "meta"DIR_SEP"art",
+                                         &fetch_art, p_item );
 }