luaa: replace os.execute()

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2009-08-27 12:08:02 +02:00
parent d31b7666a1
commit a6c4459a3a
1 changed files with 17 additions and 0 deletions

17
luaa.c
View File

@ -236,6 +236,18 @@ luaAe_type(lua_State *L)
return 1; return 1;
} }
/** Modified version of os.execute() which use spawn code to reset signal
* handlers correctly before exec()ing the new program.
* \param L The Lua VM state.
* \return The number of arguments pushed on stack.
*/
static int
luaAe_os_execute(lua_State *L)
{
lua_pushinteger(L, spawn_system(luaL_optstring(L, 1, NULL)));
return 1;
}
/** Replace various standards Lua functions with our own. /** Replace various standards Lua functions with our own.
* \param L The Lua VM state. * \param L The Lua VM state.
*/ */
@ -247,6 +259,11 @@ luaA_fixups(lua_State *L)
lua_pushcfunction(L, luaA_mbstrlen); lua_pushcfunction(L, luaA_mbstrlen);
lua_setfield(L, -2, "wlen"); lua_setfield(L, -2, "wlen");
lua_pop(L, 1); lua_pop(L, 1);
/* replace os.execute */
lua_getglobal(L, "os");
lua_pushcfunction(L, luaAe_os_execute);
lua_setfield(L, -2, "execute");
lua_pop(L, 1);
/* replace next */ /* replace next */
lua_pushliteral(L, "next"); lua_pushliteral(L, "next");
lua_pushcfunction(L, luaAe_next); lua_pushcfunction(L, luaAe_next);