summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2010-11-22 21:59:04 +0000
committerChristian Pointner <equinox@spreadspace.org>2010-11-22 21:59:04 +0000
commit5313acceec873a11d44aaa23523e10bbf1e18108 (patch)
tree646b94b55e17c5489ed874aead83f1b183750f82
parentadded 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.c81
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);