diff --git a/src/osg/ArgumentParser.cpp b/src/osg/ArgumentParser.cpp index fe6501004..f16cb93db 100644 --- a/src/osg/ArgumentParser.cpp +++ b/src/osg/ArgumentParser.cpp @@ -294,195 +294,231 @@ bool ArgumentParser::read(int pos, const std::string& str) remove(pos,1); return true; } - else - { - reportError("argument to `"+str+"` is missing"); - return false; - } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1) { - if (match(pos,str) && - value1.valid(_argv[pos+1])) - { - value1.assign(_argv[pos+1]); - remove(pos,2); - return true; - } - else + if (match(pos,str)) { + if ((pos+1)<*_argc) + { + if (value1.valid(_argv[pos+1])) + { + value1.assign(_argv[pos+1]); + remove(pos,2); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1, Parameter value2) { - if (match(pos,str) && - value1.valid(_argv[pos+1]) && - value2.valid(_argv[pos+2])) - { - value1.assign(_argv[pos+1]); - value2.assign(_argv[pos+2]); - remove(pos,3); - return true; - } - else + if (match(pos,str)) { + if ((pos+2)<*_argc) + { + if (value1.valid(_argv[pos+1]) && + value2.valid(_argv[pos+2])) + { + value1.assign(_argv[pos+1]); + value2.assign(_argv[pos+2]); + remove(pos,3); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1, Parameter value2, Parameter value3) { - if (match(pos,str) && - value1.valid(_argv[pos+1]) && - value2.valid(_argv[pos+2]) && - value3.valid(_argv[pos+3])) - { - value1.assign(_argv[pos+1]); - value2.assign(_argv[pos+2]); - value3.assign(_argv[pos+3]); - remove(pos,4); - return true; - } - else + if (match(pos,str)) { + if ((pos+3)<*_argc) + { + if (value1.valid(_argv[pos+1]) && + value2.valid(_argv[pos+2]) && + value3.valid(_argv[pos+3])) + { + value1.assign(_argv[pos+1]); + value2.assign(_argv[pos+2]); + value3.assign(_argv[pos+3]); + remove(pos,4); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1, Parameter value2, Parameter value3, Parameter value4) { - if (match(pos,str) && - value1.valid(_argv[pos+1]) && - value2.valid(_argv[pos+2]) && - value3.valid(_argv[pos+3]) && - value4.valid(_argv[pos+4])) - { - value1.assign(_argv[pos+1]); - value2.assign(_argv[pos+2]); - value3.assign(_argv[pos+3]); - value4.assign(_argv[pos+4]); - remove(pos,5); - return true; - } - else + if (match(pos,str)) { + if ((pos+4)<*_argc) + { + if (value1.valid(_argv[pos+1]) && + value2.valid(_argv[pos+2]) && + value3.valid(_argv[pos+3]) && + value4.valid(_argv[pos+4])) + { + value1.assign(_argv[pos+1]); + value2.assign(_argv[pos+2]); + value3.assign(_argv[pos+3]); + value4.assign(_argv[pos+4]); + remove(pos,5); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1, Parameter value2, Parameter value3, Parameter value4, Parameter value5) { - if (match(pos,str) && - value1.valid(_argv[pos+1]) && - value2.valid(_argv[pos+2]) && - value3.valid(_argv[pos+3]) && - value4.valid(_argv[pos+4]) && - value5.valid(_argv[pos+5])) - { - value1.assign(_argv[pos+1]); - value2.assign(_argv[pos+2]); - value3.assign(_argv[pos+3]); - value4.assign(_argv[pos+4]); - value5.assign(_argv[pos+5]); - remove(pos,6); - return true; - } - else + if (match(pos,str)) { + if ((pos+5)<*_argc) + { + if (value1.valid(_argv[pos+1]) && + value2.valid(_argv[pos+2]) && + value3.valid(_argv[pos+3]) && + value4.valid(_argv[pos+4]) && + value5.valid(_argv[pos+5])) + { + value1.assign(_argv[pos+1]); + value2.assign(_argv[pos+2]); + value3.assign(_argv[pos+3]); + value4.assign(_argv[pos+4]); + value5.assign(_argv[pos+5]); + remove(pos,6); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1, Parameter value2, Parameter value3, Parameter value4, Parameter value5, Parameter value6) { - if (match(pos,str) && - value1.valid(_argv[pos+1]) && - value2.valid(_argv[pos+2]) && - value3.valid(_argv[pos+3]) && - value4.valid(_argv[pos+4]) && - value5.valid(_argv[pos+5]) && - value6.valid(_argv[pos+6])) - { - value1.assign(_argv[pos+1]); - value2.assign(_argv[pos+2]); - value3.assign(_argv[pos+3]); - value4.assign(_argv[pos+4]); - value5.assign(_argv[pos+5]); - value6.assign(_argv[pos+6]); - remove(pos,7); - return true; - } - else + if (match(pos,str)) { + if ((pos+6)<*_argc) + { + if (value1.valid(_argv[pos+1]) && + value2.valid(_argv[pos+2]) && + value3.valid(_argv[pos+3]) && + value4.valid(_argv[pos+4]) && + value5.valid(_argv[pos+5]) && + value6.valid(_argv[pos+6])) + { + value1.assign(_argv[pos+1]); + value2.assign(_argv[pos+2]); + value3.assign(_argv[pos+3]); + value4.assign(_argv[pos+4]); + value5.assign(_argv[pos+5]); + value6.assign(_argv[pos+6]); + remove(pos,7); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1, Parameter value2, Parameter value3, Parameter value4, Parameter value5, Parameter value6, Parameter value7) { - if (match(pos,str) && - value1.valid(_argv[pos+1]) && - value2.valid(_argv[pos+2]) && - value3.valid(_argv[pos+3]) && - value4.valid(_argv[pos+4]) && - value5.valid(_argv[pos+5]) && - value6.valid(_argv[pos+6]) && - value7.valid(_argv[pos+7])) - { - value1.assign(_argv[pos+1]); - value2.assign(_argv[pos+2]); - value3.assign(_argv[pos+3]); - value4.assign(_argv[pos+4]); - value5.assign(_argv[pos+5]); - value6.assign(_argv[pos+6]); - value7.assign(_argv[pos+7]); - remove(pos,8); - return true; - } - else + if (match(pos,str)) { + if ((pos+7)<*_argc) + { + if (value1.valid(_argv[pos+1]) && + value2.valid(_argv[pos+2]) && + value3.valid(_argv[pos+3]) && + value4.valid(_argv[pos+4]) && + value5.valid(_argv[pos+5]) && + value6.valid(_argv[pos+6]) && + value7.valid(_argv[pos+7])) + { + value1.assign(_argv[pos+1]); + value2.assign(_argv[pos+2]); + value3.assign(_argv[pos+3]); + value4.assign(_argv[pos+4]); + value5.assign(_argv[pos+5]); + value6.assign(_argv[pos+6]); + value7.assign(_argv[pos+7]); + remove(pos,8); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::read(int pos, const std::string& str, Parameter value1, Parameter value2, Parameter value3, Parameter value4, Parameter value5, Parameter value6, Parameter value7, Parameter value8) { - if (match(pos,str) && - value1.valid(_argv[pos+1]) && - value2.valid(_argv[pos+2]) && - value3.valid(_argv[pos+3]) && - value4.valid(_argv[pos+4]) && - value5.valid(_argv[pos+5]) && - value6.valid(_argv[pos+6]) && - value7.valid(_argv[pos+7]) && - value8.valid(_argv[pos+8])) - { - value1.assign(_argv[pos+1]); - value2.assign(_argv[pos+2]); - value3.assign(_argv[pos+3]); - value4.assign(_argv[pos+4]); - value5.assign(_argv[pos+5]); - value6.assign(_argv[pos+6]); - value7.assign(_argv[pos+7]); - value8.assign(_argv[pos+8]); - remove(pos,9); - return true; - } - else + if (match(pos,str)) { + if ((pos+8)<*_argc) + { + if (value1.valid(_argv[pos+1]) && + value2.valid(_argv[pos+2]) && + value3.valid(_argv[pos+3]) && + value4.valid(_argv[pos+4]) && + value5.valid(_argv[pos+5]) && + value6.valid(_argv[pos+6]) && + value7.valid(_argv[pos+7]) && + value8.valid(_argv[pos+8])) + { + value1.assign(_argv[pos+1]); + value2.assign(_argv[pos+2]); + value3.assign(_argv[pos+3]); + value4.assign(_argv[pos+4]); + value5.assign(_argv[pos+5]); + value6.assign(_argv[pos+6]); + value7.assign(_argv[pos+7]); + value8.assign(_argv[pos+8]); + remove(pos,9); + return true; + } + reportError("argument to `"+str+"` is not valid"); + return false; + } reportError("argument to `"+str+"` is missing"); return false; } + return false; } bool ArgumentParser::errors(ErrorSeverity severity) const