bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
1.1 --- a/src/core/command-line.cc Wed Jun 03 09:48:31 2009 +0200
1.2 +++ b/src/core/command-line.cc Wed Jun 03 10:02:25 2009 +0200
1.3 @@ -100,7 +100,6 @@
1.4 std::cout << " --" << (*i)->m_name << ": " << (*i)->m_help << std::endl;
1.5 }
1.6 }
1.7 - exit (0);
1.8 }
1.9
1.10 void
1.11 @@ -115,7 +114,6 @@
1.12 std::cout << v.Get () << "]: "
1.13 << (*i)->GetHelp () << std::endl;
1.14 }
1.15 - exit (0);
1.16 }
1.17
1.18 void
1.19 @@ -134,7 +132,6 @@
1.20 std::cout << initial->SerializeToString (checker) << "]: "
1.21 << tid.GetAttributeHelp (i) << std::endl;
1.22 }
1.23 - exit (0);
1.24 }
1.25
1.26
1.27 @@ -149,7 +146,6 @@
1.28 std::cout << " --PrintAttributes=" <<tid.GetName ()<<std::endl;
1.29 }
1.30 }
1.31 - exit (0);
1.32 }
1.33
1.34 void
1.35 @@ -160,7 +156,6 @@
1.36 TypeId tid = TypeId::GetRegistered (i);
1.37 std::cout << " --PrintAttributes=" <<tid.GetName ()<<std::endl;
1.38 }
1.39 - exit (0);
1.40 }
1.41
1.42 void
1.43 @@ -193,7 +188,6 @@
1.44 {
1.45 std::cout << " --PrintGroup="<<*k<<std::endl;
1.46 }
1.47 - exit (0);
1.48 }
1.49
1.50 void
1.51 @@ -204,52 +198,62 @@
1.52 {
1.53 // method below never returns.
1.54 PrintHelp ();
1.55 - }
1.56 - if (name == "PrintGroups")
1.57 + exit (0);
1.58 + }
1.59 + else if (name == "PrintGroups")
1.60 {
1.61 // method below never returns.
1.62 PrintGroups ();
1.63 + exit (0);
1.64 }
1.65 - if (name == "PrintTypeIds")
1.66 + else if (name == "PrintTypeIds")
1.67 {
1.68 // method below never returns.
1.69 PrintTypeIds ();
1.70 + exit (0);
1.71 }
1.72 - if (name == "PrintGlobals")
1.73 + else if (name == "PrintGlobals")
1.74 {
1.75 // method below never returns.
1.76 PrintGlobals ();
1.77 + exit (0);
1.78 }
1.79 - if (name == "PrintGroup")
1.80 + else if (name == "PrintGroup")
1.81 {
1.82 // method below never returns.
1.83 PrintGroup (value);
1.84 + exit (0);
1.85 }
1.86 - if (name == "PrintAttributes")
1.87 + else if (name == "PrintAttributes")
1.88 {
1.89 // method below never returns.
1.90 PrintAttributes (value);
1.91 + exit (0);
1.92 }
1.93 - for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
1.94 + else
1.95 {
1.96 - if ((*i)->m_name == name)
1.97 - {
1.98 - if (!(*i)->Parse (value))
1.99 - {
1.100 - std::cerr << "Invalid argument value: "<<name<<"="<<value << std::endl;
1.101 - return;
1.102 - }
1.103 - else
1.104 - {
1.105 - return;
1.106 - }
1.107 - }
1.108 + for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
1.109 + {
1.110 + if ((*i)->m_name == name)
1.111 + {
1.112 + if (!(*i)->Parse (value))
1.113 + {
1.114 + std::cerr << "Invalid argument value: "<<name<<"="<<value << std::endl;
1.115 + exit (1);
1.116 + }
1.117 + else
1.118 + {
1.119 + return;
1.120 + }
1.121 + }
1.122 + }
1.123 }
1.124 if (!Config::SetGlobalFailSafe (name, StringValue (value))
1.125 && !Config::SetDefaultFailSafe (name, StringValue (value)))
1.126 {
1.127 std::cerr << "Invalid command-line arguments: --"<<name<<"="<<value<<std::endl;
1.128 PrintHelp ();
1.129 + exit (1);
1.130 }
1.131 }
1.132