blob: 563bcfb2e3136aac8f98119d31b31b535ccdcfe5 [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))
Andrew Jefferyd8e3da62023-02-03 16:30:12 +103045 {
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093046 ++i;
Andrew Jefferyd8e3da62023-02-03 16:30:12 +103047 }
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053048
49 if (i->val)
Andrew Jefferyd8e3da62023-02-03 16:30:12 +103050 {
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053051 arguments[i->name] = (i->has_arg ? optarg : true_string);
Andrew Jefferyd8e3da62023-02-03 16:30:12 +103052 }
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053053 }
54}
55
56const std::string& ArgumentParser::operator[](const std::string& opt)
57{
Andrew Jefferyf9e6cd32023-02-03 15:49:44 +103058 static const std::string emptyString{};
59
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053060 auto i = arguments.find(opt);
61 if (i == arguments.end())
62 {
Andrew Jefferyf9e6cd32023-02-03 15:49:44 +103063 return emptyString;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053064 }
65 else
66 {
67 return i->second;
68 }
69}
70
71void ArgumentParser::usage(char** argv)
72{
73 std::cerr << "Usage: " << argv[0] << " [options]" << std::endl;
74 std::cerr << "Options:" << std::endl;
75 std::cerr << " --help Print this menu" << std::endl;
Vishwanatha Subbanna61675c32016-11-30 15:52:15 +053076 std::cerr << " --path=<path> absolute path of LED in sysfs; like";
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093077 std::cerr << " /sys/class/leds/<name>" << std::endl;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053078}
79} // namespace led
80} // namespace phosphor