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:
lua_pushnil(state_pointer);
lua_setglobal(state_pointer, "os.execute");
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
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)
ao invés de
luaL_openlibs(L); (this loads all the libraries)
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:
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");
No meu roteiro eu apenas faço um
os = require('os')
io = require('io')
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