Snap for 7615608 from 2c6490b127ba624f4921fc0a65f9ad7d8fa46511 to sc-d2-release
Change-Id: Ib95493f35600f969cf6e7ca6ddf8d0cfed50c79e
diff --git a/derive_classpath/derive_classpath.cpp b/derive_classpath/derive_classpath.cpp
index 9b2e3ae..b22e832 100644
--- a/derive_classpath/derive_classpath.cpp
+++ b/derive_classpath/derive_classpath.cpp
@@ -109,11 +109,7 @@
LOG(INFO) << "WriteClasspathExports content\n" << content;
const std::string path_str(output_path);
- const std::string temp_str(path_str + ".tmp");
- if (!android::base::WriteStringToFile(content, temp_str, /*follow_symlinks=*/true)) {
- return false;
- }
- return rename(temp_str.c_str(), path_str.c_str()) == 0;
+ return android::base::WriteStringToFile(content, path_str, /*follow_symlinks=*/true);
}
bool ReadClasspathFragment(ExportedClasspathsJars* fragment, const std::string& filepath) {
diff --git a/derive_classpath/derive_classpath_test.cpp b/derive_classpath/derive_classpath_test.cpp
index 0c8596d..7e7be4e 100644
--- a/derive_classpath/derive_classpath_test.cpp
+++ b/derive_classpath/derive_classpath_test.cpp
@@ -138,7 +138,7 @@
AddJarToClasspath("/apex/com.android.baz", "/apex/com.android.baz/javalib/baz",
SYSTEMSERVERCLASSPATH);
- ASSERT_TRUE(GenerateClasspathExports(working_dir()));
+ GenerateClasspathExports(working_dir());
const std::vector<std::string> exportLines = ParseExportsFile();
@@ -160,7 +160,7 @@
AddJarToClasspath("/apex/com.android.bar", "/apex/com.android.bar/javalib/bar", BOOTCLASSPATH);
AddJarToClasspath("/apex/com.android.baz", "/apex/com.android.baz/javalib/baz", BOOTCLASSPATH);
- ASSERT_TRUE(GenerateClasspathExports(working_dir()));
+ GenerateClasspathExports(working_dir());
const std::vector<std::string> exportLines = ParseExportsFile();
const std::vector<std::string> splitExportLine = SplitClasspathExportLine(exportLines[0]);
@@ -184,8 +184,10 @@
AddJarToClasspath("/apex/com.android.bar", "/apex/com.android.bar/javalib/bar", BOOTCLASSPATH);
AddJarToClasspath("/apex/com.android.baz", "/apex/com.android.baz/javalib/baz", BOOTCLASSPATH);
- const std::string file_name = "/data/local/tmp/writable_path";
- ASSERT_TRUE(GenerateClasspathExports(working_dir(), file_name));
+ android::base::unique_fd fd(memfd_create("temp_file", MFD_CLOEXEC));
+ ASSERT_TRUE(fd.ok()) << "Unable to open temp-file";
+ const std::string file_name = android::base::StringPrintf("/proc/self/fd/%d", fd.get());
+ GenerateClasspathExports(working_dir(), file_name);
const std::vector<std::string> exportLines = ParseExportsFile(file_name.c_str());
const std::vector<std::string> splitExportLine = SplitClasspathExportLine(exportLines[0]);
@@ -201,14 +203,6 @@
EXPECT_EQ(expectedJars, exportValue);
}
-// Test output location that can't be written to.
-TEST_F(DeriveClasspathTest, NonWriteableOutputLocation) {
- AddJarToClasspath("/apex/com.android.art", "/apex/com.android.art/javalib/art", BOOTCLASSPATH);
- AddJarToClasspath("/system", "/system/framework/jar", BOOTCLASSPATH);
-
- ASSERT_FALSE(GenerateClasspathExports(working_dir(), "/system/non_writable_path"));
-}
-
// Test apexes only export their own jars.
TEST_F(DeriveClasspathDeathTest, ApexJarsBelongToApex) {
// EXPECT_DEATH expects error messages in stderr, log there