diff --git a/src/lua.c b/src/lua.c
index bbfcb2f81c1864812e0797564811702863383b02..351b8c685fefdfe03f475ec3b40e7b36889fd871 100644 (file)
--- a/src/lua.c
+++ b/src/lua.c
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;
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);
"time %.3f, interval %.3f.",
identifier, CDTIME_T_TO_DOUBLE(vl->time),
CDTIME_T_TO_DOUBLE(vl->interval));
+#endif
plugin_dispatch_values(vl);
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},
{"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) /* {{{ */
{
/* 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') {
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 */
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);
}