[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [LuaJIT FFI feature request] ffi.load name transformation callback
- From: Duncan Cross <duncan.cross@...>
- Date: Thu, 19 Jan 2012 19:01:44 +0000
On Thu, Jan 19, 2012 at 6:27 PM, Mike Pall <mikelu-1201@mike.de> wrote:
> Sadly, the underlying OS APIs (e.g. dlopen/dlsym) do not support
> such a functionality. You'd need to probe all symbols (...)
Would it be possible to have a function that just probes the one symbol?
The use case I have in mind is an FFI-based Lua script that does one of these:
- load a set of functions statically linked and exported by the
executable itself
- load the same set of functions dynamically linked from a DLL/shared object
- fail, *without* polluting cdef
So, it would look something like:
local exporter
if ffi.exports(ffi.C, 'known_function') then
exporter = ffi.C
else
exporter = ffi.load 'known_module' -- error here if not found
end
ffi.cdef [[
void known_function();
void another_known_function();
/* ... rest of definition ... */
]]
return exporter
Of course I could just move one bit of cdef for known_function() up to
the top, and pcall a function that tests for its presence in ffi.C.
But I'd prefer it if it was possible to keep things clean and not add
anything to cdef on failure.
-Duncan