Jak usunąć określone funkcje z biblioteki os bez edytowania nagłówków Lua lub skryptów

Zrobiłem pracę domową i przestudiowałem inne odpowiedzi na ten temat, ale żaden nie odnosi się do mojego konkretnego problemu.

Chcę całkowicie usunąć bibliotekę io i tylko częściowo (powiedzmy, że chcę zachować os.clock () i inne)

Jak mogę to osiągnąć tylko z C API.

Ze względu na charakter projektu nie mogę modyfikować nagłówków Lua i skryptów, które zostaną do mnie wysłane. Nie są pod moją kontrolą. Jedyne, co mogę modyfikować, to tłumacz.

robię coś takiego:

<code>lua_pushnil(state_pointer);
lua_setglobal(state_pointer, "os.execute");
</code>

niewiele pomoże, ponieważ w skrypcie użytkownik może wywołać os = require ('os') i odzyskać wszystkie funkcje

Nie wolno mi wyłączać funkcji żądania, co utrudnia sprawę.

Jakieś pomysły?

PS: Więcej ciekawości: jeśli zrobię coś takiego

<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>

zamiast

<code>luaL_openlibs(L); (this loads all the libraries)
</code>

czy os = require ('os') lub io = require ('io') nadal działa?

@Nicol Bolas nie wie, czy robię coś złego, ale os = require ('os') i require ('io') po prostu przywraca wszystko.

mój kod:

<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>

W moim skrypcie po prostu robię

<code>os = require('os')
io = require('io')
</code>

po tym wszystkie funkcje os i io działają. os.exit nadal zamyka moją aplikację, a io.write działa jak zwykle

questionAnswers(2)

yourAnswerToTheQuestion