--- src/lua.c.orig 2025-12-15 10:44:40 UTC +++ src/lua.c @@ -498,18 +498,30 @@ static void lua_initreadline (lua_State *L) { #include static void lua_initreadline (lua_State *L) { + union { + void *ptr; + l_readlineT rlfunc; + l_addhistT ahfunc; + char **rlnamevar; + int *icompvar; + } u; + void *lib = dlopen(LUA_READLINELIB, RTLD_NOW | RTLD_LOCAL); - if (lib == NULL) + if (lib == NULL) { lua_warning(L, "library '" LUA_READLINELIB "' not found", 0); - else { - const char **name = cast(const char**, dlsym(lib, "rl_readline_name")); - if (name != NULL) - *name = "lua"; - l_readline = cast(l_readlineT, cast_func(dlsym(lib, "readline"))); - l_addhist = cast(l_addhistT, cast_func(dlsym(lib, "add_history"))); - if (l_readline == NULL) - lua_warning(L, "unable to load 'readline'", 0); + return; } + + u.ptr = dlsym(lib, "readline"); + l_readline = u.rlfunc; + u.ptr = dlsym(lib, "add_history"); + l_addhist = u.ahfunc; + if ((u.ptr = dlsym(lib, "rl_readline_name"))) + *u.rlnamevar = "lua"; + if ((u.ptr = dlsym(lib, "rl_inhibit_completion"))) + *u.icompvar = 1; + if (l_readline == NULL) + lua_warning(L, "unable to load 'readline' from dynamic library", 0); } #else /* }{ */