Информация об изменениях

Сообщение Re: Собственный встраиваемый скриптинг от 17.08.2015 11:49

Изменено 17.08.2015 11:51 Хреннос

Здравствуйте, v_andal, Вы писали:

_>Lua и иже с ним не пошёл так как нужно было для разных пользователей разную функциональность, а стандартные функции Lua не так уж просто из него убрать.

Нет ничего проще, чем убрать из Луа стандартные функции. Просто не подключайте соответствующую библиотеку и всего делов:

    L = luaL_newstate();
    luaL_requiref( L_, "_G", luaopen_base, 1 );
    lua_pop( L, 1 );
    luaL_requiref( L_, "math", luaopen_math, 1 );
    lua_pop( L, 1 );
    luaL_requiref( L_, "string", luaopen_string, 1 );
    lua_pop( L, 1 );
    luaL_requiref( L_, "table", luaopen_table, 1 );
    lua_pop( L, 1 );
    luaL_requiref( L_, "os", luaopen_os, 1 );
    lua_pop( L, 1 );
    luaL_requiref( L_, "utf8", luaopen_utf8, 1 );
    lua_pop( L, 1 );
    ... и т. д.


Если же нужно отключить функции индивидуально, а не библиотеками, то достаточно после создания стейта загрузить и выполнить в нем что-нибудь типа такого:

    print = nil
    load = nil
    io.open = nil
    ... и т. п.
Re: Собственный встраиваемый скриптинг
Здравствуйте, v_andal, Вы писали:

_>Lua и иже с ним не пошёл так как нужно было для разных пользователей разную функциональность, а стандартные функции Lua не так уж просто из него убрать.

Нет ничего проще, чем убрать из Луа стандартные функции. Просто не подключайте соответствующую библиотеку и всего делов:

    L = luaL_newstate();
    luaL_requiref( L, "_G", luaopen_base, 1 ); // или не подключаем
    lua_pop( L, 1 );
    luaL_requiref( L, "math", luaopen_math, 1 ); // или не подключаем
    lua_pop( L, 1 );
    luaL_requiref( L, "string", luaopen_string, 1 ); // или не подключаем
    lua_pop( L, 1 );
    luaL_requiref( L, "table", luaopen_table, 1 ); // или не подключаем
    lua_pop( L, 1 );
    luaL_requiref( L, "os", luaopen_os, 1 ); // или не подключаем
    lua_pop( L, 1 );
    luaL_requiref( L, "utf8", luaopen_utf8, 1 ); // или не подключаем
    lua_pop( L, 1 );
    ... и т. д. для debug, io, etc.


Если же нужно отключить функции индивидуально, а не библиотеками, то достаточно после создания стейта загрузить и выполнить в нем что-нибудь типа такого:

    print = nil
    load = nil
    io.open = nil
    ... и т. п.