aboutsummaryrefslogtreecommitdiff
path: root/core/dynlib
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2024-01-06 02:04:09 +0100
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2024-01-06 02:04:09 +0100
commit649b5fa528834a973c19a0624025970946bc6fd0 (patch)
tree8bf5eb9e78b9d3bc35d5d435ea98c74fb618dd7b /core/dynlib
parentd6a89d667dc2dacdc760838cd489c3832b00b8f7 (diff)
Add bool return to `dynlib.initialize_symbols`.
Diffstat (limited to 'core/dynlib')
-rw-r--r--core/dynlib/example/example.odin4
-rw-r--r--core/dynlib/lib.odin11
2 files changed, 7 insertions, 8 deletions
diff --git a/core/dynlib/example/example.odin b/core/dynlib/example/example.odin
index 7a6368d59..78b14f5c0 100644
--- a/core/dynlib/example/example.odin
+++ b/core/dynlib/example/example.odin
@@ -24,9 +24,9 @@ main :: proc() {
// Load symbols from `lib.dll` into Symbols struct.
// Each struct field is prefixed with `foo_` before lookup in the DLL's symbol table.
// The library's Handle (to unload) will be stored in `sym._my_lib_handle`. This way you can load multiple DLLs in one struct.
- count := dynlib.initialize_symbols(&sym, "lib.dll", "foo_", "_my_lib_handle")
+ count, ok := dynlib.initialize_symbols(&sym, "lib.dll", "foo_", "_my_lib_handle")
defer dynlib.unload_library(sym._my_lib_handle)
- fmt.printf("%v symbols loaded from lib.dll (%p).\n", count, sym._my_lib_handle)
+ fmt.printf("ok: %v. %v symbols loaded from lib.dll (%p).\n", ok, count, sym._my_lib_handle)
if count > 0 {
fmt.println("42 + 42 =", sym.add(42, 42))
diff --git a/core/dynlib/lib.odin b/core/dynlib/lib.odin
index edeffe242..183ddd724 100644
--- a/core/dynlib/lib.odin
+++ b/core/dynlib/lib.odin
@@ -108,18 +108,17 @@ Optionally also takes the struct member to assign the library handle to, `__hand
This allows using one struct to hold library handles and symbol pointers for more than 1 dynamic library.
Returns:
-* -1 if the library could not be loaded.
-* The number of symbols assigned on success.
+* `-1, false` if the library could not be loaded.
+* The number of symbols assigned on success. `ok` = true if `count` > 0
See doc.odin for an example.
*/
-initialize_symbols :: proc(symbol_table: ^$T, library_name: string, symbol_prefix := "", handle_field_name := "__handle") -> (count: int) where intrinsics.type_is_struct(T) {
+initialize_symbols :: proc(symbol_table: ^$T, library_name: string, symbol_prefix := "", handle_field_name := "__handle") -> (count: int, ok: bool) where intrinsics.type_is_struct(T) {
assert(symbol_table != nil)
- ok: bool
handle: Library
if handle, ok = load_library(library_name); !ok {
- return -1
+ return -1, false
}
// `symbol_table` must be a struct because of the where clause, so this can't fail.
@@ -166,5 +165,5 @@ initialize_symbols :: proc(symbol_table: ^$T, library_name: string, symbol_prefi
count += 1
}
}
- return
+ return count, count > 0
} \ No newline at end of file