diff options
author | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2013-09-25 12:31:31 +0100 |
---|---|---|
committer | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2013-09-25 12:31:31 +0100 |
commit | e26661245f2c9ff1bfcc8d3862ab2c1c56543717 (patch) | |
tree | 3d1cdb09eeb9bdcb9ed523a5cc811a4c6004edf7 | |
parent | 44c3d7e8cdef51b7e630d38015da9b571a07e526 (diff) | |
download | luxio-e26661245f2c9ff1bfcc8d3862ab2c1c56543717.tar.gz |
add syslog
-rw-r--r-- | luxio.c | 72 | ||||
-rw-r--r-- | luxio_constants.h.in | 31 |
2 files changed, 102 insertions, 1 deletions
@@ -40,6 +40,7 @@ #include <time.h> #include <limits.h> #include <signal.h> +#include <syslog.h> #ifdef HAVE_SENDFILE # include <sys/sendfile.h> @@ -3007,6 +3008,71 @@ luxio_strerror(lua_State *L) return 1; } +static char *luxio_openlog_ident = NULL; + +static int +luxio_openlog(lua_State *L) +{ + size_t len; + const char *ident = luaL_checklstring(L, 1, &len); + int option = luaL_checkint(L, 2); + int facility = luaL_checkint(L, 3); + + /* openlog doesn't make its own copy of ident + * and lua could garbage collect ident + * so take a copy of ident + */ + free(luxio_openlog_ident); + luxio_openlog_ident = malloc(len); + strncpy(luxio_openlog_ident, ident, len); + + openlog(ident, option, facility); + + return 0; +} + +static int +luxio_syslog(lua_State *L) +{ + int priority = luaL_checkint(L, 1); + const char *msg = luaL_checkstring(L, 2); + + syslog(priority, "%s", msg); + + return 0; +} + +static int +luxio_closelog(lua_State *L) +{ + free(luxio_openlog_ident); + closelog(); + + return 0; +} + +static int +luxio_setlogmask(lua_State *L) +{ + int mask = luaL_checkint(L, 1); + + int oldmask = setlogmask(mask); + lua_pushinteger(L, oldmask); + + return 1; +} + +static int +luxio_LOG_MASK(lua_State *L) +{ + int priority = luaL_checkint(L, 1); + + int mask = LOG_MASK(priority); + lua_pushinteger(L, mask); + + return 1; +} + static const struct luaL_Reg luxio_functions[] = { { "open", luxio_open }, @@ -3168,7 +3234,11 @@ luxio_functions[] = { { "mq_setattr", luxio_mq_setattr }, { "mq_getattr", luxio_mq_getattr }, #endif - + { "openlog", luxio_openlog }, + { "syslog", luxio_syslog }, + { "closelog", luxio_closelog }, + { "setlogmask", luxio_setlogmask }, + { "LOG_MASK", luxio_LOG_MASK }, { NULL, NULL } }; diff --git a/luxio_constants.h.in b/luxio_constants.h.in index b7edfef..07a4f03 100644 --- a/luxio_constants.h.in +++ b/luxio_constants.h.in @@ -274,6 +274,37 @@ static const struct { ? E(_POSIX_TIMER_MAX), ? E(_POSIX_TZNAME_MAX), + E(LOG_PID), + E(LOG_CONS), + E(LOG_NDELAY), + E(LOG_ODELAY), + E(LOG_NOWAIT), + E(LOG_KERN), + E(LOG_USER), + E(LOG_MAIL), + E(LOG_NEWS), + E(LOG_UUCP), + E(LOG_DAEMON), + E(LOG_AUTH), + E(LOG_CRON), + E(LOG_LPR), + E(LOG_LOCAL0), + E(LOG_LOCAL1), + E(LOG_LOCAL2), + E(LOG_LOCAL3), + E(LOG_LOCAL4), + E(LOG_LOCAL5), + E(LOG_LOCAL6), + E(LOG_LOCAL7), + E(LOG_EMERG), + E(LOG_ALERT), + E(LOG_CRIT), + E(LOG_ERR), + E(LOG_WARNING), + E(LOG_NOTICE), + E(LOG_INFO), + E(LOG_DEBUG), + E(EXIT_SUCCESS), E(EXIT_FAILURE), |