bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed Jun 03 10:02:25 2009 +0200 (8 months ago)
changeset 44906aa43c812fec
parent 4489 b322b179c5f6
child 4491 893d48fcf7f3
bug 561: CommandLine based programs should exit with non-zero return if bad parameters are given
src/core/command-line.cc
     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