diff options
Diffstat (limited to 'init/service_parser.cpp')
-rw-r--r-- | init/service_parser.cpp | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/init/service_parser.cpp b/init/service_parser.cpp index 0fbbeb828..e45e80415 100644 --- a/init/service_parser.cpp +++ b/init/service_parser.cpp @@ -193,9 +193,9 @@ Result<void> ServiceParser::ParseIoprio(std::vector<std::string>&& args) { Result<void> ServiceParser::ParseKeycodes(std::vector<std::string>&& args) { auto it = args.begin() + 1; if (args.size() == 2 && StartsWith(args[1], "$")) { - std::string expanded; - if (!expand_props(args[1], &expanded)) { - return Error() << "Could not expand property '" << args[1] << "'"; + auto expanded = ExpandProps(args[1]); + if (!expanded) { + return expanded.error(); } // If the property is not set, it defaults to none, in which case there are no keycodes @@ -204,7 +204,7 @@ Result<void> ServiceParser::ParseKeycodes(std::vector<std::string>&& args) { return {}; } - args = Split(expanded, ","); + args = Split(*expanded, ","); it = args.begin(); } @@ -422,9 +422,11 @@ Result<void> ServiceParser::ParseFile(std::vector<std::string>&& args) { FileDescriptor file; file.type = args[2]; - if (!expand_props(args[1], &file.name)) { - return Error() << "Could not expand property in file path '" << args[1] << "'"; + auto file_name = ExpandProps(args[1]); + if (!file_name) { + return Error() << "Could not expand file path ': " << file_name.error(); } + file.name = *file_name; if (file.name[0] != '/' || file.name.find("../") != std::string::npos) { return Error() << "file name must not be relative"; } @@ -461,18 +463,10 @@ Result<void> ServiceParser::ParseUpdatable(std::vector<std::string>&& args) { return {}; } -class ServiceParser::OptionParserMap : public KeywordMap<OptionParser> { - public: - OptionParserMap() {} - - private: - const Map& map() const override; -}; - -const ServiceParser::OptionParserMap::Map& ServiceParser::OptionParserMap::map() const { +const KeywordMap<ServiceParser::OptionParser>& ServiceParser::GetParserMap() const { constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max(); // clang-format off - static const Map option_parsers = { + static const KeywordMap<ServiceParser::OptionParser> parser_map = { {"capabilities", {0, kMax, &ServiceParser::ParseCapabilities}}, {"class", {1, kMax, &ServiceParser::ParseClass}}, @@ -518,7 +512,7 @@ const ServiceParser::OptionParserMap::Map& ServiceParser::OptionParserMap::map() {"writepid", {1, kMax, &ServiceParser::ParseWritepid}}, }; // clang-format on - return option_parsers; + return parser_map; } Result<void> ServiceParser::ParseSection(std::vector<std::string>&& args, @@ -561,8 +555,7 @@ Result<void> ServiceParser::ParseLineSection(std::vector<std::string>&& args, in return {}; } - static const OptionParserMap parser_map; - auto parser = parser_map.FindFunction(args); + auto parser = GetParserMap().Find(args); if (!parser) return parser.error(); |