• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "HelpCommand.h"
18 
19 #include "Lshal.h"
20 
21 namespace android {
22 namespace lshal {
23 
GetName()24 std::string HelpCommand::GetName() {
25     return "help";
26 }
27 
getSimpleDescription() const28 std::string HelpCommand::getSimpleDescription() const {
29     return "Print help message.";
30 }
31 
main(const Arg & arg)32 Status HelpCommand::main(const Arg &arg) {
33     if (optind >= arg.argc) {
34         // `lshal help` prints global usage.
35         mLshal.usage();
36         return OK;
37     }
38     (void)usageOfCommand(arg.argv[optind]);
39     return OK;
40 }
41 
usageOfCommand(const std::string & c) const42 Status HelpCommand::usageOfCommand(const std::string& c) const {
43     if (c.empty()) {
44         mLshal.usage();
45         return USAGE;
46     }
47     auto command = mLshal.selectCommand(c);
48     if (command == nullptr) {
49         // from HelpCommand::main, `lshal help unknown`
50         mLshal.usage();
51         return USAGE;
52     }
53 
54     command->usage();
55     return USAGE;
56 
57 }
58 
usage() const59 void HelpCommand::usage() const {
60     mLshal.err()
61             << "help:" << std::endl
62             << "    lshal -h" << std::endl
63             << "    lshal --help" << std::endl
64             << "    lshal help" << std::endl
65             << "        Print this help message" << std::endl;
66     mLshal.forEachCommand([&](const Command* e) {
67         mLshal.err() << "    lshal help " << e->getName() << std::endl
68                      << "        Print help message for " << e->getName() << std::endl;
69     });
70 
71 }
72 
73 }  // namespace lshal
74 }  // namespace android
75 
76