diff options
author | jluehrs2 <jluehrs2@uiuc.edu> | 2007-10-09 00:41:49 -0500 |
---|---|---|
committer | jluehrs2 <jluehrs2@uiuc.edu> | 2007-10-09 00:41:49 -0500 |
commit | b7622621b6a9a2e03c14b3e0c5986f7bc29d1dae (patch) | |
tree | 53c0ce004a9dd71cd5891ee735e87a9321cd1d59 /src/signal.c | |
parent | ce421bc17ce852f6a6f3951d3594d47047db07ca (diff) | |
download | luasignal-b7622621b6a9a2e03c14b3e0c5986f7bc29d1dae.tar.gz luasignal-b7622621b6a9a2e03c14b3e0c5986f7bc29d1dae.zip |
implement kill() and raise()
Diffstat (limited to 'src/signal.c')
-rw-r--r-- | src/signal.c | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/src/signal.c b/src/signal.c index a52c4b4..d661ec2 100644 --- a/src/signal.c +++ b/src/signal.c @@ -126,11 +126,54 @@ static int l_alarm(lua_State* L) return 1; } +static int l_kill(lua_State* L) +{ + const char* signame; + int pid, sig; + + pid = luaL_checkint(L, -1); + signame = luaL_checklstring(L, -2, NULL); + if ((sig = name_to_sig(signame)) == -1) { + if (strcmp(signame, "test") == 0) { + sig = 0; + } + else { + lua_pushstring(L, "kill(): invalid signal name"); + lua_error(L); + } + } + + lua_pushinteger(L, kill(pid, sig)); + + return 1; +} + +static int l_raise(lua_State* L) +{ + const char* signame; + int sig; + + signame = luaL_checklstring(L, -1, NULL); + if ((sig = name_to_sig(signame)) == -1) { + if (strcmp(signame, "test") == 0) { + sig = 0; + } + else { + lua_pushstring(L, "raise(): invalid signal name"); + lua_error(L); + } + } + + lua_pushinteger(L, raise(sig)); + + return 1; +} + const luaL_Reg reg[] = { { "signal", l_signal }, { "alarm", l_alarm }, - /*{ "kill", l_kill },*/ - /*{ "raise", l_raise },*/ + { "kill", l_kill }, + { "raise", l_raise }, /*{ "suspend", l_suspend },*/ /*{ "block", l_block },*/ { NULL, NULL }, |