dl: add dynamic load module
parent
7bf8731778
commit
761fb930ce
|
@ -0,0 +1,19 @@
|
||||||
|
module dl
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
fn C.dlopen(filename charptr, flags int) voidptr
|
||||||
|
fn C.dlsym(handle voidptr, symbol charptr) voidptr
|
||||||
|
|
||||||
|
pub const (
|
||||||
|
RTLD_NOW = C.RTLD_NOW
|
||||||
|
DL_EXT = '.so'
|
||||||
|
)
|
||||||
|
|
||||||
|
pub fn open(filename string, flags int) voidptr {
|
||||||
|
return C.dlopen(filename.str, flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sym(handle voidptr, symbol string) voidptr {
|
||||||
|
return C.dlsym(handle, symbol.str)
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
import dl
|
||||||
|
|
||||||
|
fn test_dl() {
|
||||||
|
$if linux {
|
||||||
|
run_test_linux()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$if windows {
|
||||||
|
run_test_windows()
|
||||||
|
return
|
||||||
|
} $else {
|
||||||
|
eprint('currently not implemented on this platform')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_test_linux() {
|
||||||
|
// ensure a not-existing dl won't be loaded
|
||||||
|
h := dl.open('not-existing-dynamic-link-library', dl.RTLD_NOW)
|
||||||
|
// println('handle = $h')
|
||||||
|
assert h == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_test_windows() {
|
||||||
|
// ensure a not-existing dl won't be loaded
|
||||||
|
h := dl.open('not-existing-dynamic-link-library', dl.RTLD_NOW)
|
||||||
|
// println('handle = $h')
|
||||||
|
assert h == 0
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
module dl
|
||||||
|
|
||||||
|
pub const (
|
||||||
|
RTLD_NOW = 0
|
||||||
|
DL_EXT = '.dll'
|
||||||
|
)
|
||||||
|
|
||||||
|
fn C.LoadLibraryA(libfilename byteptr) voidptr
|
||||||
|
fn C.GetProcAddress(handle voidptr, procname byteptr) voidptr
|
||||||
|
|
||||||
|
pub fn open(filename string, flags int) voidptr {
|
||||||
|
res := C.LoadLibraryA(filename.str)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sym(handle voidptr, symbol string) voidptr {
|
||||||
|
return C.GetProcAddress(handle, symbol.str)
|
||||||
|
}
|
Loading…
Reference in New Issue