Home | History | Annotate | Download | only in lshal
      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 
     24 std::string HelpCommand::GetName() {
     25     return "help";
     26 }
     27 
     28 std::string HelpCommand::getSimpleDescription() const {
     29     return "Print help message.";
     30 }
     31 
     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 
     42 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 
     59 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