THRIFT-4386 Add Lua 5.3/5.4 support
Clint: lua
Patch: Thomas Bruggink
This closes #3012
diff --git a/lib/lua/src/luabpack.c b/lib/lua/src/luabpack.c
index 077b6aa..cdfb72a 100644
--- a/lib/lua/src/luabpack.c
+++ b/lib/lua/src/luabpack.c
@@ -45,6 +45,7 @@
* c - Signed Byte
* s - Signed Short
* i - Signed Int
+ * I - Unsigned Int
* l - Signed Long
* d - Double
*/
@@ -72,6 +73,12 @@
luaL_addlstring(&buf, (void*)&data, sizeof(data));
break;
}
+ case 'I': {
+ uint32_t data = luaL_checkinteger(L, 2);
+ data = (uint32_t)htonl(data);
+ luaL_addlstring(&buf, (void*)&data, sizeof(data));
+ break;
+ }
case 'l': {
int64_t data = lualongnumber_checklong(L, 2);
data = (int64_t)T_htonll(data);
@@ -97,6 +104,7 @@
* C - Unsigned Byte
* s - Signed Short
* i - Signed Int
+ * I - Unsigned Int
* l - Signed Long
* d - Double
*/
@@ -144,6 +152,17 @@
lua_pushnumber(L, val);
break;
}
+ /**
+ * unpack unsigned Int.
+ */
+ case 'I': {
+ uint32_t val;
+ luaL_argcheck(L, len == sizeof(val), 1, "Invalid input string size.");
+ memcpy(&val, data, sizeof(val));
+ val = (uint32_t)ntohl(val);
+ lua_pushnumber(L, val);
+ break;
+ }
case 'l': {
int64_t val;
luaL_argcheck(L, len == sizeof(val), 1, "Invalid input string size.");
@@ -303,6 +322,11 @@
};
int luaopen_libluabpack(lua_State *L) {
+#if LUA_VERSION_NUM >= 502
+ lua_newtable(L);
+ luaL_setfuncs(L, lua_bpack, 0);
+#else
luaL_register(L, "libluabpack", lua_bpack);
+#endif
return 1;
}