/* * gcsd * * gcsd the generic command sequencer daemon can be used to serialize * commands sent over various paralell communication channels to a * single command output. It can be seen as a multiplexer for any * kind of communication between a single resource and various clients * which want to submit commands to it or query information from it. * gcsd is written in C and Lua. The goal is to provide an easy to * understand high level API based on Lua which can be used to * implement the business logic of the so formed multiplexer daemon. * * * Copyright (C) 2009-2010 Markus Grueneis * Christian Pointner * * This file is part of gcsd. * * gcsd is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * gcsd is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with gcsd. If not, see . */ #include #include #include "sig_handler.h" #include "l_sig_handler.h" static int l_signal_init(lua_State *L) { int sig_fd = signal_init(); if(sig_fd < 0) luaL_error(L, "error at signal init"); lua_newtable(L); lua_pushliteral(L, "fd"); lua_pushinteger(L, sig_fd); lua_settable(L, -3); return 1; } static int l_signal_stop(lua_State *L) { signal_stop(); return 0; } static int l_signal_handle(lua_State *L) { int ret = signal_handle(); lua_pushinteger(L, ret); return 1; } static const struct luaL_Reg signal_funcs [] = { { "init", l_signal_init }, { "stop", l_signal_stop }, { "handle", l_signal_handle }, { NULL, NULL } }; LUALIB_API int luaopen_signal(lua_State *L) { #if LUA_VERSION_NUM > 501 lua_newtable(L); luaL_setfuncs(L, signal_funcs, 0); lua_pushvalue(L, -1); lua_setglobal(L, LUA_SIGNALLIBNAME); #else luaL_register(L, LUA_SIGNALLIBNAME, signal_funcs); #endif return 1; }