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 | |
| 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
| -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