From b0fb9f085e51abc93f2069645ee33aeed0b6b093 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 24 Dec 2007 11:11:41 -0200 Subject: [PATCH] fix the option parsing --- src/options.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/options.cpp b/src/options.cpp index 69ae719..aeff12a 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -44,9 +44,8 @@ void Options::parseArguments(const QStringList &argumentList) QSet validOptions; validOptions << "help"; - QHash optionsWithComplement; - optionsWithComplement.insert("resume-from", QString()); - optionsWithComplement.insert("identity-map", QString()); + QSet validOptionsWithComplement; + validOptionsWithComplement << "resume-from" << "identity-map"; QStringList arguments = argumentList; arguments.takeFirst(); // the first one is the executable name; drop it @@ -65,6 +64,7 @@ void Options::parseArguments(const QStringList &argumentList) arg = arg.mid(4); } else if (!arg.startsWith("-")) { // non-option arg + arguments.prepend(arg); break; } else { // starts with "-" arg = arg.mid(1); @@ -76,39 +76,38 @@ void Options::parseArguments(const QStringList &argumentList) arg.truncate(pos); } - if (optionsWithComplement.contains(arg)) { + if (validOptionsWithComplement.contains(arg)) { if (arguments.isEmpty()) { - fprintf(stderr, "Option -%s requires an argument", qPrintable(arg)); + fprintf(stderr, "Option -%s requires an argument\n", qPrintable(arg)); exit(2); } - QString &setting = optionsWithComplement[arg]; - if (!setting.isNull()) { - fprintf(stderr, "Option -%s given more than once", qPrintable(arg)); + if (options.contains(arg)) { + fprintf(stderr, "Option -%s given more than once\n", qPrintable(arg)); exit(2); } if (!complement.isEmpty()) - setting = complement; + options[arg] = complement; else if (!arguments.isEmpty()) - setting = arguments.takeFirst(); + options[arg] = arguments.takeFirst(); else { - fprintf(stderr, "Option -%s requires an argument", qPrintable(arg)); + fprintf(stderr, "Option -%s requires an argument\n", qPrintable(arg)); exit(2); } continue; } else if (validOptions.contains(arg)) { if (switches.contains(arg)) { - fprintf(stderr, "Option -%s given more than once", qPrintable(arg)); + fprintf(stderr, "Option -%s given more than once\n", qPrintable(arg)); exit(2); } switches[arg] = !(complement == "no"); } else { if (complement == "no") - fprintf(stderr, "Invalid option: -no-%s", qPrintable(arg)); + fprintf(stderr, "Invalid option: -no-%s\n", qPrintable(arg)); else - fprintf(stderr, "Invalid option: -%s", qPrintable(arg)); + fprintf(stderr, "Invalid option: -%s\n", qPrintable(arg)); exit(2); } } -- 2.45.0