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