diff options
| author | Tobias Markmann <tm@ayena.de> | 2014-10-21 21:39:14 (GMT) |
|---|---|---|
| committer | Tobias Markmann <tm@ayena.de> | 2014-10-21 21:46:41 (GMT) |
| commit | d2a21b5fc979b07794cd42ad551dd5f4f996fdc6 (patch) | |
| tree | f21e7d6cfcf3b4ae9f0809ae89ba5efec40d441a /3rdParty/Unbound/src | |
| parent | e96118247793fdf4b40dc61d7ebd2c19a64939a3 (diff) | |
| download | swift-contrib-d2a21b5fc979b07794cd42ad551dd5f4f996fdc6.zip swift-contrib-d2a21b5fc979b07794cd42ad551dd5f4f996fdc6.tar.bz2 | |
Fix crash when Swiften isn't loaded dynamically via JNI.
Test-Information:
This change re-enables pushing our integration tests to an android device or vm
and running them successfully. These executables are statically build and linked
against Swiften, so no Java environment will be available at runtime.
Change-Id: I3a156cc38c062a47084c73d05a0b1383c963ec2a
Diffstat (limited to '3rdParty/Unbound/src')
| -rw-r--r-- | 3rdParty/Unbound/src/android/dns/dns_android.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/3rdParty/Unbound/src/android/dns/dns_android.cpp b/3rdParty/Unbound/src/android/dns/dns_android.cpp index 4b1c368..d7cfa15 100644 --- a/3rdParty/Unbound/src/android/dns/dns_android.cpp +++ b/3rdParty/Unbound/src/android/dns/dns_android.cpp @@ -1,55 +1,58 @@ /* * Copyright (c) 2014 Kevin Smith and Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include "dns_android.h" #include <vector> #include <string> #include <jni.h> JavaVM* javaVM = 0; JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* /*aReserved*/) { javaVM = vm; return JNI_VERSION_1_6; } std::vector<std::string> get_servers() { std::vector<std::string> servers; + if (javaVM == 0) { + return servers; + } JNIEnv* env = 0; int result = javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6); if (result == JNI_EDETACHED) { if (javaVM->AttachCurrentThread(&env, 0) != 0) { return servers; } } else if (result != JNI_OK) { return servers; } jclass systemProperties = env->FindClass("android.os.SystemProperties"); if (!systemProperties) { return servers; } jmethodID method = env->GetStaticMethodID(systemProperties, "get", "(Ljava/lang/String;)Ljava/lang/String;"); if (!method) { return servers; } const char* parameters[] = { "net.dns1", "net.dns2", "net.dns3", "net.dns4" }; for (size_t i = 0; i < sizeof(parameters)/sizeof(*parameters); ++i) { jstring parameter = env->NewStringUTF(parameters[i]); jstring value = jstring(env->CallStaticObjectMethod(systemProperties, method, parameter)); const char* server = env->GetStringUTFChars(value, JNI_FALSE); if (strcmp(server, "")) { servers.push_back(server); } |
Swift