diff options
author | Tom Cherry <tomcherry@google.com> | 2017-04-19 15:31:58 -0700 |
---|---|---|
committer | Tom Cherry <tomcherry@google.com> | 2017-04-21 18:26:40 -0700 |
commit | 30a6f276fd8850b0a78689d7bff3cb06a18cb286 (patch) | |
tree | 6d07dc78662207e7300c42c9362dc7b198d98194 /init/init_parser.cpp | |
parent | a0bf415cad6dddcc1cdb154a95c795b5a8ecb7aa (diff) |
init: clean up the SectionParser interface and Parser class
Remove the dependency on Action and Service from what should be a
generic Parser class.
Make ActionParser, ImportParser, and ServiceParser take a pointer to
their associated classes instead of accessing them through a
singleton.
Misc fixes to SectionParser Interface:
1) Make SectionParser::ParseLineSection() non-const as it always should
have been.
2) Use Rvalue references where appropriate
3) Remove extra std::string& filename in SectionParser::EndFile()
4) Only have SectionParser::ParseSection() as pure virtual
Document SectionParser.
Make ImportParser report the filename and line number of failed imports.
Make ServiceParser report the filename and line number of duplicated services.
Test: Boot bullhead
Change-Id: I86568a5b375fb4f27f4cb235ed1e37635f01d630
Diffstat (limited to 'init/init_parser.cpp')
-rw-r--r-- | init/init_parser.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/init/init_parser.cpp b/init/init_parser.cpp index b425497b1..5c7af79ee 100644 --- a/init/init_parser.cpp +++ b/init/init_parser.cpp @@ -17,14 +17,12 @@ #include "init_parser.h" #include <dirent.h> -#include <fcntl.h> #include <android-base/logging.h> #include <android-base/stringprintf.h> -#include "action.h" #include "parser.h" -#include "service.h" +#include "util.h" Parser::Parser() { } @@ -71,13 +69,14 @@ void Parser::ParseData(const std::string& filename, const std::string& data) { } section_parser = section_parsers_[args[0]].get(); std::string ret_err; - if (!section_parser->ParseSection(args, state.filename, state.line, &ret_err)) { + if (!section_parser->ParseSection(std::move(args), state.filename, state.line, + &ret_err)) { parse_error(&state, "%s\n", ret_err.c_str()); section_parser = nullptr; } } else if (section_parser) { std::string ret_err; - if (!section_parser->ParseLineSection(args, state.line, &ret_err)) { + if (!section_parser->ParseLineSection(std::move(args), state.line, &ret_err)) { parse_error(&state, "%s\n", ret_err.c_str()); } } @@ -100,8 +99,8 @@ bool Parser::ParseConfigFile(const std::string& path) { data.push_back('\n'); // TODO: fix parse_config. ParseData(path, data); - for (const auto& sp : section_parsers_) { - sp.second->EndFile(path); + for (const auto& [section_name, section_parser] : section_parsers_) { + section_parser->EndFile(); } LOG(VERBOSE) << "(Parsing " << path << " took " << t << ".)"; @@ -141,8 +140,3 @@ bool Parser::ParseConfig(const std::string& path) { } return ParseConfigFile(path); } - -void Parser::DumpState() const { - ServiceManager::GetInstance().DumpState(); - ActionManager::GetInstance().DumpState(); -} |