Como remover funções específicas da biblioteca os sem editar os cabeçalhos Lua ou os scripts
Fiz minha lição de casa e estudei outras respostas sobre esse assunto, mas nenhuma abordou minha questão específica.
Eu quero remover a biblioteca do io completamente e o os apenas parcialmente (digamos que eu queira manter os.clock () e outros)
Como posso conseguir isso somente a partir da API C?
Devido à natureza do projeto, não tenho permissão para modificar os cabeçalhos Lua e os scripts que serão enviados para mim. Estes não estão sob meu controle. A única coisa que posso modificar é o intérprete.
fazendo algo assim:
<code>lua_pushnil(state_pointer); lua_setglobal(state_pointer, "os.execute"); </code>
não vai ajudar muito porque no script o usuário pode chamar os = require ('os') e recuperar todas as funções
Eu não tenho permissão para desabilitar a função require, então isso torna as coisas mais difíceis.
Alguma ideia?
PS: Mais uma curiosidade: se eu fizer algo como
<code>luaopen_base(L); luaopen_table(L); luaopen_string(L); luaopen_math(L); luaopen_loadlib(L); (basically i'm loading every library by hand except os and io) </code>
ao invés de
<code>luaL_openlibs(L); (this loads all the libraries) </code>
would os = require ('os') ou io = require ('io') ainda funcionam?
@Nicol Bolas não sabe se estou fazendo algo errado, mas os = require ('os') & require ('io') simplesmente traz tudo de volta.
meu código:
<code>luaL_openlibs(LuaInstance); /* load the libs */ lua_pushnil(LuaInstance); lua_setglobal(LuaInstance, "io"); lua_pushnil(LuaInstance); lua_setglobal(LuaInstance, "os.execute"); lua_pushnil(LuaInstance); lua_setglobal(LuaInstance, "os.rename"); lua_pushnil(LuaInstance); lua_setglobal(LuaInstance, "os.remove"); lua_pushnil(LuaInstance); lua_setglobal(LuaInstance, "os.exit"); </code>
No meu roteiro eu apenas faço um
<code>os = require('os') io = require('io') </code>
após este as funções e funções io todo o trabalho. os.exit ainda fecha meu aplicativo e o io.write funciona normalmente