NativeHelper: Avoid returning local stack string

Refactor JniInvocation::GetLibrary to not return a stack-allocated
string. Instead, provide a char buffer.

Bug: 16404669

(cherry picked from commit 88b84ec200091bdf5754b435ef55dfcd30078a67)

Change-Id: Id5c1857eb0fdd413b87f839d0c57168d587b5c11
diff --git a/tests/Android.mk b/tests/Android.mk
index c357b24..b40bdf8 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -8,14 +8,7 @@
 LOCAL_MODULE := JniInvocation_test
 LOCAL_CLANG := true
 LOCAL_SRC_FILES := JniInvocation_test.cpp
-LOCAL_SHARED_LIBRARIES := \
-    libnativehelper
-
-include external/libcxx/libcxx.mk
-
-LOCAL_MULTILIB := both
-LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
-LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+LOCAL_SHARED_LIBRARIES := libnativehelper
 include $(BUILD_NATIVE_TEST)
 
 # Host unit test.
@@ -24,12 +17,5 @@
 LOCAL_MODULE := JniInvocation_test
 LOCAL_CLANG := true
 LOCAL_SRC_FILES := JniInvocation_test.cpp
-LOCAL_SHARED_LIBRARIES := \
-    libnativehelper
-
-include external/libcxx/libcxx.mk
-
-LOCAL_MULTILIB := both
-LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
-LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+LOCAL_SHARED_LIBRARIES := libnativehelper
 include $(BUILD_HOST_NATIVE_TEST)
diff --git a/tests/JniInvocation_test.cpp b/tests/JniInvocation_test.cpp
index 6eb0267..b1d2b68 100644
--- a/tests/JniInvocation_test.cpp
+++ b/tests/JniInvocation_test.cpp
@@ -30,6 +30,9 @@
 
 #ifdef HAVE_TEST_STUFF
 
+// PROPERTY_VALUE_MAX.
+#include "cutils/properties.h"
+
 // Ability to have fake local system properties.
 #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
 #include <sys/_system_properties.h>
@@ -102,19 +105,22 @@
     ASSERT_EQ(0, __system_property_add(kDebuggableSystemProperty, 13, kIsDebuggableValue, 1));
     ASSERT_EQ(0, __system_property_add(kLibrarySystemProperty, 27, kTestNonNull2, 11));
 
-    const char* result = JniInvocation::GetLibrary(NULL);
+    char buffer[PROPERTY_VALUE_MAX];
+    const char* result = JniInvocation::GetLibrary(NULL, buffer);
     EXPECT_FALSE(result == NULL);
     if (result != NULL) {
         EXPECT_TRUE(strcmp(result, kTestNonNull2) == 0);
         EXPECT_FALSE(strcmp(result, kExpected) == 0);
     }
 
-    result = JniInvocation::GetLibrary(kTestNonNull);
+    result = JniInvocation::GetLibrary(kTestNonNull, buffer);
     EXPECT_FALSE(result == NULL);
     if (result != NULL) {
         EXPECT_TRUE(strcmp(result, kTestNonNull) == 0);
         EXPECT_FALSE(strcmp(result, kTestNonNull2) == 0);
     }
+#else
+    GTEST_LOG_(WARNING) << "Host testing unsupported. Please run target tests.";
 #endif
 }
 
@@ -124,7 +130,8 @@
     ASSERT_TRUE(pa.valid);
     ASSERT_EQ(0, __system_property_add(kDebuggableSystemProperty, 13, kIsNotDebuggableValue, 1));
 
-    const char* result = JniInvocation::GetLibrary(NULL);
+    char buffer[PROPERTY_VALUE_MAX];
+    const char* result = JniInvocation::GetLibrary(NULL, buffer);
     EXPECT_FALSE(result == NULL);
     if (result != NULL) {
         EXPECT_TRUE(strcmp(result, kExpected) == 0);
@@ -132,12 +139,14 @@
         EXPECT_FALSE(strcmp(result, kTestNonNull2) == 0);
     }
 
-    result = JniInvocation::GetLibrary(kTestNonNull);
+    result = JniInvocation::GetLibrary(kTestNonNull, buffer);
     EXPECT_FALSE(result == NULL);
     if (result != NULL) {
         EXPECT_TRUE(strcmp(result, kExpected) == 0);
         EXPECT_FALSE(strcmp(result, kTestNonNull) == 0);
     }
+#else
+    GTEST_LOG_(WARNING) << "Host testing unsupported. Please run target tests.";
 #endif
 }