diff options
author | Glenn Kasten <gkasten@google.com> | 2016-10-06 12:58:46 -0700 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2016-10-07 13:56:37 -0700 |
commit | 2de796491aed1c5c40af94d9c9b08a385a309e1f (patch) | |
tree | 2a5dc2bc9d2c78a7104cfd27d98c763ffe1fae6a /init/init_parser.cpp | |
parent | 62c9101646a10138ce66d2614dad451109ae7f48 (diff) |
Traverse /etc/init in a well-defined order
Bug: 31996208
Test: will need a CTS, not yet done
Change-Id: I5ecc7f0519d42a83065b7b97a31cdb5b33549cda
Diffstat (limited to 'init/init_parser.cpp')
-rw-r--r-- | init/init_parser.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/init/init_parser.cpp b/init/init_parser.cpp index 9ec26afb5..d017390ce 100644 --- a/init/init_parser.cpp +++ b/init/init_parser.cpp @@ -122,14 +122,20 @@ bool Parser::ParseConfigDir(const std::string& path) { return false; } dirent* current_file; + std::vector<std::string> files; while ((current_file = readdir(config_dir.get()))) { - std::string current_path = - android::base::StringPrintf("%s/%s", path.c_str(), current_file->d_name); // Ignore directories and only process regular files. if (current_file->d_type == DT_REG) { - if (!ParseConfigFile(current_path)) { - LOG(ERROR) << "could not import file '" << current_path << "'"; - } + std::string current_path = + android::base::StringPrintf("%s/%s", path.c_str(), current_file->d_name); + files.emplace_back(current_path); + } + } + // Sort first so we load files in a consistent order (bug 31996208) + std::sort(files.begin(), files.end()); + for (const auto& file : files) { + if (!ParseConfigFile(file)) { + LOG(ERROR) << "could not import file '" << file << "'"; } } return true; |