Browse Source

ENH: Add cmSystemTools::ParseUnixCommandLine

This method is a C++ wrapper around the KWSys System library function to
parse unix-style command lines.
Brad King 16 years ago
parent
commit
3dd6f36d45
2 changed files with 36 additions and 0 deletions
  1. 32 0
      Source/cmSystemTools.cxx
  2. 4 0
      Source/cmSystemTools.h

+ 32 - 0
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)
 {

+ 4 - 0
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,