795b6ec895
Register commands to the controller class Lshal to autogenerate help messages and select the correct Command. Test: lshal_test Change-Id: I846aef13d77bcee328c8410dc61f2e8b4c0e0d69
75 lines
2 KiB
C++
75 lines
2 KiB
C++
/*
|
|
* Copyright (C) 2017 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 "HelpCommand.h"
|
|
|
|
#include "Lshal.h"
|
|
|
|
namespace android {
|
|
namespace lshal {
|
|
|
|
std::string HelpCommand::GetName() {
|
|
return "help";
|
|
}
|
|
|
|
std::string HelpCommand::getSimpleDescription() const {
|
|
return "Print help message.";
|
|
}
|
|
|
|
Status HelpCommand::main(const Arg &arg) {
|
|
if (optind >= arg.argc) {
|
|
// `lshal help` prints global usage.
|
|
mLshal.usage();
|
|
return OK;
|
|
}
|
|
(void)usageOfCommand(arg.argv[optind]);
|
|
return OK;
|
|
}
|
|
|
|
Status HelpCommand::usageOfCommand(const std::string& c) const {
|
|
if (c.empty()) {
|
|
mLshal.usage();
|
|
return USAGE;
|
|
}
|
|
auto command = mLshal.selectCommand(c);
|
|
if (command == nullptr) {
|
|
// from HelpCommand::main, `lshal help unknown`
|
|
mLshal.usage();
|
|
return USAGE;
|
|
}
|
|
|
|
command->usage();
|
|
return USAGE;
|
|
|
|
}
|
|
|
|
void HelpCommand::usage() const {
|
|
mLshal.err()
|
|
<< "help:" << std::endl
|
|
<< " lshal -h" << std::endl
|
|
<< " lshal --help" << std::endl
|
|
<< " lshal help" << std::endl
|
|
<< " Print this help message" << std::endl;
|
|
mLshal.forEachCommand([&](const Command* e) {
|
|
mLshal.err() << " lshal help " << e->getName() << std::endl
|
|
<< " Print help message for " << e->getName() << std::endl;
|
|
});
|
|
|
|
}
|
|
|
|
} // namespace lshal
|
|
} // namespace android
|
|
|