54 lines
1.1 KiB
C++
54 lines
1.1 KiB
C++
|
/*
|
||
|
* Mr. 4th Dimention - Allen Webster
|
||
|
*
|
||
|
* 18.07.2017
|
||
|
*
|
||
|
* Linux library wrapper.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
// TOP
|
||
|
|
||
|
struct Library{
|
||
|
void *lib;
|
||
|
};
|
||
|
|
||
|
internal b32
|
||
|
system_load_library(Library *library, char *name){
|
||
|
String extension = file_extension(make_string_slowly(name));
|
||
|
char space[4096];
|
||
|
if (!match(extension, "so")){
|
||
|
String full_name = make_fixed_width_string(space);
|
||
|
append(&full_name, name);
|
||
|
append(&full_name, ".so");
|
||
|
terminate_with_null(&full_name);
|
||
|
name = space;
|
||
|
}
|
||
|
|
||
|
char path_space[4096];
|
||
|
i32 size = sysfunc.get_4ed_path(path_space, sizeof(path_space));
|
||
|
String full_path = make_string(path_space, size, sizeof(path_space));
|
||
|
append(&full_path, "/");
|
||
|
append(&full_path, name);
|
||
|
terminate_with_null(&full_path);
|
||
|
|
||
|
library->lib = dlopen(path, RTLD_LAZY);
|
||
|
b32 success = (library->lib != 0);
|
||
|
return(success);
|
||
|
}
|
||
|
|
||
|
internal void*
|
||
|
system_get_proc(Library *library, char *name){
|
||
|
void *result = dlsym(library->lib, name);
|
||
|
return(result);
|
||
|
}
|
||
|
|
||
|
internal void
|
||
|
system_free_library(Library *library){
|
||
|
dlclose(library->lib);
|
||
|
library->lib = 0;
|
||
|
}
|
||
|
|
||
|
// BOTTOM
|
||
|
|