Move the dynload decls and defs to common
This commit is contained in:
parent
dca2365051
commit
70058a8a84
@ -598,6 +598,8 @@ SET(COMMON_OBJS
|
||||
common/aloptional.h
|
||||
common/alspan.h
|
||||
common/atomic.h
|
||||
common/dynload.cpp
|
||||
common/dynload.h
|
||||
common/endiantest.h
|
||||
common/intrusive_ptr.h
|
||||
common/math_defs.h
|
||||
|
@ -44,7 +44,7 @@
|
||||
#include "alnumeric.h"
|
||||
#include "aloptional.h"
|
||||
#include "alu.h"
|
||||
#include "compat.h"
|
||||
#include "dynload.h"
|
||||
#include "logging.h"
|
||||
#include "ringbuffer.h"
|
||||
#include "threads.h"
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "alu.h"
|
||||
#include "ringbuffer.h"
|
||||
#include "compat.h"
|
||||
#include "dynload.h"
|
||||
#include "threads.h"
|
||||
|
||||
/* MinGW-w64 needs this for some unknown reason now. */
|
||||
|
@ -32,9 +32,9 @@
|
||||
#include "alcmain.h"
|
||||
#include "alu.h"
|
||||
#include "alconfig.h"
|
||||
#include "dynload.h"
|
||||
#include "ringbuffer.h"
|
||||
#include "threads.h"
|
||||
#include "compat.h"
|
||||
|
||||
#include <jack/jack.h>
|
||||
#include <jack/ringbuffer.h>
|
||||
|
@ -29,8 +29,8 @@
|
||||
#include "alcmain.h"
|
||||
#include "alu.h"
|
||||
#include "alconfig.h"
|
||||
#include "dynload.h"
|
||||
#include "ringbuffer.h"
|
||||
#include "compat.h"
|
||||
|
||||
#include <portaudio.h>
|
||||
|
||||
|
@ -37,8 +37,9 @@
|
||||
#include "alcmain.h"
|
||||
#include "alu.h"
|
||||
#include "alconfig.h"
|
||||
#include "compat.h"
|
||||
#include "alexcpt.h"
|
||||
#include "compat.h"
|
||||
#include "dynload.h"
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
|
16
alc/compat.h
16
alc/compat.h
@ -1,8 +1,6 @@
|
||||
#ifndef AL_COMPAT_H
|
||||
#define AL_COMPAT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
@ -86,8 +84,6 @@ public:
|
||||
|
||||
} // namespace al
|
||||
|
||||
#define HAVE_DYNLOAD 1
|
||||
|
||||
#else /* _WIN32 */
|
||||
|
||||
#include <fstream>
|
||||
@ -99,10 +95,6 @@ using ifstream = std::ifstream;
|
||||
|
||||
} // namespace al
|
||||
|
||||
#if defined(HAVE_DLFCN_H)
|
||||
#define HAVE_DYNLOAD 1
|
||||
#endif
|
||||
|
||||
#endif /* _WIN32 */
|
||||
|
||||
#include <string>
|
||||
@ -110,12 +102,4 @@ using ifstream = std::ifstream;
|
||||
struct PathNamePair { std::string path, fname; };
|
||||
const PathNamePair &GetProcBinary(void);
|
||||
|
||||
#ifdef HAVE_DYNLOAD
|
||||
void *LoadLib(const char *name);
|
||||
void CloseLib(void *handle);
|
||||
void *GetSymbol(void *handle, const char *name);
|
||||
#endif
|
||||
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* AL_COMPAT_H */
|
||||
|
@ -81,9 +81,6 @@ DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x
|
||||
#endif
|
||||
#endif /* AL_NO_UID_DEFS */
|
||||
|
||||
#ifdef HAVE_DLFCN_H
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
#ifdef HAVE_INTRIN_H
|
||||
#include <intrin.h>
|
||||
#endif
|
||||
@ -454,21 +451,6 @@ const PathNamePair &GetProcBinary()
|
||||
}
|
||||
|
||||
|
||||
void *LoadLib(const char *name)
|
||||
{
|
||||
std::wstring wname{utf8_to_wstr(name)};
|
||||
return LoadLibraryW(wname.c_str());
|
||||
}
|
||||
void CloseLib(void *handle)
|
||||
{ FreeLibrary(static_cast<HMODULE>(handle)); }
|
||||
void *GetSymbol(void *handle, const char *name)
|
||||
{
|
||||
void *ret{reinterpret_cast<void*>(GetProcAddress(static_cast<HMODULE>(handle), name))};
|
||||
if(!ret) ERR("Failed to load %s\n", name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void al_print(FILE *logfile, const char *fmt, ...)
|
||||
{
|
||||
al::vector<char> dynmsg;
|
||||
@ -683,33 +665,6 @@ const PathNamePair &GetProcBinary()
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_DLFCN_H
|
||||
|
||||
void *LoadLib(const char *name)
|
||||
{
|
||||
dlerror();
|
||||
void *handle{dlopen(name, RTLD_NOW)};
|
||||
const char *err{dlerror()};
|
||||
if(err) handle = nullptr;
|
||||
return handle;
|
||||
}
|
||||
void CloseLib(void *handle)
|
||||
{ dlclose(handle); }
|
||||
void *GetSymbol(void *handle, const char *name)
|
||||
{
|
||||
dlerror();
|
||||
void *sym{dlsym(handle, name)};
|
||||
const char *err{dlerror()};
|
||||
if(err)
|
||||
{
|
||||
WARN("Failed to load %s: %s\n", name, err);
|
||||
sym = nullptr;
|
||||
}
|
||||
return sym;
|
||||
}
|
||||
|
||||
#endif /* HAVE_DLFCN_H */
|
||||
|
||||
void al_print(FILE *logfile, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
62
common/dynload.cpp
Normal file
62
common/dynload.cpp
Normal file
@ -0,0 +1,62 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "dynload.h"
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
inline std::wstring utf8_to_wstr(const char *str)
|
||||
{
|
||||
std::wstring ret;
|
||||
|
||||
int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
|
||||
if(len > 0)
|
||||
{
|
||||
ret.resize(len);
|
||||
MultiByteToWideChar(CP_UTF8, 0, str, -1, &ret[0], len);
|
||||
ret.pop_back();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void *LoadLib(const char *name)
|
||||
{
|
||||
std::wstring wname{utf8_to_wstr(name)};
|
||||
return LoadLibraryW(wname.c_str());
|
||||
}
|
||||
void CloseLib(void *handle)
|
||||
{ FreeLibrary(static_cast<HMODULE>(handle)); }
|
||||
void *GetSymbol(void *handle, const char *name)
|
||||
{ return reinterpret_cast<void*>(GetProcAddress(static_cast<HMODULE>(handle), name)); }
|
||||
|
||||
#elif defined(HAVE_DLFCN_H)
|
||||
|
||||
#include <dlfcn.h>
|
||||
|
||||
void *LoadLib(const char *name)
|
||||
{
|
||||
dlerror();
|
||||
void *handle{dlopen(name, RTLD_NOW)};
|
||||
const char *err{dlerror()};
|
||||
if(err) handle = nullptr;
|
||||
return handle;
|
||||
}
|
||||
void CloseLib(void *handle)
|
||||
{ dlclose(handle); }
|
||||
void *GetSymbol(void *handle, const char *name)
|
||||
{
|
||||
dlerror();
|
||||
void *sym{dlsym(handle, name)};
|
||||
const char *err{dlerror()};
|
||||
if(err) sym = nullptr;
|
||||
return sym;
|
||||
}
|
||||
|
||||
#endif
|
14
common/dynload.h
Normal file
14
common/dynload.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef AL_DYNLOAD_H
|
||||
#define AL_DYNLOAD_H
|
||||
|
||||
#if defined(_WIN32) || defined(HAVE_DLFCN_H)
|
||||
|
||||
#define HAVE_DYNLOAD
|
||||
|
||||
void *LoadLib(const char *name);
|
||||
void CloseLib(void *handle);
|
||||
void *GetSymbol(void *handle, const char *name);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* AL_DYNLOAD_H */
|
Loading…
Reference in New Issue
Block a user