Loading fs_mgr/fs_mgr_fstab.cpp +22 −11 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include <ctype.h> #include <dirent.h> #include <errno.h> #include <fnmatch.h> #include <stdio.h> #include <stdlib.h> #include <string.h> Loading Loading @@ -779,21 +780,31 @@ bool SkipMountingPartitions(Fstab* fstab, bool verbose) { return true; } for (const auto& skip_mount_point : Split(skip_config, "\n")) { if (skip_mount_point.empty()) { std::vector<std::string> skip_mount_patterns; for (const auto& line : Split(skip_config, "\n")) { if (line.empty() || StartsWith(line, "#")) { continue; } auto it = std::remove_if(fstab->begin(), fstab->end(), [&skip_mount_point](const auto& entry) { return entry.mount_point == skip_mount_point; }); if (it == fstab->end()) continue; fstab->erase(it, fstab->end()); skip_mount_patterns.push_back(line); } // Returns false if mount_point matches any of the skip mount patterns, so that the FstabEntry // would be partitioned to the second group. auto glob_pattern_mismatch = [&skip_mount_patterns](const FstabEntry& entry) -> bool { for (const auto& pattern : skip_mount_patterns) { if (!fnmatch(pattern.c_str(), entry.mount_point.c_str(), 0 /* flags */)) { return false; } } return true; }; auto remove_from = std::stable_partition(fstab->begin(), fstab->end(), glob_pattern_mismatch); if (verbose) { LINFO << "Skip mounting partition: " << skip_mount_point; for (auto it = remove_from; it != fstab->end(); ++it) { LINFO << "Skip mounting mountpoint: " << it->mount_point; } } fstab->erase(remove_from, fstab->end()); return true; } #endif Loading init/ueventd_parser.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -106,10 +106,10 @@ Result<void> ParseExternalFirmwareHandlerLine( } if (std::find_if(external_firmware_handlers->begin(), external_firmware_handlers->end(), [&args](const auto& other) { return other.devpath == args[2]; }) != [&args](const auto& other) { return other.devpath == args[1]; }) != external_firmware_handlers->end()) { return Error() << "found a previous external_firmware_handler with the same devpath, '" << args[2] << "'"; << args[1] << "'"; } passwd* pwd = getpwnam(args[2].c_str()); Loading init/ueventd_parser_test.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,13 @@ void TestSysfsPermissions(const SysfsPermissions& expected, const SysfsPermissio EXPECT_EQ(expected.attribute_, test.attribute_); } void TestExternalFirmwareHandler(const ExternalFirmwareHandler& expected, const ExternalFirmwareHandler& test) { EXPECT_EQ(expected.devpath, test.devpath) << expected.devpath; EXPECT_EQ(expected.uid, test.uid) << expected.uid; EXPECT_EQ(expected.handler_path, test.handler_path) << expected.handler_path; } template <typename T, typename F> void TestVector(const T& expected, const T& test, F function) { ASSERT_EQ(expected.size(), test.size()); Loading @@ -67,6 +74,8 @@ void TestUeventdFile(const std::string& content, const UeventdConfiguration& exp TestVector(expected.sysfs_permissions, result.sysfs_permissions, TestSysfsPermissions); TestVector(expected.dev_permissions, result.dev_permissions, TestPermissions); EXPECT_EQ(expected.firmware_directories, result.firmware_directories); TestVector(expected.external_firmware_handlers, result.external_firmware_handlers, TestExternalFirmwareHandler); } TEST(ueventd_parser, EmptyFile) { Loading Loading @@ -144,7 +153,7 @@ TEST(ueventd_parser, ExternalFirmwareHandlers) { auto ueventd_file = R"( external_firmware_handler devpath root handler_path external_firmware_handler /devices/path/firmware/something001.bin system /vendor/bin/firmware_handler.sh external_firmware_handler /devices/path/firmware/something001.bin radio "/vendor/bin/firmware_handler.sh --has --arguments" external_firmware_handler /devices/path/firmware/something002.bin radio "/vendor/bin/firmware_handler.sh --has --arguments" )"; auto external_firmware_handlers = std::vector<ExternalFirmwareHandler>{ Loading @@ -159,7 +168,7 @@ external_firmware_handler /devices/path/firmware/something001.bin radio "/vendor "/vendor/bin/firmware_handler.sh", }, { "/devices/path/firmware/something001.bin", "/devices/path/firmware/something002.bin", AID_RADIO, "/vendor/bin/firmware_handler.sh --has --arguments", }, Loading libcutils/Android.bp +1 −2 Original line number Diff line number Diff line Loading @@ -363,9 +363,8 @@ rust_bindgen { local_include_dirs: ["include"], bindgen_flags: [ "--whitelist-function", "multiuser_get_app_id", "--whitelist-function", "multiuser_get_uid", "--whitelist-function", "multiuser_get_user_id", "--whitelist-var", "AID_KEYSTORE", "--whitelist-function", "multiuser_get_uid", "--whitelist-var", "AID_USER_OFFSET", ], } libstats/pull_rust/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ // limitations under the License. // package { default_applicable_licenses: ["Android-Apache-2.0"], } rust_bindgen { name: "libstatspull_bindgen", wrapper_src: "statslog.h", Loading Loading
fs_mgr/fs_mgr_fstab.cpp +22 −11 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include <ctype.h> #include <dirent.h> #include <errno.h> #include <fnmatch.h> #include <stdio.h> #include <stdlib.h> #include <string.h> Loading Loading @@ -779,21 +780,31 @@ bool SkipMountingPartitions(Fstab* fstab, bool verbose) { return true; } for (const auto& skip_mount_point : Split(skip_config, "\n")) { if (skip_mount_point.empty()) { std::vector<std::string> skip_mount_patterns; for (const auto& line : Split(skip_config, "\n")) { if (line.empty() || StartsWith(line, "#")) { continue; } auto it = std::remove_if(fstab->begin(), fstab->end(), [&skip_mount_point](const auto& entry) { return entry.mount_point == skip_mount_point; }); if (it == fstab->end()) continue; fstab->erase(it, fstab->end()); skip_mount_patterns.push_back(line); } // Returns false if mount_point matches any of the skip mount patterns, so that the FstabEntry // would be partitioned to the second group. auto glob_pattern_mismatch = [&skip_mount_patterns](const FstabEntry& entry) -> bool { for (const auto& pattern : skip_mount_patterns) { if (!fnmatch(pattern.c_str(), entry.mount_point.c_str(), 0 /* flags */)) { return false; } } return true; }; auto remove_from = std::stable_partition(fstab->begin(), fstab->end(), glob_pattern_mismatch); if (verbose) { LINFO << "Skip mounting partition: " << skip_mount_point; for (auto it = remove_from; it != fstab->end(); ++it) { LINFO << "Skip mounting mountpoint: " << it->mount_point; } } fstab->erase(remove_from, fstab->end()); return true; } #endif Loading
init/ueventd_parser.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -106,10 +106,10 @@ Result<void> ParseExternalFirmwareHandlerLine( } if (std::find_if(external_firmware_handlers->begin(), external_firmware_handlers->end(), [&args](const auto& other) { return other.devpath == args[2]; }) != [&args](const auto& other) { return other.devpath == args[1]; }) != external_firmware_handlers->end()) { return Error() << "found a previous external_firmware_handler with the same devpath, '" << args[2] << "'"; << args[1] << "'"; } passwd* pwd = getpwnam(args[2].c_str()); Loading
init/ueventd_parser_test.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,13 @@ void TestSysfsPermissions(const SysfsPermissions& expected, const SysfsPermissio EXPECT_EQ(expected.attribute_, test.attribute_); } void TestExternalFirmwareHandler(const ExternalFirmwareHandler& expected, const ExternalFirmwareHandler& test) { EXPECT_EQ(expected.devpath, test.devpath) << expected.devpath; EXPECT_EQ(expected.uid, test.uid) << expected.uid; EXPECT_EQ(expected.handler_path, test.handler_path) << expected.handler_path; } template <typename T, typename F> void TestVector(const T& expected, const T& test, F function) { ASSERT_EQ(expected.size(), test.size()); Loading @@ -67,6 +74,8 @@ void TestUeventdFile(const std::string& content, const UeventdConfiguration& exp TestVector(expected.sysfs_permissions, result.sysfs_permissions, TestSysfsPermissions); TestVector(expected.dev_permissions, result.dev_permissions, TestPermissions); EXPECT_EQ(expected.firmware_directories, result.firmware_directories); TestVector(expected.external_firmware_handlers, result.external_firmware_handlers, TestExternalFirmwareHandler); } TEST(ueventd_parser, EmptyFile) { Loading Loading @@ -144,7 +153,7 @@ TEST(ueventd_parser, ExternalFirmwareHandlers) { auto ueventd_file = R"( external_firmware_handler devpath root handler_path external_firmware_handler /devices/path/firmware/something001.bin system /vendor/bin/firmware_handler.sh external_firmware_handler /devices/path/firmware/something001.bin radio "/vendor/bin/firmware_handler.sh --has --arguments" external_firmware_handler /devices/path/firmware/something002.bin radio "/vendor/bin/firmware_handler.sh --has --arguments" )"; auto external_firmware_handlers = std::vector<ExternalFirmwareHandler>{ Loading @@ -159,7 +168,7 @@ external_firmware_handler /devices/path/firmware/something001.bin radio "/vendor "/vendor/bin/firmware_handler.sh", }, { "/devices/path/firmware/something001.bin", "/devices/path/firmware/something002.bin", AID_RADIO, "/vendor/bin/firmware_handler.sh --has --arguments", }, Loading
libcutils/Android.bp +1 −2 Original line number Diff line number Diff line Loading @@ -363,9 +363,8 @@ rust_bindgen { local_include_dirs: ["include"], bindgen_flags: [ "--whitelist-function", "multiuser_get_app_id", "--whitelist-function", "multiuser_get_uid", "--whitelist-function", "multiuser_get_user_id", "--whitelist-var", "AID_KEYSTORE", "--whitelist-function", "multiuser_get_uid", "--whitelist-var", "AID_USER_OFFSET", ], }
libstats/pull_rust/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ // limitations under the License. // package { default_applicable_licenses: ["Android-Apache-2.0"], } rust_bindgen { name: "libstatspull_bindgen", wrapper_src: "statslog.h", Loading