summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2018-03-09 12:54:05 +0000
committer Vladimir Marko <vmarko@google.com> 2018-03-09 12:59:46 +0000
commit62c2d71b583820685761519bbfe3ce1e79358e25 (patch)
treea069c70f43bb0edd5472be2e4e114b47d55fefe7
parent9992e095643f6746361df03c4c98e742d9ad5899 (diff)
Fix ReplaceFileExtension() to stop looking for '.' at '/'.
Test: new test in file_utils_test. Test: m test-art-host-gtest Change-Id: Iaf9d16c8595f4f88a5920549c9cee51ecd4f9d13
-rw-r--r--runtime/base/file_utils.cc4
-rw-r--r--runtime/base/file_utils_test.cc7
2 files changed, 9 insertions, 2 deletions
diff --git a/runtime/base/file_utils.cc b/runtime/base/file_utils.cc
index f9d0d12d88..1cb3b9c380 100644
--- a/runtime/base/file_utils.cc
+++ b/runtime/base/file_utils.cc
@@ -306,8 +306,8 @@ std::string GetSystemImageFilename(const char* location, const InstructionSet is
}
std::string ReplaceFileExtension(const std::string& filename, const std::string& new_extension) {
- const size_t last_ext = filename.find_last_of('.');
- if (last_ext == std::string::npos) {
+ const size_t last_ext = filename.find_last_of("./");
+ if (last_ext == std::string::npos || filename[last_ext] != '.') {
return filename + "." + new_extension;
} else {
return filename.substr(0, last_ext + 1) + new_extension;
diff --git a/runtime/base/file_utils_test.cc b/runtime/base/file_utils_test.cc
index cf6e34d1ea..e74dfe5e64 100644
--- a/runtime/base/file_utils_test.cc
+++ b/runtime/base/file_utils_test.cc
@@ -94,4 +94,11 @@ TEST_F(FileUtilsTest, GetAndroidRootSafe) {
ASSERT_EQ(0, setenv("ANDROID_ROOT", android_root_env.c_str(), 1 /* overwrite */));
}
+TEST_F(FileUtilsTest, ReplaceFileExtension) {
+ EXPECT_EQ("/directory/file.vdex", ReplaceFileExtension("/directory/file.oat", "vdex"));
+ EXPECT_EQ("/.directory/file.vdex", ReplaceFileExtension("/.directory/file.oat", "vdex"));
+ EXPECT_EQ("/directory/file.vdex", ReplaceFileExtension("/directory/file", "vdex"));
+ EXPECT_EQ("/.directory/file.vdex", ReplaceFileExtension("/.directory/file", "vdex"));
+}
+
} // namespace art