diff options
-rw-r--r-- | Source/cmSystemTools.cxx | 32 | ||||
-rw-r--r-- | Source/cmSystemTools.h | 4 |
2 files changed, 36 insertions, 0 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index de5e31b..64d554b 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -448,6 +448,38 @@ void cmSystemTools::ParseWindowsCommandLine(const char* command, } } +//---------------------------------------------------------------------------- +class cmSystemToolsArgV +{ + char** ArgV; +public: + cmSystemToolsArgV(char** argv): ArgV(argv) {} + ~cmSystemToolsArgV() + { + for(char** arg = this->ArgV; arg && *arg; ++arg) + { + free(*arg); + } + free(this->ArgV); + } + void Store(std::vector<std::string>& args) const + { + for(char** arg = this->ArgV; arg && *arg; ++arg) + { + args.push_back(*arg); + } + } +}; + +//---------------------------------------------------------------------------- +void cmSystemTools::ParseUnixCommandLine(const char* command, + std::vector<std::string>& args) +{ + // Invoke the underlying parser. + cmSystemToolsArgV argv = cmsysSystem_Parse_CommandForUnix(command, 0); + argv.Store(args); +} + std::string cmSystemTools::EscapeWindowsShellArgument(const char* arg, int shell_flags) { diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 486dcee..9d7efe4 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -239,6 +239,10 @@ public: static void ParseWindowsCommandLine(const char* command, std::vector<std::string>& args); + /** Parse arguments out of a unix command line string. */ + static void ParseUnixCommandLine(const char* command, + std::vector<std::string>& args); + /** Compute an escaped version of the given argument for use in a windows shell. See kwsys/System.h.in for details. */ static std::string EscapeWindowsShellArgument(const char* arg, |