X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flua.c;h=2bd56a160cc2a9d098ba99397589f9524d077bfa;hb=419c41409a5c3ba5531008165dff12c6ef5cc819;hp=bbfcb2f81c1864812e0797564811702863383b02;hpb=023092323ca617c8ff95b1efd4a055c29b1aaa3b;p=collectd.git diff --git a/src/lua.c b/src/lua.c index bbfcb2f8..2bd56a16 100644 --- a/src/lua.c +++ b/src/lua.c @@ -32,15 +32,15 @@ * GCC will complain about the macro definition. */ #define DONT_POISON_SPRINTF_YET -#include "collectd.h" #include "common.h" #include "plugin.h" +#include "collectd.h" /* Include the Lua API header files. */ -#include "utils_lua.h" #include #include #include +#include "utils_lua.h" #include @@ -62,11 +62,6 @@ typedef struct { int callback_id; } clua_callback_data_t; -typedef struct { - const char *name; - lua_CFunction func; -} lua_c_function_t; - static char base_path[PATH_MAX]; static lua_script_t *scripts; @@ -260,6 +255,7 @@ static int lua_cb_dispatch_values(lua_State *L) /* {{{ */ if (vl == NULL) return luaL_error(L, "%s", "luaC_tovaluelist failed"); +#if COLLECT_DEBUG char identifier[6 * DATA_MAX_NAME_LEN]; FORMAT_VL(identifier, sizeof(identifier), vl); @@ -267,6 +263,7 @@ static int lua_cb_dispatch_values(lua_State *L) /* {{{ */ "time %.3f, interval %.3f.", identifier, CDTIME_T_TO_DOUBLE(vl->time), CDTIME_T_TO_DOUBLE(vl->interval)); +#endif plugin_dispatch_values(vl); @@ -306,15 +303,12 @@ static int lua_cb_register_read(lua_State *L) /* {{{ */ cb->lua_function_name = strdup(function_name); pthread_mutex_init(&cb->lock, NULL); - user_data_t ud = { - .data = cb - }; - int status = plugin_register_complex_read(/* group = */ "lua", /* name = */ function_name, /* callback = */ clua_read, - /* interval = */ 0, - /* user_data = */ &ud); + /* interval = */ 0, &(user_data_t){ + .data = cb, + }); if (status != 0) return luaL_error(L, "%s", "plugin_register_complex_read failed"); @@ -352,20 +346,18 @@ static int lua_cb_register_write(lua_State *L) /* {{{ */ cb->lua_function_name = strdup(function_name); pthread_mutex_init(&cb->lock, NULL); - user_data_t ud = { - .data = cb - }; - - int status = plugin_register_write(/* name = */ function_name, - /* callback = */ clua_write, - /* user_data = */ &ud); + int status = + plugin_register_write(/* name = */ function_name, + /* callback = */ clua_write, &(user_data_t){ + .data = cb, + }); if (status != 0) return luaL_error(L, "%s", "plugin_register_write failed"); return 0; } /* }}} int lua_cb_register_write */ -static lua_c_function_t lua_c_functions[] = { +static const luaL_Reg collectdlib[] = { {"log_debug", lua_cb_log_debug}, {"log_error", lua_cb_log_error}, {"log_info", lua_cb_log_info}, @@ -373,7 +365,18 @@ static lua_c_function_t lua_c_functions[] = { {"log_warning", lua_cb_log_warning}, {"dispatch_values", lua_cb_dispatch_values}, {"register_read", lua_cb_register_read}, - {"register_write", lua_cb_register_write}}; + {"register_write", lua_cb_register_write}, + {NULL, NULL}}; + +static int open_collectd(lua_State *L) /* {{{ */ +{ +#if LUA_VERSION_NUM < 502 + luaL_register(L, "collectd", collectdlib); +#else + luaL_newlib(L, collectdlib); +#endif + return 1; +} /* }}} */ static void lua_script_free(lua_script_t *script) /* {{{ */ { @@ -407,13 +410,15 @@ static int lua_script_init(lua_script_t *script) /* {{{ */ /* Open up all the standard Lua libraries. */ luaL_openlibs(script->lua_state); - /* Register all the functions we implement in C */ - lua_newtable(script->lua_state); - for (size_t i = 0; i < STATIC_ARRAY_SIZE(lua_c_functions); i++) { - lua_pushcfunction(script->lua_state, lua_c_functions[i].func); - lua_setfield(script->lua_state, -2, lua_c_functions[i].name); - } - lua_setglobal(script->lua_state, "collectd"); +/* Load the 'collectd' library */ +#if LUA_VERSION_NUM < 502 + lua_pushcfunction(script->lua_state, open_collectd); + lua_pushstring(script->lua_state, "collectd"); + lua_call(script->lua_state, 1, 0); +#else + luaL_requiref(script->lua_state, "collectd", open_collectd, 1); + lua_pop(script->lua_state, 1); +#endif /* Prepend BasePath to package.path */ if (base_path[0] != '\0') { @@ -536,7 +541,7 @@ static int lua_config_script(const oconfig_item_t *ci) /* {{{ */ if (status != 0) return (status); - INFO("Lua plugin: File \"%s\" loaded succesfully", abs_path); + INFO("Lua plugin: File \"%s\" loaded successfully", abs_path); return 0; } /* }}} int lua_config_script */ @@ -574,7 +579,7 @@ static int lua_shutdown(void) /* {{{ */ return (0); } /* }}} int lua_shutdown */ -void module_register() { +void module_register(void) { plugin_register_complex_config("lua", lua_config); plugin_register_shutdown("lua", lua_shutdown); }