BUG: Appl::parseArgs searching for '-' in argument reduced to first character; Appl::printSettings added.

This commit is contained in:
Roland Jax
2014-05-05 22:48:58 +02:00
parent 60cfff6738
commit e302ce4745
4 changed files with 72 additions and 33 deletions
+13 -6
View File
@@ -85,7 +85,7 @@ void define_args()
Appl::type_int, Appl::opt_mandatory); Appl::type_int, Appl::opt_mandatory);
A.addItem("p_level", Appl::Param(trace), "", "loglevel", A.addItem("p_level", Appl::Param(trace), "", "loglevel",
"\tlogging level (error=1, event=2, default: trace=3, debug=4)\n", "\tlogging level (error=0, event=1, default: trace=2, debug=3)\n",
Appl::type_int, Appl::opt_mandatory); Appl::type_int, Appl::opt_mandatory);
A.addItem("p_dump", Appl::Param(false), "D", "dump", A.addItem("p_dump", Appl::Param(false), "D", "dump",
@@ -100,6 +100,10 @@ void define_args()
"\tmax size for dump file in kB (default: 100)\n", "\tmax size for dump file in kB (default: 100)\n",
Appl::type_long, Appl::opt_mandatory); Appl::type_long, Appl::opt_mandatory);
A.addItem("p_settings", Appl::Param(false), "", "settings",
"\tprint daemon settings\n",
Appl::type_bool, Appl::opt_none);
A.addItem("p_help", Appl::Param(false), "h", "help", A.addItem("p_help", Appl::Param(false), "h", "help",
"\tprint this message", "\tprint this message",
Appl::type_bool, Appl::opt_none); Appl::type_bool, Appl::opt_none);
@@ -171,7 +175,7 @@ int main(int argc, char* argv[])
define_args(); define_args();
// parse Arguments // parse Arguments
if (A.parse(argc, argv) == false) { if (A.parseArgs(argc, argv) == false) {
A.printArgs(); A.printArgs();
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@@ -182,6 +186,10 @@ int main(int argc, char* argv[])
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
// print Daemon settings
if (A.getParam<bool>("p_settings") == true)
A.printSettings();
// make me Daemon // make me Daemon
if (A.getParam<bool>("p_foreground") == true) { if (A.getParam<bool>("p_foreground") == true) {
L += new LogConsole(A.getParam<int>("p_area"), L += new LogConsole(A.getParam<int>("p_area"),
@@ -201,14 +209,13 @@ int main(int argc, char* argv[])
// start Logger // start Logger
L.start("logInstance"); L.start("logInstance");
// wait for Logger be ready
usleep(100000);
L.log(bas, event, "ebus-daemon started"); L.log(bas, event, "ebus-daemon started");
// print Daemon status
if (D.status() == true)
L.log(bas, event, "change to daemon");
// create Commands DB // create Commands DB
commands = ConfigCommands(A.getParam<const char*>("p_ebusconfdir"), CSV).getCommands(); commands = ConfigCommands(A.getParam<const char*>("p_ebusconfdir"), CSV).getCommands();
L.log(bas, debug, "ebus configuration dir: %s", A.getParam<const char*>("p_ebusconfdir"));
L.log(bas, event, "commands DB with %d entries created", commands->size()); L.log(bas, event, "commands DB with %d entries created", commands->size());
// create EBusLoop // create EBusLoop
+1 -1
View File
@@ -55,7 +55,7 @@ int main(int argc, char* argv[])
define_args(); define_args();
// parse Arguments // parse Arguments
if (A.parse(argc, argv) == false) { if (A.parseArgs(argc, argv) == false) {
A.printArgs(); A.printArgs();
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
+37 -6
View File
@@ -70,7 +70,7 @@ void Appl::printArgs()
std::cerr << std::endl; std::cerr << std::endl;
} }
bool Appl::parse(int argc, char* argv[]) bool Appl::parseArgs(int argc, char* argv[])
{ {
std::vector<std::string> _argv(argv, argv + argc); std::vector<std::string> _argv(argv, argv + argc);
m_argc = argc; m_argc = argc;
@@ -80,9 +80,8 @@ bool Appl::parse(int argc, char* argv[])
// find option with long format '--' // find option with long format '--'
if (m_argv[i].rfind("--") == 0 && m_argv[i].size() > 2) { if (m_argv[i].rfind("--") == 0 && m_argv[i].size() > 2) {
// is next item an added argument? // is next item an added argument?
if (i+1 < m_argc && m_argv[i+1].rfind("-") == std::string::npos) { if (i+1 < m_argc && m_argv[i+1].rfind("-", 0) == std::string::npos) {
if (checkArg(m_argv[i].substr(2), m_argv[i+1]) == false) if (checkArg(m_argv[i].substr(2), m_argv[i+1]) == false)
return false; return false;
} else { } else {
@@ -97,7 +96,7 @@ bool Appl::parse(int argc, char* argv[])
for (size_t j = 1; j < m_argv[i].size(); j++) { for (size_t j = 1; j < m_argv[i].size(); j++) {
// only last charater could have an argument // only last charater could have an argument
if (i+1 < m_argc && m_argv[i+1].rfind("-") == std::string::npos if (i+1 < m_argc && m_argv[i+1].rfind("-", 0) == std::string::npos
&& j+1 == m_argv[i].size()) { && j+1 == m_argv[i].size()) {
if (checkArg(m_argv[i].substr(j,1), m_argv[i+1]) == false) if (checkArg(m_argv[i].substr(j,1), m_argv[i+1]) == false)
return false; return false;
@@ -112,11 +111,43 @@ bool Appl::parse(int argc, char* argv[])
return true; return true;
} }
bool Appl::checkArg(const std::string name, const std::string arg) void Appl::printSettings()
{
std::cerr << std::endl << "Settings:" << std::endl;
for (a_it = m_args.begin(); a_it < m_args.end(); a_it++) {
const char* c = (strlen(a_it->shortname) == 1) ? a_it->shortname : " ";
std::cerr << ((strcmp(c, " ") == 0) ? " " : "-") << c
<< " | --" << a_it->longname
<< " = ";
if (a_it->datatype == type_bool) {
if (getParam<bool>(a_it->name) == true)
std::cerr << "yes" << std::endl;
else
std::cerr << "no" << std::endl;
}
else if (a_it->datatype == type_int) {
std::cerr << getParam<int>(a_it->name) << std::endl;
}
else if (a_it->datatype == type_long) {
std::cerr << getParam<long>(a_it->name) << std::endl;
}
else if (a_it->datatype == type_float) {
std::cerr << getParam<float>(a_it->name) << std::endl;
}
else if (a_it->datatype == type_string) {
std::cerr << getParam<const char*>(a_it->name) << std::endl;
}
}
std::cerr << std::endl;
}
bool Appl::checkArg(const std::string& name, const std::string& arg)
{ {
for (a_it = m_args.begin(); a_it < m_args.end(); a_it++) { for (a_it = m_args.begin(); a_it < m_args.end(); a_it++) {
if (a_it->shortname == name || a_it->longname == name) { if (a_it->shortname == name || a_it->longname == name) {
if (a_it->optiontype == opt_mandatory && arg.size() == 0) { if (a_it->optiontype == opt_mandatory && arg.size() == 0) {
std::cerr << std::endl << "option requires an argument '" std::cerr << std::endl << "option requires an argument '"
<< name << "'" << std::endl; << name << "'" << std::endl;
+3 -2
View File
@@ -67,7 +67,8 @@ public:
void printArgs(); void printArgs();
bool parse(int argc, char* argv[]); bool parseArgs(int argc, char* argv[]);
void printSettings();
private: private:
Appl() {} Appl() {}
@@ -92,7 +93,7 @@ private:
std::map<const char*, Param> m_params; std::map<const char*, Param> m_params;
std::map<const char*, Param>::iterator p_it; std::map<const char*, Param>::iterator p_it;
bool checkArg(const std::string name, const std::string arg); bool checkArg(const std::string& name, const std::string& arg);
void addParam(const char* name, Param param) { m_params[name] = param; } void addParam(const char* name, Param param) { m_params[name] = param; }