diff --git a/init/ueventd.cpp b/init/ueventd.cpp index 923d76906..331255b1e 100644 --- a/init/ueventd.cpp +++ b/init/ueventd.cpp @@ -16,6 +16,7 @@ #include "ueventd.h" +#include #include #include #include @@ -266,6 +267,17 @@ void ColdBoot::Run() { LOG(INFO) << "Coldboot took " << cold_boot_timer.duration().count() / 1000.0f << " seconds"; } +static UeventdConfiguration GetConfiguration() { + // TODO: Remove these legacy paths once Android S is no longer supported. + if (android::base::GetIntProperty("ro.product.first_api_level", 10000) <= __ANDROID_API_S__) { + auto hardware = android::base::GetProperty("ro.hardware", ""); + return ParseConfig({"/system/etc/ueventd.rc", "/vendor/ueventd.rc", "/odm/ueventd.rc", + "/ueventd." + hardware + ".rc"}); + } + + return ParseConfig({"/system/etc/ueventd.rc"}); +} + int ueventd_main(int argc, char** argv) { /* * init sets the umask to 077 for forked processes. We need to @@ -283,7 +295,7 @@ int ueventd_main(int argc, char** argv) { std::vector> uevent_handlers; - auto ueventd_configuration = ParseConfig("/system/etc/ueventd.rc"); + auto ueventd_configuration = GetConfiguration(); uevent_handlers.emplace_back(std::make_unique( std::move(ueventd_configuration.dev_permissions), diff --git a/init/ueventd_parser.cpp b/init/ueventd_parser.cpp index 26051584b..cab988bb3 100644 --- a/init/ueventd_parser.cpp +++ b/init/ueventd_parser.cpp @@ -230,7 +230,7 @@ Result SubsystemParser::EndSection() { return {}; } -UeventdConfiguration ParseConfig(const std::string& config) { +UeventdConfiguration ParseConfig(const std::vector& configs) { Parser parser; UeventdConfiguration ueventd_configuration; @@ -260,7 +260,9 @@ UeventdConfiguration ParseConfig(const std::string& config) { std::bind(ParseEnabledDisabledLine, _1, &ueventd_configuration.enable_parallel_restorecon)); - parser.ParseConfig(config); + for (const auto& config : configs) { + parser.ParseConfig(config); + } return ueventd_configuration; } diff --git a/init/ueventd_parser.h b/init/ueventd_parser.h index 2672626c9..eaafa5aa7 100644 --- a/init/ueventd_parser.h +++ b/init/ueventd_parser.h @@ -36,7 +36,7 @@ struct UeventdConfiguration { bool enable_parallel_restorecon = false; }; -UeventdConfiguration ParseConfig(const std::string& config); +UeventdConfiguration ParseConfig(const std::vector& configs); } // namespace init } // namespace android diff --git a/rootdir/ueventd.rc b/rootdir/ueventd.rc index aebcd5f23..e9293b51e 100644 --- a/rootdir/ueventd.rc +++ b/rootdir/ueventd.rc @@ -1,6 +1,5 @@ -import /vendor/ueventd.rc -import /odm/ueventd.rc -import /ueventd.${ro.hardware}.rc +import /vendor/etc/ueventd.rc +import /odm/etc/ueventd.rc firmware_directories /etc/firmware/ /odm/firmware/ /vendor/firmware/ /firmware/image/ uevent_socket_rcvbuf_size 16M