From 44c348197cb394faeba0dd06bec271c4ca1b751f Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 24 May 2020 09:06:00 +1000 Subject: [PATCH] Fix <10.4 macOS dynamic symbol getting, also support libcurl versions which lack curl_easy_strerror --- src/Http.c | 10 ++++++++-- src/Platform.c | 15 ++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Http.c b/src/Http.c index 753100c1b..e6c5dade6 100644 --- a/src/Http.c +++ b/src/Http.c @@ -705,11 +705,14 @@ static cc_bool LoadCurlFuncs(void) { void* lib = DynamicLib_Load2(&curlLib); if (!lib) { Logger_DynamicLibWarn("loading", &curlLib); return false; } + /* Non-essential functions missing in older curl versions */ + LoadCurlFunc(curl_easy_strerror); + return LoadCurlFunc(curl_global_init) && LoadCurlFunc(curl_global_cleanup) && LoadCurlFunc(curl_easy_init) && LoadCurlFunc(curl_easy_perform) && LoadCurlFunc(curl_easy_setopt) && LoadCurlFunc(curl_easy_reset) && - LoadCurlFunc(curl_easy_cleanup) && LoadCurlFunc(curl_easy_strerror) && + LoadCurlFunc(curl_easy_cleanup) && LoadCurlFunc(curl_slist_free_all) && LoadCurlFunc(curl_slist_append); } @@ -717,7 +720,10 @@ static CURL* curl; static cc_bool curlInited; cc_bool Http_DescribeError(cc_result res, String* dst) { - const char* err = _curl_easy_strerror((CURLcode)res); + const char* err; + + if (!_curl_easy_strerror) return false; + err = _curl_easy_strerror((CURLcode)res); if (!err) return false; String_AppendConst(dst, err); diff --git a/src/Platform.c b/src/Platform.c index 6e217488b..71d9f2570 100644 --- a/src/Platform.c +++ b/src/Platform.c @@ -1404,8 +1404,17 @@ void* DynamicLib_Load2(const String* path) { } void* DynamicLib_Get2(void* lib, const char* name) { - NSSymbol sym = NSLookupSymbolInImage(lib, name, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW | - NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); + String tmp; char tmpBuffer[128]; + NSSymbol sym; + String_InitArray_NT(tmp, tmpBuffer); + + /* NS linker api rquires symbols to have a _ prefix */ + String_Append(&tmp, '_'); + String_AppendConst(&tmp, name); + tmp.buffer[tmp.length] = '\0'; + + sym = NSLookupSymbolInImage(lib, tmp.buffer, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW | + NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); return sym ? NSAddressOfSymbol(sym) : NULL; } @@ -1415,7 +1424,7 @@ cc_bool DynamicLib_DescribeError(String* dst) { const char* msg = ""; int errNum = 0; - NSLinkEditError(&editError, &errno, &name, &msg); + NSLinkEditError(&err, &errNum, &name, &msg); String_Format4(dst, "%c in %c (%i, sys %i)", msg, name, &err, &errNum); return true; }