diff options
author | stefonzo <stevester.robinson@gmail.com> | 2022-07-10 20:01:24 -0500 |
---|---|---|
committer | stefonzo <stevester.robinson@gmail.com> | 2022-07-10 20:01:24 -0500 |
commit | 261e3f991221fbad6bbf262f5e65b773e4b6c73e (patch) | |
tree | b8b8745d9c5a3aa7775a1d12ed2293f30a18bafe /src/logging/logging.c | |
parent | de97d73a33ee3c1e2fe325b0cff90f079519bb36 (diff) |
adds honey binding for honey.log.fatal
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 255da4c..371066e 100644 --- a/src/logging/logging.c +++ b/src/logging/logging.c @@ -8,12 +8,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); } + + |