diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2012-12-20 15:28:18 -0800 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2013-01-02 14:05:33 +0100 |
commit | 9cf144ec106e4aee7c5ab208a3295aaa9ad69f0b (patch) | |
tree | 2af8010331862911384f3acf155a2e5a77289961 /src/qtchooser/main.cpp | |
parent | 61ae33bfe84a8daf26bfead78d4a7a4ff488f9d6 (diff) |
Accept the -print-env and -list-versions commands only on "qtchooser"
Do not accept those options when called with another tool, especially
when using argv[0]. This allows the target tools to have options with
identical names.
Change-Id: I7c2881100ccc10c73ddfc5d15dcc7f89555392cf
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qtchooser/main.cpp')
-rw-r--r-- | src/qtchooser/main.cpp | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/src/qtchooser/main.cpp b/src/qtchooser/main.cpp index 69750fc..9b7688c 100644 --- a/src/qtchooser/main.cpp +++ b/src/qtchooser/main.cpp @@ -53,6 +53,7 @@ #include <string> #include <vector> +#include <assert.h> #include <errno.h> #include <stdio.h> #include <string.h> @@ -78,6 +79,8 @@ static const char myName[] = "qtchooser" EXE_SUFFIX; static const char *argv0; enum Mode { + Unknown, + PrintHelp, RunTool, ListVersions, PrintEnvironment @@ -326,7 +329,7 @@ static inline bool endsWith(const char *haystack, const char *needle) int main(int argc, char **argv) { // search the environment for defaults - Mode operatingMode = RunTool; + Mode operatingMode = Unknown; argv0 = basename(argv[0]); const char *targetSdk = getenv("QT_SELECT"); const char *targetTool = getenv("QTCHOOSER_RUNTOOL"); @@ -356,10 +359,6 @@ int main(int argc, char **argv) // -run-tool= argument targetTool = arg + strlen("run-tool="); operatingMode = RunTool; - } else if (strcmp(arg, "list-versions") == 0) { - operatingMode = ListVersions; - } else if (beginsWith(arg, "print-env")) { - operatingMode = PrintEnvironment; } else { // not one of our arguments, must be for the target tool break; @@ -380,16 +379,49 @@ int main(int argc, char **argv) haveTargetTool = false; ToolWrapper wrapper; + if (operatingMode == RunTool || haveTargetTool) { + if (!haveTargetTool) { + fprintf(stderr, "%s: no tool selected. Stop.\n", argv0); + return 1; + } + return wrapper.runTool(targetSdk, + targetTool, + argv + optind - 1); + } + + // running qtchooser itself + // check for our arguments + operatingMode = PrintHelp; + for ( ; optind < argc; ++optind) { + char *arg = argv[optind]; + if (*arg == '-') { + ++arg; + if (*arg == '-') + ++arg; + if (strcmp(arg, "list-versions") == 0) { + operatingMode = ListVersions; + } else if (beginsWith(arg, "print-env")) { + operatingMode = PrintEnvironment; + } else if (strcmp(arg, "help") != 0) { + fprintf(stderr, "%s: unknown option: %s\n", argv0, arg - 1); + return 1; + } + } else { + fprintf(stderr, "%s: unknown argument: %s\n", argv0, arg); + return 1; + } + } // dispatch switch (operatingMode) { case RunTool: - if (haveTargetTool) - return wrapper.runTool(targetSdk, - targetTool, - argv + optind - 1); - else - return wrapper.printHelp(); + case Unknown: + // can't happen! + assert(false); + return 127; + + case PrintHelp: + return wrapper.printHelp(); case PrintEnvironment: return wrapper.printEnvironment(targetSdk); |