diff options
| author | Mikhail Burakov <mburakov@mailbox.org> | 2021-10-30 17:19:09 +0200 |
|---|---|---|
| committer | Mikhail Burakov <mburakov@mailbox.org> | 2021-10-30 17:19:09 +0200 |
| commit | 2cf64544d9f300119aa50fd77e5f03a5a0d38ccb (patch) | |
| tree | 637d92c9be1e8cc75dfe69ee1ed4a04c8bcbfb80 | |
| parent | e9e08557c07eeb98b3c1b07042ee54d0de362974 (diff) | |
Pass context userdata as string to fix AArch64
| -rw-r--r-- | main.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -258,7 +258,13 @@ static void SourceCurrentDir(lua_State* lua_state) { static int LuaSubscribe(lua_State* lua_state) { // TODO(mburakov): Handle lua errors. +#if 0 + // mburakov: Userdata is broken on AArch64 struct Context* context = lua_touserdata(lua_state, lua_upvalueindex(1)); +#else + const void* ctx = lua_tolstring(lua_state, lua_upvalueindex(1), NULL); + struct Context* context = *(void* const*)ctx; +#endif const char* topic = lua_tolstring(lua_state, -2, NULL); struct Message* message = GetMessage(&context->messages, topic); if (!message) { @@ -271,7 +277,13 @@ static int LuaSubscribe(lua_State* lua_state) { static int LuaPublish(lua_State* lua_state) { // TODO(mburakov): Handle lua errors. +#if 0 + // mburakov: Userdata is broken on AArch64 struct Context* context = lua_touserdata(lua_state, lua_upvalueindex(1)); +#else + const void* ctx = lua_tolstring(lua_state, lua_upvalueindex(1), NULL); + struct Context* context = *(void* const*)ctx; +#endif char* buffer = context->buffer; size_t topic_size, payload_size; const char* topic = lua_tolstring(lua_state, -2, &topic_size); @@ -340,10 +352,21 @@ int main(int argc, char* argv[]) { } luaL_openlibs(context.lua_state); // TODO(mburakov): Handle lua errors. +#if 0 + // mburakov: Userdata is broken on AArch64 lua_pushlightuserdata(context.lua_state, &context); +#else + void* ctx = &context; + lua_pushlstring(context.lua_state, (const char*)&ctx, sizeof(void*)); +#endif lua_pushcclosure(context.lua_state, LuaSubscribe, 1); lua_setglobal(context.lua_state, "subscribe"); +#if 0 + // mburakov: Userdata is broken on AArch64 lua_pushlightuserdata(context.lua_state, &context); +#else + lua_pushlstring(context.lua_state, (const char*)&ctx, sizeof(void*)); +#endif lua_pushcclosure(context.lua_state, LuaPublish, 1); lua_setglobal(context.lua_state, "publish"); SourceCurrentDir(context.lua_state); |
