lib_unix.odin 662 B

1234567891011121314151617181920212223242526272829
  1. #+build linux, darwin, freebsd, openbsd, netbsd
  2. #+private
  3. package dynlib
  4. import "core:os"
  5. _load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
  6. flags := os.RTLD_NOW
  7. if global_symbols {
  8. flags |= os.RTLD_GLOBAL
  9. }
  10. lib := os.dlopen(path, flags)
  11. return Library(lib), lib != nil
  12. }
  13. _unload_library :: proc(library: Library) -> bool {
  14. return os.dlclose(rawptr(library))
  15. }
  16. _symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
  17. ptr = os.dlsym(rawptr(library), symbol)
  18. found = ptr != nil
  19. return
  20. }
  21. _last_error :: proc() -> string {
  22. err := os.dlerror()
  23. return "unknown" if err == "" else err
  24. }