aboutsummaryrefslogtreecommitdiffstats
path: root/JniInvocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'JniInvocation.cpp')
-rw-r--r--JniInvocation.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/JniInvocation.cpp b/JniInvocation.cpp
index f4dd24e..30b1205 100644
--- a/JniInvocation.cpp
+++ b/JniInvocation.cpp
@@ -55,9 +55,11 @@ static const char* kDebuggableFallback = "0"; // Not debuggable.
#endif
static const char* kLibraryFallback = "libart.so";
-const char* JniInvocation::GetLibrary(const char* library) {
+template<typename T> void UNUSED(const T&) {}
+
+const char* JniInvocation::GetLibrary(const char* library, char* buffer) {
#ifdef HAVE_ANDROID_OS
- char default_library[PROPERTY_VALUE_MAX];
+ const char* default_library;
char debuggable[PROPERTY_VALUE_MAX];
property_get(kDebuggableSystemProperty, debuggable, kDebuggableFallback);
@@ -65,17 +67,24 @@ const char* JniInvocation::GetLibrary(const char* library) {
if (strcmp(debuggable, "1") != 0) {
// Not a debuggable build.
// Do not allow arbitrary library. Ignore the library parameter. This
- // will also ignore the default library, but initialize to empty string
+ // will also ignore the default library, but initialize to fallback
// for cleanliness.
library = kLibraryFallback;
- default_library[0] = 0;
+ default_library = kLibraryFallback;
} else {
// Debuggable build.
// Accept the library parameter. For the case it is NULL, load the default
// library from the system property.
- property_get(kLibrarySystemProperty, default_library, kLibraryFallback);
+ if (buffer != NULL) {
+ property_get(kLibrarySystemProperty, buffer, kLibraryFallback);
+ default_library = buffer;
+ } else {
+ // No buffer given, just use default fallback.
+ default_library = kLibraryFallback;
+ }
}
#else
+ UNUSED(buffer);
const char* default_library = kLibraryFallback;
#endif
if (library == NULL) {
@@ -86,7 +95,12 @@ const char* JniInvocation::GetLibrary(const char* library) {
}
bool JniInvocation::Init(const char* library) {
- library = GetLibrary(library);
+#ifdef HAVE_ANDROID_OS
+ char buffer[PROPERTY_VALUE_MAX];
+#else
+ char* buffer = NULL;
+#endif
+ library = GetLibrary(library, buffer);
handle_ = dlopen(library, RTLD_NOW);
if (handle_ == NULL) {