X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FConsole%2FTraits.cc;h=c1e1cbc671b9a3c142a36967a55aa507676576af;hb=6927c87144ca23845065e3c23e37c75f5f059cf3;hp=1f082eb0f7d15853d8cd743778ab2993455649f1;hpb=958bdb52c39fa39f4ef91cafd9628bcb4f85a03c;p=senf.git diff --git a/Utils/Console/Traits.cc b/Utils/Console/Traits.cc index 1f082eb..c1e1cbc 100644 --- a/Utils/Console/Traits.cc +++ b/Utils/Console/Traits.cc @@ -39,10 +39,21 @@ prefix_ long senf::console::detail::parseEnum(EnumTable const & table, if (tokens.size() != 1) throw SyntaxErrorException("parameter syntax error"); - EnumTable::left_map::const_iterator i (table.left.find(tokens.begin()[0].value())); - if (i == table.left.end()) - throw SyntaxErrorException("parameter syntax error: invalid enum value"); - return i->second; + std::string sym (tokens.begin()[0].value()); + boost::algorithm::to_lower(sym); + EnumTable::left_map::const_iterator i1 (table.left.lower_bound(sym)); + EnumTable::left_map::const_iterator i2 (table.left.lower_bound(sym+"\xff")); + if (i1 == i2) + throw SyntaxErrorException("parameter syntax error: invalid enum value: ") + << tokens.begin()[0].value(); + long v (i1->second); + if (boost::algorithm::to_lower_copy(i1->first) == sym) + return v; + ++i1; + if (i1 != i2) + throw SyntaxErrorException("parameter syntax error: ambiguous enum value: ") + << tokens.begin()[0].value(); + return v; } prefix_ std::string senf::console::detail::formatEnum(EnumTable const & table, long value)