diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2019-06-11 12:11:11 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-06-11 12:11:11 +0000 |
commit | b3093ff21a10b956b88795223dc422ca7076ee5b (patch) | |
tree | 3d624b589503119dc369e5f0e5085735a9bf53ff /init/builtins.cpp | |
parent | 5b63cff411a9b04d424dd9f4bc7da1cb3ca9b98e (diff) | |
parent | d2217b51679ac96c5f05e3c91b4b3fe840cf274f (diff) |
Merge "Read *.rc files from flattened APEX"
Diffstat (limited to 'init/builtins.cpp')
-rw-r--r-- | init/builtins.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp index 2a583e896..44cac4b7d 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -1076,10 +1076,7 @@ static Result<void> do_mark_post_data(const BuiltinArguments& args) { static Result<void> do_parse_apex_configs(const BuiltinArguments& args) { glob_t glob_result; - // @ is added to filter out the later paths, which are bind mounts of the places - // where the APEXes are really mounted at. Otherwise, we will parse the - // same file twice. - static constexpr char glob_pattern[] = "/apex/*@*/etc/*.rc"; + static constexpr char glob_pattern[] = "/apex/*/etc/*.rc"; const int ret = glob(glob_pattern, GLOB_MARK, nullptr, &glob_result); if (ret != 0 && ret != GLOB_NOMATCH) { globfree(&glob_result); @@ -1088,7 +1085,15 @@ static Result<void> do_parse_apex_configs(const BuiltinArguments& args) { std::vector<std::string> configs; Parser parser = CreateServiceOnlyParser(ServiceList::GetInstance()); for (size_t i = 0; i < glob_result.gl_pathc; i++) { - configs.emplace_back(glob_result.gl_pathv[i]); + std::string path = glob_result.gl_pathv[i]; + // Filter-out /apex/<name>@<ver> paths. The paths are bind-mounted to + // /apex/<name> paths, so unless we filter them out, we will parse the + // same file twice. + std::vector<std::string> paths = android::base::Split(path, "/"); + if (paths.size() >= 2 && paths[1].find('@') != std::string::npos) { + continue; + } + configs.push_back(path); } globfree(&glob_result); |