blob: 0d241129f14c6ee0040f6c56662ab6b72f16c15c [file] [log] [blame]
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +05301/**
2 * Copyright © 2016 IBM Corporation
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
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093017#include "argument.hpp"
18
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053019#include <algorithm>
20#include <cassert>
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093021#include <iostream>
22#include <iterator>
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053023
24namespace phosphor
25{
26namespace led
27{
28
29const std::string ArgumentParser::true_string = "true";
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053030
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053031ArgumentParser::ArgumentParser(int argc, char** argv)
32{
33 int option = 0;
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093034 while (-1 !=
Andrew Jeffery96487702023-02-03 16:28:49 +103035 (option = getopt_long(argc, argv, optionstr, &options[0], nullptr)))
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053036 {
37 if ((option == '?') || (option == 'h'))
38 {
39 usage(argv);
40 exit(-1);
41 }
42
Andrew Jeffery1d88e682023-02-03 16:10:44 +103043 const auto* i = &options[0];
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093044 while ((i->val != option) && (i->val != 0))
45 ++i;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053046
47 if (i->val)
48 arguments[i->name] = (i->has_arg ? optarg : true_string);
49 }
50}
51
52const std::string& ArgumentParser::operator[](const std::string& opt)
53{
Andrew Jefferyf9e6cd32023-02-03 15:49:44 +103054 static const std::string emptyString{};
55
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053056 auto i = arguments.find(opt);
57 if (i == arguments.end())
58 {
Andrew Jefferyf9e6cd32023-02-03 15:49:44 +103059 return emptyString;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053060 }
61 else
62 {
63 return i->second;
64 }
65}
66
67void ArgumentParser::usage(char** argv)
68{
69 std::cerr << "Usage: " << argv[0] << " [options]" << std::endl;
70 std::cerr << "Options:" << std::endl;
71 std::cerr << " --help Print this menu" << std::endl;
Vishwanatha Subbanna61675c32016-11-30 15:52:15 +053072 std::cerr << " --path=<path> absolute path of LED in sysfs; like";
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093073 std::cerr << " /sys/class/leds/<name>" << std::endl;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053074}
75} // namespace led
76} // namespace phosphor