Mercurial > pub > dyncall > bindings
view lua/luadyncall/src/ldynload.c @ 46:c21d1c2c84e1
- removed pydc.py wrapper overhead (which only called pydcext.so functions, directly, anyways)
* implies renaming pydcext.* to pydc.*
* while at it, iterate directly over args that are passed in (before we did extract fptr, sig and a tuple for the args and iterated over latter afterwards); we might have a tiny perf improvement now
- added type stub as package_data
author | Tassilo Philipp |
---|---|
date | Fri, 13 Nov 2020 14:10:31 +0100 |
parents | 0cfcc391201f |
children |
line wrap: on
line source
#include "lua.h" #include "lauxlib.h" #include "dynload.h" int lua_dlLoadLibrary(lua_State *L) { const char* libpath; if ( lua_isnoneornil(L, 1) ) libpath = NULL; else libpath = lua_tostring(L, 1); DLLib* pLib; pLib = dlLoadLibrary(libpath); if (pLib == NULL) return 0; lua_pushlightuserdata(L, pLib); return 1; } int lua_dlFreeLibrary(lua_State *L) { DLLib* pLib = (DLLib*) lua_touserdata(L, 1); dlFreeLibrary(pLib); return 0; } int lua_dlFindSymbol(lua_State *L) { DLLib* pLib = (void*) lua_touserdata(L, 1); const char* pSymbolName = (const char*) lua_tostring(L, 2); void* addr = dlFindSymbol(pLib, pSymbolName); if (addr == NULL) return 0; lua_pushlightuserdata(L, addr); return 1; } static const struct luaL_Reg luareg_dynload[] = { { "dlLoadLibrary", lua_dlLoadLibrary }, { "dlFreeLibrary", lua_dlFreeLibrary }, { "dlFindSymbol", lua_dlFindSymbol }, { NULL, NULL } }; // LUALIB_API int luaopen_ldynload(lua_State *L) { lua_createtable(L, 0, 0); luaL_register(L, NULL, luareg_dynload); return 1; }