From 30db8863e3f92abb43f77dde892634c5d1f0e838 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Wed, 1 Nov 2023 20:24:06 +0100 Subject: [PATCH] Fix module initialization The way C modules are initialized was affected by one of the major breaking changes between 5.x versions. Rather than trying to cater to each version individually, we now just backport from newer versions. Namely from 5.2 to 5.1. --- src/lua_libpulse_glib/callback.h | 7 +----- src/lua_libpulse_glib/lua_util.h | 9 +++---- src/lua_libpulse_glib/pulseaudio.c | 39 +++++------------------------- 3 files changed, 11 insertions(+), 44 deletions(-) diff --git a/src/lua_libpulse_glib/callback.h b/src/lua_libpulse_glib/callback.h index 97ced0f..60c90b8 100644 --- a/src/lua_libpulse_glib/callback.h +++ b/src/lua_libpulse_glib/callback.h @@ -1,6 +1,4 @@ -#ifndef callback_h_INCLUDED -#define callback_h_INCLUDED - +#pragma once #include #include @@ -40,6 +38,3 @@ void free_lua_callback(simple_callback_data*); // Simple implementation of `pa_context_success_cb_t` that calls a provided Lua function. void success_callback(pa_context*, int, void*); - -#endif // callback_h_INCLUDED - diff --git a/src/lua_libpulse_glib/lua_util.h b/src/lua_libpulse_glib/lua_util.h index 6128b41..0f05e11 100644 --- a/src/lua_libpulse_glib/lua_util.h +++ b/src/lua_libpulse_glib/lua_util.h @@ -1,5 +1,4 @@ -#ifndef lua_util_h_INCLUDED -#define lua_util_h_INCLUDED +#pragma once #include #include @@ -8,6 +7,9 @@ #if LUA_VERSION_NUM <= 501 #define lua_rawlen lua_objlen + +#define luaL_newlib(L, l) (luaL_newlibtable(L, l), luaL_setfuncs(L, l, 0)) +#define luaL_newlibtable(L, l) (lua_createtable(L, 0, sizeof(l) / sizeof(l[0]))) #endif #if LUA_VERSION_NUM > 501 @@ -18,6 +20,3 @@ typedef struct luaU_enumfield { const char* name; const char* value; } luaU_enumfield; - - -#endif // lua_util_h_INCLUDED diff --git a/src/lua_libpulse_glib/pulseaudio.c b/src/lua_libpulse_glib/pulseaudio.c index 6d6f266..d6b7368 100644 --- a/src/lua_libpulse_glib/pulseaudio.c +++ b/src/lua_libpulse_glib/pulseaudio.c @@ -10,10 +10,8 @@ #include #include - #if LUA_VERSION_NUM <= 501 // Shamelessly copied from Lua 5.3 source. -// TODO: What's the official way to do this in 5.1? void luaL_setfuncs(lua_State* L, const luaL_Reg* l, int nup) { luaL_checkstack(L, nup, "too many upvalues"); for (; l->name != NULL; l++) { /* fill the table with given functions */ @@ -29,12 +27,8 @@ void luaL_setfuncs(lua_State* L, const luaL_Reg* l, int nup) { } lua_pop(L, nup); /* remove upvalues */ } - - -#define luaL_newlib(L, l) (luaL_register(L, LUA_PULSEAUDIO, l)) #endif - int pulseaudio_new(lua_State* L) { GMainContext* ctx = g_main_context_default(); if (ctx == NULL) { @@ -86,17 +80,13 @@ int pulseaudio_new_context(lua_State* L) { void createlib_volume(lua_State* L) { luaL_newmetatable(L, LUA_PA_VOLUME); - lua_createtable(L, 0, sizeof volume_f / sizeof volume_f[0]); - luaL_setfuncs(L, volume_f, 0); + luaL_newlib(L, volume_f); lua_setfield(L, -2, "__index"); luaL_setfuncs(L, volume_mt, 0); -#if LUA_VERSION_NUM <= 501 - luaL_register(L, LUA_PA_VOLUME, volume_lib); -#else luaL_newlib(L, volume_lib); -#endif + lua_setmetatable(L, -2); } @@ -104,17 +94,12 @@ void createlib_volume(lua_State* L) { void createlib_proplist(lua_State* L) { luaL_newmetatable(L, LUA_PA_PROPLIST); - lua_createtable(L, 0, sizeof proplist_f / sizeof proplist_f[0]); - luaL_setfuncs(L, proplist_f, 0); + luaL_newlib(L, proplist_f); lua_setfield(L, -2, "__index"); luaL_setfuncs(L, proplist_mt, 0); -#if LUA_VERSION_NUM <= 501 - luaL_register(L, LUA_PA_PROPLIST, proplist_lib); -#else luaL_newlib(L, proplist_lib); -#endif // Create a metatable with an `__index` table for read-only enum fields. lua_createtable(L, 0, 1); @@ -133,8 +118,7 @@ void createlib_proplist(lua_State* L) { void createlib_context(lua_State* L) { luaL_newmetatable(L, LUA_PA_CONTEXT); - lua_createtable(L, 0, sizeof context_f / sizeof context_f[0]); - luaL_setfuncs(L, context_f, 0); + luaL_newlib(L, context_f); lua_setfield(L, -2, "__index"); luaL_setfuncs(L, context_mt, 0); @@ -144,17 +128,12 @@ void createlib_context(lua_State* L) { void createlib_pulseaudio(lua_State* L) { luaL_newmetatable(L, LUA_PULSEAUDIO); - lua_createtable(L, 0, sizeof pulseaudio_f / sizeof pulseaudio_f[0]); - luaL_setfuncs(L, pulseaudio_f, 0); + luaL_newlib(L, pulseaudio_f); lua_setfield(L, -2, "__index"); luaL_setfuncs(L, pulseaudio_mt, 0); -#if LUA_VERSION_NUM <= 501 - luaL_register(L, LUA_PULSEAUDIO, pulseaudio_lib); -#else luaL_newlib(L, pulseaudio_lib); -#endif } @@ -177,17 +156,11 @@ LUA_MOD_EXPORT int luaopen_lua_libpulse_glib(lua_State* L) { LUA_MOD_EXPORT int luaopen_lua_libpulse_glib_volume(lua_State* L) { luaL_newmetatable(L, LUA_PA_VOLUME); - lua_createtable(L, 0, sizeof volume_f / sizeof volume_f[0]); - luaL_setfuncs(L, volume_f, 0); + luaL_newlib(L, volume_f); lua_setfield(L, -2, "__index"); luaL_setfuncs(L, volume_mt, 0); -#if LUA_VERSION_NUM <= 501 - luaL_register(L, LUA_PA_VOLUME, volume_lib); -#else luaL_newlib(L, volume_lib); -#endif return 1; } -