Restore the check that list options must take an argument
authorMikko Rasa <tdb@tdb.fi>
Fri, 3 May 2013 09:40:20 +0000 (12:40 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 3 May 2013 09:40:20 +0000 (12:40 +0300)
source/core/getopt.cpp
source/core/getopt.h

index e909712a87e7527f35bdad1ca2c148c5f3e6dd0d..fdeb2f8827b2a48075068d153d1cea2597f6ccb1 100644 (file)
@@ -21,6 +21,8 @@ GetOpt::OptionImpl &GetOpt::add_option(char s, const string &l, const Store &t,
 {
        if(l.empty())
                throw invalid_argument("GetOpt::add_option");
+       if(t.is_list() && a!=REQUIRED_ARG)
+               throw invalid_argument("GetOpt::add_option");
 
        for(OptionList::iterator i=opts.begin(); i!=opts.end(); )
        {
index 911934ac08adb7399bbd914b6778a8df8eb99f03..70841cbf6b8dc50da4800bfae42ebc78e6d7e122 100644 (file)
@@ -88,6 +88,7 @@ private:
 
                virtual Store *clone() const = 0;
 
+               virtual bool is_list() const = 0;
                virtual void store() = 0;
                virtual void store(const std::string &) = 0;
        };
@@ -133,6 +134,8 @@ private:
                virtual SimpleStore *clone() const
                { return new SimpleStore(data); }
 
+               virtual bool is_list() const { return false; }
+
                virtual void store() { }
 
                virtual void store(const std::string &a)
@@ -151,6 +154,8 @@ private:
                virtual ListStore *clone() const
                { return new ListStore(data); }
 
+               virtual bool is_list() const { return true; }
+
                virtual void store() { }
 
                virtual void store(const std::string &a)