Make core:dynlib use the private interface convention of other packages

This commit is contained in:
gingerBill
2022-05-25 11:43:56 +01:00
parent a31d23a32a
commit acadbe050c
3 changed files with 32 additions and 18 deletions
+12
View File
@@ -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
View File
@@ -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
} }
+5 -4
View File
@@ -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