diff options
Diffstat (limited to 'src/logging/logging.c')
-rw-r--r-- | src/logging/logging.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/logging/logging.c b/src/logging/logging.c index db4611a..0dcf47b 100644 --- a/src/logging/logging.c +++ b/src/logging/logging.c @@ -9,12 +9,37 @@ void honey_set_log_level(int level) _honey_log_level = level; } +int log_fatal(lua_State *L) +{ + //validate arguments + int count = lua_gettop(L); + if (count == 0) { + hs_throw_error(L, "no arguments provided"); + } + if (!lua_isstring(L, 1)) { + hs_throw_error(L, "first argument must be a string"); + } + lua_getglobal(L, "string"); + if (lua_isnil(L, -1)) hs_throw_error(L, "'string' table is nil!"); + lua_getfield(L, -1, "format"); //pushed string.format (function) to the lua stack + for (int i = 1; i <= count; i++) { + lua_pushvalue(L, i); + } + lua_call(L, count, 1); + const char *str = lua_tostring(L, -1); //getting result into a string + honey_log(HONEY_FATAL, "[FATAL] %s\n", str); + lua_pop(L, 2); //cleaned up stack + return 0; +} void honey_log(int level, const char *fmt, ...) { + if (level > _honey_log_level) return; - + va_list args; va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); } + + |