27
25
* ***** END GPL LICENSE BLOCK *****
28
/** \file blender/blenlib/intern/dynlib.c
30
33
#include <stdlib.h>
32
#include "../PIL_dynlib.h"
34
#if !defined(CHAR_MAX)
39
* XXX, should use mallocN so we can see
40
* handle's not being released. fixme zr
36
#include "MEM_guardedalloc.h"
38
#include "BLI_dynlib.h"
40
struct DynamicLibrary {
47
46
#include <windows.h>
47
#include "utf_winfunc.h"
50
DynamicLibrary *BLI_dynlib_open(char *name)
53
PILdynlib *PIL_dynlib_open(char *name) {
54
void *handle= LoadLibrary(name);
57
PILdynlib *lib= malloc(sizeof(*lib));
56
handle= LoadLibraryW(name_16);
57
UTF16_UN_ENCODE(name);
62
lib= MEM_callocN(sizeof(*lib), "Dynamic Library");
66
void *PIL_dynlib_find_symbol(PILdynlib* lib, char *symname) {
68
void *BLI_dynlib_find_symbol(DynamicLibrary *lib, const char *symname)
67
70
return GetProcAddress(lib->handle, symname);
70
char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
73
char *BLI_dynlib_get_error_as_string(DynamicLibrary *lib)
73
77
/* if lib is NULL reset the last error code */
74
78
err= GetLastError();
75
if (!lib) SetLastError(ERROR_SUCCESS);
80
SetLastError(ERROR_SUCCESS);
78
83
static char buf[1024];
80
85
if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
83
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
86
NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
87
buf, sizeof(buf), NULL))
93
void PIL_dynlib_close(PILdynlib *lib) {
94
void BLI_dynlib_close(DynamicLibrary *lib)
94
96
FreeLibrary(lib->handle);
101
102
#include <dlfcn.h>
107
PILdynlib *PIL_dynlib_open(char *name) {
104
DynamicLibrary *BLI_dynlib_open(char *name)
108
107
void *handle= dlopen(name, RTLD_LAZY);
111
PILdynlib *lib= malloc(sizeof(*lib));
112
lib= MEM_callocN(sizeof(*lib), "Dynamic Library");
120
void *PIL_dynlib_find_symbol(PILdynlib* lib, char *symname) {
118
void *BLI_dynlib_find_symbol(DynamicLibrary *lib, const char *symname)
121
120
return dlsym(lib->handle, symname);
124
char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
123
char *BLI_dynlib_get_error_as_string(DynamicLibrary *lib)
125
(void)lib; /* unused */
125
126
return dlerror();
128
void PIL_dynlib_close(PILdynlib *lib) {
129
void BLI_dynlib_close(DynamicLibrary *lib)
129
131
dlclose(lib->handle);