diff options
| author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-08-07 03:43:14 +0000 |
|---|---|---|
| committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-08-07 03:43:14 +0000 |
| commit | 679d7a9020dc359880648755dd92a25529bc7245 (patch) | |
| tree | b9251322b945c26e995305c3dc0fda359587af85 | |
| parent | a15f22ebd822a2a424f7a059a59a9eaffe8eff69 (diff) | |
| parent | a784157bff60198318a815c42a05025673e743b7 (diff) | |
| download | platform_packages_modules_SdkExtensions-android12-gsi.tar.gz platform_packages_modules_SdkExtensions-android12-gsi.tar.bz2 platform_packages_modules_SdkExtensions-android12-gsi.zip | |
Snap for 7620055 from b5b5f0300e2ca2e08417d01f49775c12e41826d3 to sc-release am: a784157bffandroid12-gsi
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/SdkExtensions/+/15488883
Change-Id: I214f013bfd68b27019f51ebbcc9bc0fe1c07cd96
| -rw-r--r-- | derive_classpath/derive_classpath.cpp | 11 | ||||
| -rw-r--r-- | derive_classpath/derive_classpath_test.cpp | 14 | ||||
| -rw-r--r-- | manifest.json | 2 |
3 files changed, 22 insertions, 5 deletions
diff --git a/derive_classpath/derive_classpath.cpp b/derive_classpath/derive_classpath.cpp index b22e832..d379a40 100644 --- a/derive_classpath/derive_classpath.cpp +++ b/derive_classpath/derive_classpath.cpp @@ -109,7 +109,16 @@ bool WriteClasspathExports(Classpaths classpaths, std::string_view output_path) LOG(INFO) << "WriteClasspathExports content\n" << content; const std::string path_str(output_path); - return android::base::WriteStringToFile(content, path_str, /*follow_symlinks=*/true); + if (android::base::StartsWith(path_str, "/data/")) { + // When writing to /data, write to a temp file first to make sure the partition is not full. + 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; + } else { + 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 7e7be4e..97e2581 100644 --- a/derive_classpath/derive_classpath_test.cpp +++ b/derive_classpath/derive_classpath_test.cpp @@ -138,7 +138,7 @@ TEST_F(DeriveClasspathTest, TempConfig) { AddJarToClasspath("/apex/com.android.baz", "/apex/com.android.baz/javalib/baz", SYSTEMSERVERCLASSPATH); - GenerateClasspathExports(working_dir()); + ASSERT_TRUE(GenerateClasspathExports(working_dir())); const std::vector<std::string> exportLines = ParseExportsFile(); @@ -160,7 +160,7 @@ TEST_F(DeriveClasspathTest, ModulesAreSorted) { AddJarToClasspath("/apex/com.android.bar", "/apex/com.android.bar/javalib/bar", BOOTCLASSPATH); AddJarToClasspath("/apex/com.android.baz", "/apex/com.android.baz/javalib/baz", BOOTCLASSPATH); - GenerateClasspathExports(working_dir()); + ASSERT_TRUE(GenerateClasspathExports(working_dir())); const std::vector<std::string> exportLines = ParseExportsFile(); const std::vector<std::string> splitExportLine = SplitClasspathExportLine(exportLines[0]); @@ -187,7 +187,7 @@ TEST_F(DeriveClasspathTest, CustomOutputLocation) { 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); + ASSERT_TRUE(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]); @@ -203,6 +203,14 @@ TEST_F(DeriveClasspathTest, CustomOutputLocation) { 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 diff --git a/manifest.json b/manifest.json index 7c089da..01062af 100644 --- a/manifest.json +++ b/manifest.json @@ -1,4 +1,4 @@ { "name": "com.android.sdkext", - "version": 309999900 + "version": 319999900 } |
