diff options
author | Christian Pointner <equinox@spreadspace.org> | 2010-11-22 21:59:04 +0000 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2010-11-22 21:59:04 +0000 |
commit | 5313acceec873a11d44aaa23523e10bbf1e18108 (patch) | |
tree | 646b94b55e17c5489ed874aead83f1b183750f82 | |
parent | added kill to util (diff) |
kill now supports numbers and not only strings
git-svn-id: https://svn.spreadspace.org/gcsd/trunk@54 ac14a137-c7f1-4531-abe0-07747231d213
-rw-r--r-- | src/l_util.c | 81 |
1 files changed, 45 insertions, 36 deletions
diff --git a/src/l_util.c b/src/l_util.c index 5321f91..9b87beb 100644 --- a/src/l_util.c +++ b/src/l_util.c @@ -462,44 +462,53 @@ static int l_util_pipe(lua_State *L) static int l_util_kill(lua_State *L) { int pid = luaL_checkint(L, 1); - const char* signame = luaL_optstring(L, 2, "term"); int sig = SIGTERM; - if(!strcasecmp(signame, "HUP")) sig = SIGHUP; - else if(!strcasecmp(signame, "INT")) sig = SIGINT; - else if(!strcasecmp(signame, "QUIT")) sig = SIGQUIT; - else if(!strcasecmp(signame, "ILL")) sig = SIGILL; - else if(!strcasecmp(signame, "TRAP")) sig = SIGTRAP; - else if(!strcasecmp(signame, "ABRT")) sig = SIGABRT; - else if(!strcasecmp(signame, "IOT")) sig = SIGIOT; - else if(!strcasecmp(signame, "BUS")) sig = SIGBUS; - else if(!strcasecmp(signame, "FPE")) sig = SIGFPE; - else if(!strcasecmp(signame, "KILL")) sig = SIGKILL; - else if(!strcasecmp(signame, "USR1")) sig = SIGUSR1; - else if(!strcasecmp(signame, "SEGV")) sig = SIGSEGV; - else if(!strcasecmp(signame, "USR2")) sig = SIGUSR2; - else if(!strcasecmp(signame, "PIPE")) sig = SIGPIPE; - else if(!strcasecmp(signame, "ALRM")) sig = SIGALRM; - else if(!strcasecmp(signame, "TERM")) sig = SIGTERM; - else if(!strcasecmp(signame, "STKFLT")) sig = SIGSTKFLT; - else if(!strcasecmp(signame, "CLD")) sig = SIGCLD; - else if(!strcasecmp(signame, "CHLD")) sig = SIGCHLD; - else if(!strcasecmp(signame, "CONT")) sig = SIGCONT; - else if(!strcasecmp(signame, "STOP")) sig = SIGSTOP; - else if(!strcasecmp(signame, "TSTP")) sig = SIGTSTP; - else if(!strcasecmp(signame, "TTIN")) sig = SIGTTIN; - else if(!strcasecmp(signame, "TTOU")) sig = SIGTTOU; - else if(!strcasecmp(signame, "URG")) sig = SIGURG; - else if(!strcasecmp(signame, "XCPU")) sig = SIGXCPU; - else if(!strcasecmp(signame, "XFSZ")) sig = SIGXFSZ; - else if(!strcasecmp(signame, "VTALRM")) sig = SIGVTALRM; - else if(!strcasecmp(signame, "PROF")) sig = SIGPROF; - else if(!strcasecmp(signame, "WINCH")) sig = SIGWINCH; - else if(!strcasecmp(signame, "POLL")) sig = SIGPOLL; - else if(!strcasecmp(signame, "IO")) sig = SIGIO; - else if(!strcasecmp(signame, "PWR")) sig = SIGPWR; - else if(!strcasecmp(signame, "SYS")) sig = SIGSYS; - else if(!strcasecmp(signame, "UNUSED")) sig = SIGUNUSED; + if(lua_isnumber(L, 2)) { + sig = luaL_checkint(L, 2); + } else { + const char* signame = luaL_optstring(L, 2, "TERM"); + if(!strcasecmp(signame, "HUP")) sig = SIGHUP; + else if(!strcasecmp(signame, "INT")) sig = SIGINT; + else if(!strcasecmp(signame, "QUIT")) sig = SIGQUIT; + else if(!strcasecmp(signame, "ILL")) sig = SIGILL; + else if(!strcasecmp(signame, "TRAP")) sig = SIGTRAP; + else if(!strcasecmp(signame, "ABRT")) sig = SIGABRT; + else if(!strcasecmp(signame, "IOT")) sig = SIGIOT; + else if(!strcasecmp(signame, "BUS")) sig = SIGBUS; + else if(!strcasecmp(signame, "FPE")) sig = SIGFPE; + else if(!strcasecmp(signame, "KILL")) sig = SIGKILL; + else if(!strcasecmp(signame, "USR1")) sig = SIGUSR1; + else if(!strcasecmp(signame, "SEGV")) sig = SIGSEGV; + else if(!strcasecmp(signame, "USR2")) sig = SIGUSR2; + else if(!strcasecmp(signame, "PIPE")) sig = SIGPIPE; + else if(!strcasecmp(signame, "ALRM")) sig = SIGALRM; + else if(!strcasecmp(signame, "TERM")) sig = SIGTERM; + else if(!strcasecmp(signame, "STKFLT")) sig = SIGSTKFLT; + else if(!strcasecmp(signame, "CLD")) sig = SIGCLD; + else if(!strcasecmp(signame, "CHLD")) sig = SIGCHLD; + else if(!strcasecmp(signame, "CONT")) sig = SIGCONT; + else if(!strcasecmp(signame, "STOP")) sig = SIGSTOP; + else if(!strcasecmp(signame, "TSTP")) sig = SIGTSTP; + else if(!strcasecmp(signame, "TTIN")) sig = SIGTTIN; + else if(!strcasecmp(signame, "TTOU")) sig = SIGTTOU; + else if(!strcasecmp(signame, "URG")) sig = SIGURG; + else if(!strcasecmp(signame, "XCPU")) sig = SIGXCPU; + else if(!strcasecmp(signame, "XFSZ")) sig = SIGXFSZ; + else if(!strcasecmp(signame, "VTALRM")) sig = SIGVTALRM; + else if(!strcasecmp(signame, "PROF")) sig = SIGPROF; + else if(!strcasecmp(signame, "WINCH")) sig = SIGWINCH; + else if(!strcasecmp(signame, "POLL")) sig = SIGPOLL; + else if(!strcasecmp(signame, "IO")) sig = SIGIO; + else if(!strcasecmp(signame, "PWR")) sig = SIGPWR; + else if(!strcasecmp(signame, "SYS")) sig = SIGSYS; + else if(!strcasecmp(signame, "UNUSED")) sig = SIGUNUSED; + else { + lua_pushnil(L); + lua_pushliteral(L, "unknown signal"); + return 2; + } + } if(kill(pid, sig) == -1) { lua_pushnil(L); |