moonbridge
diff moonbridge_io.c @ 271:30629973dcff
Make moonbridge_io.signalsocket(...) accept strings as argument
author | jbe |
---|---|
date | Sun Jun 04 20:12:56 2017 +0200 (2017-06-04) |
parents | fab22173abc8 |
children | 8b8be1a66a98 |
line diff
1.1 --- a/moonbridge_io.c Sun Jun 04 19:53:34 2017 +0200 1.2 +++ b/moonbridge_io.c Sun Jun 04 20:12:56 2017 +0200 1.3 @@ -65,6 +65,7 @@ 1.4 #define MOONBR_IO_CHILD_MT_REGKEY "moonbridge_io_child" 1.5 #define MOONBR_IO_CHILD_PT_REGKEY "moonbridge_io_child_pt" 1.6 #define MOONBR_IO_SIGNALSOCKET_REGKEY "moonbridge_io_signalsocket" 1.7 +#define MOONBR_IO_SIGNALS_REGKEY "moonbridge_io_signals" 1.8 1.9 #ifdef MOONBR_IO_USE_TLS 1.10 1.11 @@ -1626,9 +1627,22 @@ 1.12 luaL_error(L, "Could not create socket pair for signal queueing"); 1.13 } 1.14 } 1.15 + lua_getfield(L, LUA_REGISTRYINDEX, MOONBR_IO_SIGNALS_REGKEY); 1.16 + lua_insert(L, 1); 1.17 argc = lua_gettop(L); 1.18 - for (i=1; i<=argc; i++) { 1.19 - sig = luaL_checkinteger(L, i); 1.20 + for (i=2; i<=argc; i++) { 1.21 + if (lua_type(L, i) == LUA_TSTRING) { 1.22 + lua_pushvalue(L, i); 1.23 + lua_gettable(L, 1); 1.24 + sig = lua_tointeger(L, -1); 1.25 + lua_pop(L, 1); 1.26 + if (!sig) { 1.27 + lua_pushvalue(L, i); 1.28 + luaL_error(L, "Unknown signal \"%s\"", lua_tostring(L, i)); 1.29 + } 1.30 + } else { 1.31 + sig = luaL_checkinteger(L, i); 1.32 + } 1.33 errno = 0; 1.34 signal(sig, moonbr_io_signalhandler); 1.35 if (errno) luaL_error(L, "Could not install signal handler (invalid signal number?)"); 1.36 @@ -2094,7 +2108,9 @@ 1.37 lua_pushinteger(L, SIGINFO); lua_setfield(L, -2, "INFO"); 1.38 lua_pushinteger(L, SIGUSR1); lua_setfield(L, -2, "USR1"); 1.39 lua_pushinteger(L, SIGUSR2); lua_setfield(L, -2, "USR2"); 1.40 - lua_setfield(L, -2, "signals"); 1.41 + lua_pushvalue(L, -1); 1.42 + lua_setfield(L, -3, "signals"); 1.43 + lua_setfield(L, LUA_REGISTRYINDEX, MOONBR_IO_SIGNALS_REGKEY); 1.44 1.45 luaL_setfuncs(L, moonbr_io_module_funcs, 0); 1.46 return 1;