From: Marek VavruĊĦa Date: Mon, 15 Jun 2015 08:34:57 +0000 (+0200) Subject: daemon/bindings: Lua 5.0/5.1 compat X-Git-Tag: v1.0.0-beta1~116^2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cec48f28f5b82d67acfe793d1df94f08602b1c81;p=thirdparty%2Fknot-resolver.git daemon/bindings: Lua 5.0/5.1 compat --- diff --git a/daemon/bindings.h b/daemon/bindings.h index f350088f5..c114b78da 100644 --- a/daemon/bindings.h +++ b/daemon/bindings.h @@ -25,16 +25,29 @@ #include "daemon/engine.h" - /** @internal Compatibility wrapper for Lua 5.0 - 5.2 */ - #if LUA_VERSION_NUM >= 502 - #define register_lib(L, name, lib) \ - luaL_newlib((L), (lib)) - #else - #define lua_rawlen(L, obj) \ - lua_objlen((L), (obj)) - #define register_lib(L, name, lib) \ - luaL_openlib((L), (name), (lib), 0) - #endif +/** @internal Compatibility wrapper for Lua 5.0 - 5.2 */ +#if LUA_VERSION_NUM >= 502 +#define register_lib(L, name, lib) \ + luaL_newlib((L), (lib)) +#else +#define lua_rawlen(L, obj) \ + lua_objlen((L), (obj)) +#define register_lib(L, name, lib) \ + luaL_openlib((L), (name), (lib), 0) +/* Adapted from Lua 5.2.0 */ +static inline void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) { + luaL_checkstack(L, nup+1, "too many upvalues"); + for (; l->name != NULL; l++) { /* fill the table with given functions */ + int i; + lua_pushstring(L, l->name); + for (i = 0; i < nup; i++) /* copy upvalues to the top */ + lua_pushvalue(L, -(nup+1)); + lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */ + lua_settable(L, -(nup + 3)); + } + lua_pop(L, nup); /* remove upvalues */ +} +#endif /** * Load 'modules' package.