blob: 2720da93c8946587968c24d0b93b7c186587ca53 [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
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093031const option ArgumentParser::options[] = {
32 {"path", required_argument, nullptr, 'p'},
33 {"help", no_argument, nullptr, 'h'},
34 {0, 0, 0, 0},
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053035};
36
37ArgumentParser::ArgumentParser(int argc, char** argv)
38{
39 int option = 0;
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093040 while (-1 !=
41 (option = getopt_long(argc, argv, optionstr, options, nullptr)))
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053042 {
43 if ((option == '?') || (option == 'h'))
44 {
45 usage(argv);
46 exit(-1);
47 }
48
49 auto i = &options[0];
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093050 while ((i->val != option) && (i->val != 0))
51 ++i;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053052
53 if (i->val)
54 arguments[i->name] = (i->has_arg ? optarg : true_string);
55 }
56}
57
58const std::string& ArgumentParser::operator[](const std::string& opt)
59{
Andrew Jefferyf9e6cd32023-02-03 15:49:44 +103060 static const std::string emptyString{};
61
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053062 auto i = arguments.find(opt);
63 if (i == arguments.end())
64 {
Andrew Jefferyf9e6cd32023-02-03 15:49:44 +103065 return emptyString;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053066 }
67 else
68 {
69 return i->second;
70 }
71}
72
73void ArgumentParser::usage(char** argv)
74{
75 std::cerr << "Usage: " << argv[0] << " [options]" << std::endl;
76 std::cerr << "Options:" << std::endl;
77 std::cerr << " --help Print this menu" << std::endl;
Vishwanatha Subbanna61675c32016-11-30 15:52:15 +053078 std::cerr << " --path=<path> absolute path of LED in sysfs; like";
Andrew Jefferyc41bf5b2018-05-25 16:39:22 +093079 std::cerr << " /sys/class/leds/<name>" << std::endl;
Vishwanatha Subbanna835571e2016-11-30 11:29:30 +053080}
81} // namespace led
82} // namespace phosphor