aboutsummaryrefslogtreecommitdiff
path: root/source/Host/common/OptionParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Host/common/OptionParser.cpp')
-rw-r--r--source/Host/common/OptionParser.cpp58
1 files changed, 52 insertions, 6 deletions
diff --git a/source/Host/common/OptionParser.cpp b/source/Host/common/OptionParser.cpp
index 287292ee74af..ead044f53cf1 100644
--- a/source/Host/common/OptionParser.cpp
+++ b/source/Host/common/OptionParser.cpp
@@ -38,24 +38,70 @@ OptionParser::EnableError(bool error)
}
int
-OptionParser::Parse(int argc, char * const argv [],
- const char *optstring,
- const Option *longopts, int *longindex)
+OptionParser::Parse (int argc,
+ char * const argv [],
+ const char *optstring,
+ const Option *longopts,
+ int *longindex)
{
return getopt_long_only(argc, argv, optstring, (const option*)longopts, longindex);
}
-char* OptionParser::GetOptionArgument()
+char*
+OptionParser::GetOptionArgument()
{
return optarg;
}
-int OptionParser::GetOptionIndex()
+int
+OptionParser::GetOptionIndex()
{
return optind;
}
-int OptionParser::GetOptionErrorCause()
+int
+OptionParser::GetOptionErrorCause()
{
return optopt;
}
+
+std::string
+OptionParser::GetShortOptionString(struct option *long_options)
+{
+ std::string s;
+ int i=0;
+ bool done = false;
+ while (!done)
+ {
+ if (long_options[i].name == 0 &&
+ long_options[i].has_arg == 0 &&
+ long_options[i].flag == 0 &&
+ long_options[i].val == 0)
+ {
+ done = true;
+ }
+ else
+ {
+ if (long_options[i].flag == NULL &&
+ isalpha(long_options[i].val))
+ {
+ s.append(1, (char)long_options[i].val);
+ switch (long_options[i].has_arg)
+ {
+ default:
+ case no_argument:
+ break;
+
+ case optional_argument:
+ s.append(2, ':');
+ break;
+ case required_argument:
+ s.append(1, ':');
+ break;
+ }
+ }
+ ++i;
+ }
+ }
+ return s;
+}