From acadbe050cd4337e3eb0f8febd31df94f5270bd2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 25 May 2022 11:43:56 +0100 Subject: [PATCH] Make `core:dynlib` use the private interface convention of other packages --- core/dynlib/lib.odin | 12 ++++++++++++ core/dynlib/lib_unix.odin | 29 +++++++++++++++-------------- core/dynlib/lib_windows.odin | 9 +++++---- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/core/dynlib/lib.odin b/core/dynlib/lib.odin index 00655d650..35617792c 100644 --- a/core/dynlib/lib.odin +++ b/core/dynlib/lib.odin @@ -1,3 +1,15 @@ package dynlib 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) +} diff --git a/core/dynlib/lib_unix.odin b/core/dynlib/lib_unix.odin index e52ade153..7fdcccd6b 100644 --- a/core/dynlib/lib_unix.odin +++ b/core/dynlib/lib_unix.odin @@ -1,23 +1,24 @@ -// +build linux, darwin, freebsd, openbsd +//+build linux, darwin, freebsd, openbsd +//+private package dynlib import "core:os" -load_library :: proc(path: string, global_symbols := false) -> (Library, bool) { - flags := os.RTLD_NOW - if global_symbols { - flags |= os.RTLD_GLOBAL - } - lib := os.dlopen(path, flags) - return Library(lib), lib != nil +_load_library :: proc(path: string, global_symbols := false) -> (Library, bool) { + flags := os.RTLD_NOW + if global_symbols { + flags |= os.RTLD_GLOBAL + } + lib := os.dlopen(path, flags) + return Library(lib), lib != nil } -unload_library :: proc(library: Library) { - os.dlclose(rawptr(library)) +_unload_library :: proc(library: Library) { + os.dlclose(rawptr(library)) } -symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) { - ptr = os.dlsym(rawptr(library), symbol) - found = ptr != nil - return +_symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) { + ptr = os.dlsym(rawptr(library), symbol) + found = ptr != nil + return } diff --git a/core/dynlib/lib_windows.odin b/core/dynlib/lib_windows.odin index b9aae9cf1..d48e43ca2 100644 --- a/core/dynlib/lib_windows.odin +++ b/core/dynlib/lib_windows.odin @@ -1,10 +1,11 @@ -// +build windows +//+build windows +//+private package dynlib import win32 "core:sys/windows" 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 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 } -unload_library :: proc(library: Library) -> bool { +_unload_library :: proc(library: Library) -> bool { ok := win32.FreeLibrary(cast(win32.HMODULE)library) 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) ptr = win32.GetProcAddress(cast(win32.HMODULE)library, c_str) found = ptr != nil