Refactor art::GetAndroidDataSafe and art::GetAndroidData.

Make these methods return an `std::string` (instead of a
`const char*`), like similar methods of libartbase/base/file_utils.cc.

Test: m test-art-host-gtest-file_utils_test
Change-Id: Idf9ab45db3607d6079eaa8305e02b3483961f373
diff --git a/libartbase/base/file_utils.cc b/libartbase/base/file_utils.cc
index 3f8bf4d..b764903 100644
--- a/libartbase/base/file_utils.cc
+++ b/libartbase/base/file_utils.cc
@@ -187,12 +187,15 @@
 std::string GetAndroidRuntimeRoot() {
   return GetAndroidDir(kAndroidRuntimeRootEnvVar, kAndroidRuntimeApexDefaultPath);
 }
-const char* GetAndroidData() {
-  return GetAndroidDir(kAndroidDataEnvVar, kAndroidDataDefaultPath);
+
+std::string GetAndroidDataSafe(std::string* error_msg) {
+  const char* android_dir =
+      GetAndroidDirSafe(kAndroidDataEnvVar, kAndroidDataDefaultPath, error_msg);
+  return (android_dir != nullptr) ? android_dir : "";
 }
 
-const char* GetAndroidDataSafe(std::string* error_msg) {
-  return GetAndroidDirSafe(kAndroidDataEnvVar, kAndroidDataDefaultPath, error_msg);
+std::string GetAndroidData() {
+  return GetAndroidDir(kAndroidDataEnvVar, kAndroidDataDefaultPath);
 }
 
 std::string GetDefaultBootImageLocation(const std::string& android_root) {
@@ -220,8 +223,8 @@
 #else
   CHECK(subdir != nullptr);
   std::string unused_error_msg;
-  const char* android_data = GetAndroidDataSafe(&unused_error_msg);
-  if (android_data == nullptr) {
+  std::string android_data = GetAndroidDataSafe(&unused_error_msg);
+  if (android_data.empty()) {
     *have_android_data = false;
     *dalvik_cache_exists = false;
     *is_global_cache = false;
@@ -229,10 +232,10 @@
   } else {
     *have_android_data = true;
   }
-  const std::string dalvik_cache_root(StringPrintf("%s/dalvik-cache/", android_data));
-  *dalvik_cache = dalvik_cache_root + subdir;
+  const std::string dalvik_cache_root = android_data + "/dalvik-cache";
+  *dalvik_cache = dalvik_cache_root + '/' + subdir;
   *dalvik_cache_exists = OS::DirectoryExists(dalvik_cache->c_str());
-  *is_global_cache = strcmp(android_data, kAndroidDataDefaultPath) == 0;
+  *is_global_cache = (android_data == kAndroidDataDefaultPath);
   if (create_if_absent && !*dalvik_cache_exists && !*is_global_cache) {
     // Don't create the system's /data/dalvik-cache/... because it needs special permissions.
     *dalvik_cache_exists = ((mkdir(dalvik_cache_root.c_str(), 0700) == 0 || errno == EEXIST) &&
@@ -243,9 +246,9 @@
 
 std::string GetDalvikCache(const char* subdir) {
   CHECK(subdir != nullptr);
-  const char* android_data = GetAndroidData();
-  const std::string dalvik_cache_root(StringPrintf("%s/dalvik-cache/", android_data));
-  const std::string dalvik_cache = dalvik_cache_root + subdir;
+  std::string android_data = GetAndroidData();
+  const std::string dalvik_cache_root = android_data + "/dalvik-cache";
+  const std::string dalvik_cache = dalvik_cache_root + '/' + subdir;
   if (!OS::DirectoryExists(dalvik_cache.c_str())) {
     // TODO: Check callers. Traditional behavior is to not abort.
     return "";
diff --git a/libartbase/base/file_utils.h b/libartbase/base/file_utils.h
index d2a0839..2406336 100644
--- a/libartbase/base/file_utils.h
+++ b/libartbase/base/file_utils.h
@@ -40,9 +40,9 @@
 std::string GetAndroidRuntimeRootSafe(/*out*/ std::string* error_msg);
 
 // Find $ANDROID_DATA, /data, or abort.
-const char* GetAndroidData();
-// Find $ANDROID_DATA, /data, or return null.
-const char* GetAndroidDataSafe(/*out*/ std::string* error_msg);
+std::string GetAndroidData();
+// Find $ANDROID_DATA, /data, or return an empty string.
+std::string GetAndroidDataSafe(/*out*/ std::string* error_msg);
 
 // Returns the default boot image location (ANDROID_ROOT/framework/boot.art).
 // Returns an empty string if ANDROID_ROOT is not set.
diff --git a/runtime/oat_file_assistant.cc b/runtime/oat_file_assistant.cc
index b5e7ce8..9bb1203 100644
--- a/runtime/oat_file_assistant.cc
+++ b/runtime/oat_file_assistant.cc
@@ -543,7 +543,7 @@
 
   // If ANDROID_DATA is not set, return false instead of aborting.
   // This can occur for preopt when using a class loader context.
-  if (GetAndroidDataSafe(error_msg) == nullptr) {
+  if (GetAndroidDataSafe(error_msg).empty()) {
     *error_msg = "GetAndroidDataSafe failed: " + *error_msg;
     return false;
   }