| // |
| // Copyright (C) 2018 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #include <pwd.h> |
| |
| #include <android-base/logging.h> |
| |
| #include "action.h" |
| #include "action_manager.h" |
| #include "action_parser.h" |
| #include "parser.h" |
| #include "result.h" |
| #include "service.h" |
| |
| // The host passwd file won't have the Android entries, so we fake success here. |
| passwd* getpwnam(const char* login) { // NOLINT: implementing bad function. |
| char dummy_buf[] = "dummy"; |
| static passwd dummy_passwd = { |
| .pw_name = dummy_buf, |
| .pw_dir = dummy_buf, |
| .pw_shell = dummy_buf, |
| .pw_uid = 123, |
| .pw_gid = 123, |
| }; |
| return &dummy_passwd; |
| } |
| |
| namespace android { |
| namespace init { |
| |
| static Result<Success> do_stub(const BuiltinArguments& args) { |
| return Success(); |
| } |
| |
| #include "generated_stub_builtin_function_map.h" |
| |
| int main(int argc, char** argv) { |
| android::base::InitLogging(argv, &android::base::StderrLogger); |
| if (argc != 2) { |
| LOG(ERROR) << "Usage: " << argv[0] << " <init file to parse>"; |
| return -1; |
| } |
| const BuiltinFunctionMap function_map; |
| Action::set_function_map(&function_map); |
| ActionManager& am = ActionManager::GetInstance(); |
| ServiceList& sl = ServiceList::GetInstance(); |
| Parser parser; |
| parser.AddSectionParser("service", std::make_unique<ServiceParser>(&sl, nullptr)); |
| parser.AddSectionParser("on", std::make_unique<ActionParser>(&am, nullptr)); |
| |
| size_t num_errors = 0; |
| if (!parser.ParseConfig(argv[1], &num_errors)) { |
| LOG(ERROR) << "Failed to find script"; |
| return -1; |
| } |
| if (num_errors > 0) { |
| LOG(ERROR) << "Parse failed with " << num_errors << " errors"; |
| return -1; |
| } |
| LOG(INFO) << "Parse success!"; |
| return 0; |
| } |
| |
| } // namespace init |
| } // namespace android |
| |
| int main(int argc, char** argv) { |
| android::init::main(argc, argv); |
| } |