summaryrefslogtreecommitdiff
path: root/init/init_parser.cpp
diff options
context:
space:
mode:
authorTom Cherry <tomcherry@google.com>2017-04-19 15:31:58 -0700
committerTom Cherry <tomcherry@google.com>2017-04-21 18:26:40 -0700
commit30a6f276fd8850b0a78689d7bff3cb06a18cb286 (patch)
tree6d07dc78662207e7300c42c9362dc7b198d98194 /init/init_parser.cpp
parenta0bf415cad6dddcc1cdb154a95c795b5a8ecb7aa (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.cpp18
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();
-}