X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Flua%2Flibs%2Fmisc.c;h=4460e12e6b01b77e76763cf390c528f9dceb1ec7;hb=f782f86eb4b103a7fc7c7c9454dc838e9e2438f0;hp=7aab9ec9d223921843ac8fc965a9adc3ac6e7491;hpb=2e68572406c4655a868bbe6bfb559a7997f8f436;p=vlc diff --git a/modules/misc/lua/libs/misc.c b/modules/misc/lua/libs/misc.c index 7aab9ec9d2..4460e12e6b 100644 --- a/modules/misc/lua/libs/misc.c +++ b/modules/misc/lua/libs/misc.c @@ -36,9 +36,9 @@ #include #include #include -#include #include #include +#include #include /* Low level lua C API */ #include /* Higher level C API */ @@ -50,13 +50,19 @@ /***************************************************************************** * Internal lua<->vlc utils *****************************************************************************/ +void __vlclua_set_this( lua_State *L, vlc_object_t *p_this ) +{ + lua_pushlightuserdata( L, __vlclua_set_this ); + lua_pushlightuserdata( L, p_this ); + lua_rawset( L, LUA_REGISTRYINDEX ); +} + vlc_object_t * vlclua_get_this( lua_State *L ) { - vlc_object_t * p_this; - lua_getglobal( L, "vlc" ); - lua_getfield( L, -1, "private" ); - p_this = (vlc_object_t*)lua_topointer( L, lua_gettop( L ) ); - lua_pop( L, 2 ); + lua_pushlightuserdata( L, __vlclua_set_this ); + lua_rawget( L, LUA_REGISTRYINDEX ); + vlc_object_t *p_this = (vlc_object_t*)lua_topointer( L, -1 ); + lua_pop( L, 1 ); return p_this; } @@ -84,7 +90,7 @@ static int vlclua_version( lua_State *L ) *****************************************************************************/ static int vlclua_copyright( lua_State *L ) { - lua_pushstring( L, COPYRIGHT_MESSAGE ); + lua_pushliteral( L, COPYRIGHT_MESSAGE ); return 1; } @@ -114,25 +120,31 @@ static int vlclua_quit( lua_State *L ) *****************************************************************************/ static int vlclua_datadir( lua_State *L ) { - lua_pushstring( L, config_GetDataDir() ); + char *psz_data = config_GetDataDir( vlclua_get_this( L ) ); + lua_pushstring( L, psz_data ); + free( psz_data ); return 1; } static int vlclua_userdatadir( lua_State *L ) { - lua_pushstring( L, config_GetUserDataDir() ); + char *dir = config_GetUserDir( VLC_DATA_DIR ); + lua_pushstring( L, dir ); + free( dir ); return 1; } static int vlclua_homedir( lua_State *L ) { - lua_pushstring( L, config_GetHomeDir() ); + char *home = config_GetUserDir( VLC_HOME_DIR ); + lua_pushstring( L, home ); + free( home ); return 1; } static int vlclua_configdir( lua_State *L ) { - char *dir = config_GetUserConfDir(); + char *dir = config_GetUserDir( VLC_CONFIG_DIR ); lua_pushstring( L, dir ); free( dir ); return 1; @@ -140,7 +152,7 @@ static int vlclua_configdir( lua_State *L ) static int vlclua_cachedir( lua_State *L ) { - char *dir = config_GetCacheDir(); + char *dir = config_GetUserDir( VLC_CACHE_DIR ); lua_pushstring( L, dir ); free( dir ); return 1; @@ -149,11 +161,12 @@ static int vlclua_cachedir( lua_State *L ) static int vlclua_datadir_list( lua_State *L ) { const char *psz_dirname = luaL_checkstring( L, 1 ); - char *ppsz_dir_list[] = { NULL, NULL, NULL, NULL }; + char **ppsz_dir_list = NULL; char **ppsz_dir = ppsz_dir_list; int i = 1; - if( vlclua_dir_list( psz_dirname, ppsz_dir_list ) != VLC_SUCCESS ) + if( vlclua_dir_list( vlclua_get_this( L ), psz_dirname, &ppsz_dir_list ) + != VLC_SUCCESS ) return 0; lua_newtable( L ); for( ; *ppsz_dir; ppsz_dir++ ) @@ -174,9 +187,10 @@ static int vlclua_lock_and_wait( lua_State *L ) intf_sys_t *p_sys = p_intf->p_sys; vlc_mutex_lock( &p_sys->lock ); + mutex_cleanup_push( &p_sys->lock ); while( !p_sys->exiting ) vlc_cond_wait( &p_sys->wait, &p_sys->lock ); - vlc_mutex_unlock( &p_sys->lock ); + vlc_cleanup_run(); lua_pushboolean( L, 1 ); return 1; } @@ -201,6 +215,15 @@ static int vlclua_intf_should_die( lua_State *L ) return 1; } +static int vlclua_action_id( lua_State *L ) +{ + vlc_key_t i_key = vlc_GetActionId( luaL_checkstring( L, 1 ) ); + if (i_key == 0) + return 0; + lua_pushnumber( L, i_key ); + return 1; +} + /***************************************************************************** * *****************************************************************************/ @@ -216,6 +239,8 @@ static const luaL_Reg vlclua_misc_reg[] = { { "cachedir", vlclua_cachedir }, { "datadir_list", vlclua_datadir_list }, + { "action_id", vlclua_action_id }, + { "mdate", vlclua_mdate }, { "mwait", vlclua_mwait },