Fix <10.4 macOS dynamic symbol getting, also support libcurl versions which lack curl_easy_strerror

This commit is contained in:
UnknownShadow200 2020-05-24 09:06:00 +10:00
parent bbd4204b53
commit 44c348197c
2 changed files with 20 additions and 5 deletions

View File

@ -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);

View File

@ -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;
}