Also make libcurl dynamic loading use new DynamicLib_GetAll

This commit is contained in:
UnknownShadow200 2020-07-17 12:32:47 +10:00
parent f5095d4389
commit 188ea885ee
2 changed files with 21 additions and 18 deletions

View File

@ -126,7 +126,6 @@ static const String alLib = String_FromConst("libopenal.so.1");
#define QUOTE(x) #x #define QUOTE(x) #x
#define DefineALFunc(sym) { QUOTE(sym), (void**)&_ ## sym } #define DefineALFunc(sym) { QUOTE(sym), (void**)&_ ## sym }
static cc_bool LoadALFuncs(void) { static cc_bool LoadALFuncs(void) {
static const struct DynamicLibSym funcs[18] = { static const struct DynamicLibSym funcs[18] = {
DefineALFunc(alcCreateContext), DefineALFunc(alcMakeContextCurrent), DefineALFunc(alcCreateContext), DefineALFunc(alcMakeContextCurrent),

View File

@ -469,15 +469,15 @@ typedef int CURLcode;
#define APIENTRY #define APIENTRY
#endif #endif
typedef CURLcode (APIENTRY *FP_curl_global_init)(long flags); static FP_curl_global_init _curl_global_init; static CURLcode (APIENTRY *_curl_global_init)(long flags);
typedef void (APIENTRY *FP_curl_global_cleanup)(void); static FP_curl_global_cleanup _curl_global_cleanup; static void (APIENTRY *_curl_global_cleanup)(void);
typedef CURL* (APIENTRY *FP_curl_easy_init)(void); static FP_curl_easy_init _curl_easy_init; static CURL* (APIENTRY *_curl_easy_init)(void);
typedef CURLcode (APIENTRY *FP_curl_easy_perform)(CURL *c); static FP_curl_easy_perform _curl_easy_perform; static CURLcode (APIENTRY *_curl_easy_perform)(CURL *c);
typedef CURLcode (APIENTRY *FP_curl_easy_setopt)(CURL *c, int opt, ...); static FP_curl_easy_setopt _curl_easy_setopt; static CURLcode (APIENTRY *_curl_easy_setopt)(CURL *c, int opt, ...);
typedef void (APIENTRY *FP_curl_easy_cleanup)(CURL* c); static FP_curl_easy_cleanup _curl_easy_cleanup; static void (APIENTRY *_curl_easy_cleanup)(CURL* c);
typedef const char* (APIENTRY *FP_curl_easy_strerror)(CURLcode res); static FP_curl_easy_strerror _curl_easy_strerror; static void (APIENTRY *_curl_slist_free_all)(struct curl_slist* l);
typedef void (APIENTRY *FP_curl_slist_free_all)(struct curl_slist* l); static FP_curl_slist_free_all _curl_slist_free_all; static struct curl_slist* (APIENTRY *_curl_slist_append)(struct curl_slist* l, const char* v);
typedef struct curl_slist* (APIENTRY *FP_curl_slist_append)(struct curl_slist* l, const char* v); static FP_curl_slist_append _curl_slist_append; static const char* (APIENTRY *_curl_easy_strerror)(CURLcode res);
/* End of curl headers */ /* End of curl headers */
#if defined CC_BUILD_WIN #if defined CC_BUILD_WIN
@ -495,8 +495,17 @@ static const String curlAlt = String_FromConst("libcurl.so.3");
#endif #endif
#define QUOTE(x) #x #define QUOTE(x) #x
#define LoadCurlFunc(sym) (_ ## sym = (FP_ ## sym)DynamicLib_Get2(lib, QUOTE(sym))) #define DefineCurlFunc(sym) { QUOTE(sym), (void**)&_ ## sym }
static cc_bool LoadCurlFuncs(void) { static cc_bool LoadCurlFuncs(void) {
static const struct DynamicLibSym funcs[8] = {
DefineCurlFunc(curl_global_init), DefineCurlFunc(curl_global_cleanup),
DefineCurlFunc(curl_easy_init), DefineCurlFunc(curl_easy_perform),
DefineCurlFunc(curl_easy_setopt), DefineCurlFunc(curl_easy_cleanup),
DefineCurlFunc(curl_slist_free_all), DefineCurlFunc(curl_slist_append)
};
/* Non-essential function missing in older curl versions */
static const struct DynamicLibSym optFuncs[1] = { DefineCurlFunc(curl_easy_strerror) };
void* lib = DynamicLib_Load2(&curlLib); void* lib = DynamicLib_Load2(&curlLib);
if (!lib) { if (!lib) {
Logger_DynamicLibWarn("loading", &curlLib); Logger_DynamicLibWarn("loading", &curlLib);
@ -504,14 +513,9 @@ static cc_bool LoadCurlFuncs(void) {
lib = DynamicLib_Load2(&curlAlt); lib = DynamicLib_Load2(&curlAlt);
if (!lib) { Logger_DynamicLibWarn("loading", &curlAlt); return false; } if (!lib) { Logger_DynamicLibWarn("loading", &curlAlt); return false; }
} }
/* Non-essential function missing in older curl versions */
LoadCurlFunc(curl_easy_strerror);
return DynamicLib_GetAll(lib, optFuncs, Array_Elems(optFuncs));
LoadCurlFunc(curl_global_init) && LoadCurlFunc(curl_global_cleanup) && return DynamicLib_GetAll(lib, funcs, Array_Elems(funcs));
LoadCurlFunc(curl_easy_init) && LoadCurlFunc(curl_easy_perform) &&
LoadCurlFunc(curl_easy_setopt) && LoadCurlFunc(curl_easy_cleanup) &&
LoadCurlFunc(curl_slist_free_all) && LoadCurlFunc(curl_slist_append);
} }
static CURL* curl; static CURL* curl;