Prepare session-metadata export to external command
[ardour.git] / libs / pbd / system_exec.cc
index cc5d8d99fef132c9b5ec10b145c98ad0101e7a45..26f50146c8b8a2f76bbb144fece4ca600b760ea8 100644 (file)
@@ -236,6 +236,39 @@ SystemExec::SystemExec (std::string command, const std::map<char, std::string> s
        make_envp();
 }
 
+char*
+SystemExec::format_key_value_parameter (std::string key, std::string value)
+{
+       size_t start_pos = 0;
+       std::string v1 = value;
+       while((start_pos = v1.find_first_not_of(
+                       "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(),.\"'",
+                       start_pos)) != std::string::npos)
+       {
+               v1.replace(start_pos, 1, "_");
+               start_pos += 1;
+       }
+
+       start_pos = 0;
+       while((start_pos = v1.find("\"", start_pos)) != std::string::npos) {
+               v1.replace(start_pos, 1, "\\\"");
+               start_pos += 2;
+       }
+
+       size_t len = key.length() + v1.length() + 4;
+       char *mds = (char*) calloc(len, sizeof(char));
+#ifdef PLATFORM_WINDOWS
+       /* SystemExec::make_wargs() adds quotes around the complete argument
+        * windows uses CreateProcess() with a parameter string
+        * (and not an array list of separate arguments)
+        */
+       snprintf(mds, len, "%s=%s", key.c_str(), v1.c_str());
+#else
+       snprintf(mds, len, "%s=\"%s\"", key.c_str(), v1.c_str());
+#endif
+       return mds;
+}
+
 void
 SystemExec::make_argp_escaped(std::string command, const std::map<char, std::string> subs)
 {