aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2007-10-09 00:41:49 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2007-10-09 00:41:49 -0500
commitb7622621b6a9a2e03c14b3e0c5986f7bc29d1dae (patch)
tree53c0ce004a9dd71cd5891ee735e87a9321cd1d59
parentce421bc17ce852f6a6f3951d3594d47047db07ca (diff)
downloadluasignal-b7622621b6a9a2e03c14b3e0c5986f7bc29d1dae.tar.gz
luasignal-b7622621b6a9a2e03c14b3e0c5986f7bc29d1dae.zip
implement kill() and raise()
-rw-r--r--src/signal.c47
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 },