Commit fb43d327 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

lua: fix opening of scripts on Windows on non-ASCII path

Close #13752

(cherry picked from commit e105c631feec9c7a359002d1c44c8b919d55eb23)
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent d3135a1f
...@@ -835,15 +835,23 @@ int vlclua_add_modules_path( lua_State *L, const char *psz_filename ) ...@@ -835,15 +835,23 @@ int vlclua_add_modules_path( lua_State *L, const char *psz_filename )
} }
/** Replacement for luaL_dofile, using VLC's input capabilities */ /** Replacement for luaL_dofile, using VLC's input capabilities */
int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *uri ) int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *curi )
{ {
if( !strstr( uri, "://" ) ) char *uri = ToLocaleDup( curi );
return luaL_dofile( L, uri ); if( !strstr( uri, "://" ) ) {
if( !strncasecmp( uri, "file://", 7 ) ) int ret = luaL_dofile( L, uri );
return luaL_dofile( L, uri + 7 ); free( uri );
return ret;
}
if( !strncasecmp( uri, "file://", 7 ) ) {
int ret = luaL_dofile( L, uri + 7 );
free( uri );
return ret;
}
stream_t *s = stream_UrlNew( p_this, uri ); stream_t *s = stream_UrlNew( p_this, uri );
if( !s ) if( !s )
{ {
free( uri );
return 1; return 1;
} }
int64_t i_size = stream_Size( s ); int64_t i_size = stream_Size( s );
...@@ -852,6 +860,7 @@ int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *uri ) ...@@ -852,6 +860,7 @@ int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *uri )
{ {
// FIXME: read the whole stream until we reach the end (if no size) // FIXME: read the whole stream until we reach the end (if no size)
stream_Delete( s ); stream_Delete( s );
free( uri );
return 1; return 1;
} }
int64_t i_read = stream_Read( s, p_buffer, (int) i_size ); int64_t i_read = stream_Read( s, p_buffer, (int) i_size );
...@@ -862,5 +871,6 @@ int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *uri ) ...@@ -862,5 +871,6 @@ int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *uri )
i_ret = lua_pcall( L, 0, LUA_MULTRET, 0 ); i_ret = lua_pcall( L, 0, LUA_MULTRET, 0 );
stream_Delete( s ); stream_Delete( s );
free( p_buffer ); free( p_buffer );
free( uri );
return i_ret; return i_ret;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment