X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flua.c;h=45b5b189839abc53dc22b9377d4f0b9ef695129b;hb=c4439c9cb3e2348ad7013644731de27a55eca478;hp=aeaeff2465fda0134ecfddf506cdf430fbf00196;hpb=d45f9cdfc084fc5e8783073b993d58b84deb5d58;p=collectd.git diff --git a/src/lua.c b/src/lua.c index aeaeff24..45b5b189 100644 --- a/src/lua.c +++ b/src/lua.c @@ -28,27 +28,18 @@ * Ruben Kerkhof **/ -/* defines a macro using "sprintf". Although not used here, - * GCC will complain about the macro definition. */ -#define DONT_POISON_SPRINTF_YET - -#include "common.h" -#include "plugin.h" #include "collectd.h" +#include "plugin.h" +#include "utils/common/common.h" +#include "utils_lua.h" /* Include the Lua API header files. */ #include #include #include -#include "utils_lua.h" #include -#if COLLECT_DEBUG && __GNUC__ -#undef sprintf -#pragma GCC poison sprintf -#endif - typedef struct lua_script_s { char *script_path; lua_State *lua_state; @@ -57,7 +48,7 @@ typedef struct lua_script_s { typedef struct { lua_State *lua_state; - const char *lua_function_name; + char *lua_function_name; pthread_mutex_t lock; int callback_id; } clua_callback_data_t; @@ -272,6 +263,12 @@ static int lua_cb_dispatch_values(lua_State *L) /* {{{ */ return 0; } /* }}} lua_cb_dispatch_values */ +static void lua_cb_free(void *data) { + clua_callback_data_t *cb = data; + free(cb->lua_function_name); + free(cb); +} + static int lua_cb_register_read(lua_State *L) /* {{{ */ { int nargs = lua_gettop(L); @@ -282,7 +279,7 @@ static int lua_cb_register_read(lua_State *L) /* {{{ */ luaL_checktype(L, 1, LUA_TFUNCTION); char function_name[DATA_MAX_NAME_LEN]; - ssnprintf(function_name, sizeof(function_name), "lua/%s", lua_tostring(L, 1)); + snprintf(function_name, sizeof(function_name), "lua/%s", lua_tostring(L, 1)); int callback_id = clua_store_callback(L, 1); if (callback_id < 0) @@ -303,12 +300,14 @@ static int lua_cb_register_read(lua_State *L) /* {{{ */ cb->lua_function_name = strdup(function_name); pthread_mutex_init(&cb->lock, NULL); - int status = plugin_register_complex_read(/* group = */ "lua", - /* name = */ function_name, - /* callback = */ clua_read, - /* interval = */ 0, &(user_data_t){ - .data = cb, - }); + int status = + plugin_register_complex_read(/* group = */ "lua", + /* name = */ function_name, + /* callback = */ clua_read, + /* interval = */ 0, + &(user_data_t){ + .data = cb, .free_func = lua_cb_free, + }); if (status != 0) return luaL_error(L, "%s", "plugin_register_complex_read failed"); @@ -325,7 +324,7 @@ static int lua_cb_register_write(lua_State *L) /* {{{ */ luaL_checktype(L, 1, LUA_TFUNCTION); char function_name[DATA_MAX_NAME_LEN] = ""; - ssnprintf(function_name, sizeof(function_name), "lua/%s", lua_tostring(L, 1)); + snprintf(function_name, sizeof(function_name), "lua/%s", lua_tostring(L, 1)); int callback_id = clua_store_callback(L, 1); if (callback_id < 0) @@ -346,11 +345,11 @@ static int lua_cb_register_write(lua_State *L) /* {{{ */ cb->lua_function_name = strdup(function_name); pthread_mutex_init(&cb->lock, NULL); - int status = - plugin_register_write(/* name = */ function_name, - /* callback = */ clua_write, &(user_data_t){ - .data = cb, - }); + int status = plugin_register_write(/* name = */ function_name, + /* callback = */ clua_write, + &(user_data_t){ + .data = cb, .free_func = lua_cb_free, + }); if (status != 0) return luaL_error(L, "%s", "plugin_register_write failed"); @@ -533,7 +532,7 @@ static int lua_config_script(const oconfig_item_t *ci) /* {{{ */ if (base_path[0] == '\0') sstrncpy(abs_path, rel_path, sizeof(abs_path)); else - ssnprintf(abs_path, sizeof(abs_path), "%s/%s", base_path, rel_path); + snprintf(abs_path, sizeof(abs_path), "%s/%s", base_path, rel_path); DEBUG("Lua plugin: abs_path = \"%s\";", abs_path);