mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-03 05:08:14 +00:00
Make core:dynlib use the private interface convention of other packages
This commit is contained in:
@@ -1,3 +1,15 @@
|
|||||||
package dynlib
|
package dynlib
|
||||||
|
|
||||||
Library :: distinct rawptr
|
Library :: distinct rawptr
|
||||||
|
|
||||||
|
load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
|
||||||
|
return _load_library(path, global_symbols)
|
||||||
|
}
|
||||||
|
|
||||||
|
unload_library :: proc(library: Library) -> bool {
|
||||||
|
return _unload_library(library)
|
||||||
|
}
|
||||||
|
|
||||||
|
symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
|
||||||
|
return _symbol_address(library, symbol)
|
||||||
|
}
|
||||||
|
|||||||
+15
-14
@@ -1,23 +1,24 @@
|
|||||||
// +build linux, darwin, freebsd, openbsd
|
//+build linux, darwin, freebsd, openbsd
|
||||||
|
//+private
|
||||||
package dynlib
|
package dynlib
|
||||||
|
|
||||||
import "core:os"
|
import "core:os"
|
||||||
|
|
||||||
load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
|
_load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
|
||||||
flags := os.RTLD_NOW
|
flags := os.RTLD_NOW
|
||||||
if global_symbols {
|
if global_symbols {
|
||||||
flags |= os.RTLD_GLOBAL
|
flags |= os.RTLD_GLOBAL
|
||||||
}
|
}
|
||||||
lib := os.dlopen(path, flags)
|
lib := os.dlopen(path, flags)
|
||||||
return Library(lib), lib != nil
|
return Library(lib), lib != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
unload_library :: proc(library: Library) {
|
_unload_library :: proc(library: Library) {
|
||||||
os.dlclose(rawptr(library))
|
os.dlclose(rawptr(library))
|
||||||
}
|
}
|
||||||
|
|
||||||
symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
|
_symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
|
||||||
ptr = os.dlsym(rawptr(library), symbol)
|
ptr = os.dlsym(rawptr(library), symbol)
|
||||||
found = ptr != nil
|
found = ptr != nil
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
// +build windows
|
//+build windows
|
||||||
|
//+private
|
||||||
package dynlib
|
package dynlib
|
||||||
|
|
||||||
import win32 "core:sys/windows"
|
import win32 "core:sys/windows"
|
||||||
import "core:strings"
|
import "core:strings"
|
||||||
|
|
||||||
load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
|
_load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
|
||||||
// NOTE(bill): 'global_symbols' is here only for consistency with POSIX which has RTLD_GLOBAL
|
// NOTE(bill): 'global_symbols' is here only for consistency with POSIX which has RTLD_GLOBAL
|
||||||
|
|
||||||
wide_path := win32.utf8_to_wstring(path, context.temp_allocator)
|
wide_path := win32.utf8_to_wstring(path, context.temp_allocator)
|
||||||
@@ -12,12 +13,12 @@ load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
|
|||||||
return handle, handle != nil
|
return handle, handle != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
unload_library :: proc(library: Library) -> bool {
|
_unload_library :: proc(library: Library) -> bool {
|
||||||
ok := win32.FreeLibrary(cast(win32.HMODULE)library)
|
ok := win32.FreeLibrary(cast(win32.HMODULE)library)
|
||||||
return bool(ok)
|
return bool(ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
|
_symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
|
||||||
c_str := strings.clone_to_cstring(symbol, context.temp_allocator)
|
c_str := strings.clone_to_cstring(symbol, context.temp_allocator)
|
||||||
ptr = win32.GetProcAddress(cast(win32.HMODULE)library, c_str)
|
ptr = win32.GetProcAddress(cast(win32.HMODULE)library, c_str)
|
||||||
found = ptr != nil
|
found = ptr != nil
|
||||||
|
|||||||
Reference in New Issue
Block a user