Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5d626c9 authored by Tom Cherry's avatar Tom Cherry
Browse files

ueventd: fix extraneous 'Invalid section' error

When adding a new error case for host_init_parser, I didn't handle the
individual line callbacks used for ueventd correctly.  This change
fixes that.

Test: bullhead boots without extraneous ueventd warnings
Change-Id: I56cad854b0defd936a7fbcab73fe2f2963c0e2e4
parent ae74e42d
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -70,24 +70,23 @@ void Parser::ParseData(const std::string& filename, const std::string& data) {
            case T_EOF:
                end_section();
                return;
            case T_NEWLINE:
            case T_NEWLINE: {
                state.line++;
                if (args.empty()) break;
                // If we have a line matching a prefix we recognize, call its callback and unset any
                // current section parsers.  This is meant for /sys/ and /dev/ line entries for
                // uevent.
                for (const auto& [prefix, callback] : line_callbacks_) {
                    if (android::base::StartsWith(args[0], prefix)) {
                auto line_callback = std::find_if(
                    line_callbacks_.begin(), line_callbacks_.end(),
                    [&args](const auto& c) { return android::base::StartsWith(args[0], c.first); });
                if (line_callback != line_callbacks_.end()) {
                    end_section();

                        if (auto result = callback(std::move(args)); !result) {
                    if (auto result = line_callback->second(std::move(args)); !result) {
                        parse_error_count_++;
                        LOG(ERROR) << filename << ": " << state.line << ": " << result.error();
                    }
                        break;
                    }
                }
                if (section_parsers_.count(args[0])) {
                } else if (section_parsers_.count(args[0])) {
                    end_section();
                    section_parser = section_parsers_[args[0]].get();
                    section_start_line = state.line;
@@ -111,6 +110,7 @@ void Parser::ParseData(const std::string& filename, const std::string& data) {
                }
                args.clear();
                break;
            }
            case T_TEXT:
                args.emplace_back(state.text);
                break;