From a83d04dc7727025c2f41e957c4d1cd054dfc43f7 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sun, 3 Jan 2016 08:30:19 -0500 Subject: [PATCH] c-ares: Fix for 64-bit build --- packages/c-ares/ares_init.c.patch | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 packages/c-ares/ares_init.c.patch diff --git a/packages/c-ares/ares_init.c.patch b/packages/c-ares/ares_init.c.patch new file mode 100644 index 00000000..96ecfd2b --- /dev/null +++ b/packages/c-ares/ares_init.c.patch @@ -0,0 +1,41 @@ +diff -u -r ../c-ares-1.10.0/ares_init.c ./ares_init.c +--- ../c-ares-1.10.0/ares_init.c 2013-02-17 11:44:02.000000000 -0500 ++++ ./ares_init.c 2016-01-03 08:28:33.855590585 -0500 +@@ -43,7 +43,36 @@ + #endif + + #if defined(ANDROID) || defined(__ANDROID__) +-#include ++ ++# ifdef __LP64__ ++# include ++// http://stackoverflow.com/questions/28413530/api-to-get-android-system-properties-is-removed-in-arm64-platforms ++// Android 64-bit makes __system_property_get a non-global symbol. ++// Here we provide a stub which loads the symbol from libc via dlsym. ++#define PROP_NAME_MAX 31 ++#define PROP_VALUE_MAX 91 ++typedef int (*PFN_SYSTEM_PROP_GET)(const char *, char *); ++int __system_property_get(const char* name, char* value) ++{ ++ static PFN_SYSTEM_PROP_GET __real_system_property_get = NULL; ++ if (!__real_system_property_get) { ++ // libc.so should already be open, get a handle to it. ++ void *handle = dlopen("libc.so", RTLD_NOLOAD); ++ if (!handle) { ++ printf("Cannot dlopen libc.so: %s.\n", dlerror()); ++ } else { ++ __real_system_property_get = (PFN_SYSTEM_PROP_GET)dlsym(handle, "__system_property_get"); ++ } ++ if (!__real_system_property_get) { ++ printf("Cannot resolve __system_property_get(): %s.\n", dlerror()); ++ } ++ } ++ return (*__real_system_property_get)(name, value); ++} ++# else ++# include ++#endif ++ + /* From the Bionic sources */ + #define DNS_PROP_NAME_PREFIX "net.dns" + #define MAX_DNS_PROPERTIES 8 -- 2.11.0