diff options
Diffstat (limited to 'JniInvocation.cpp')
-rw-r--r-- | JniInvocation.cpp | 26 |
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) { |