Hui added a comment.

In D56230#1355248 <https://reviews.llvm.org/D56230#1355248>, @labath wrote:

> In D56230#1355247 <https://reviews.llvm.org/D56230#1355247>, @labath wrote:
>
> > For example, for a `Args` vector like `lldb-server`, `gdb-remote`, 
> > `--log-channels=foo\\\   \\\"""   '''`, `whatever`, `QuoteForCreateProcess` 
> > would return
> >  `lldb-server gdb-remote "--log-channels=foo\\\   \\\\\\\"\"\"   '''" 
> > whatever` (there are other ways to quote this too). Passing this string to 
> > CreateProcess will result in the original vector being available to the 
> > `main` function of lldb-server, which is what this code (and all other code 
> > that works with the `Args` class) expects.
>
>
> Btw, there is already code for doing this in llvm 
> (`llvm::sys::flattenWindowsCommandLine`), so we can just steal the 
> implementation from there.


What do you think of the following codes to be added in Args?

  bool Args::GetFlattenQuotedCommandString(std::string &command) const {
    std::vector<llvm::StringRef> args_ref;
    std::vector<std::string> owner;
  
    for (size_t i = 0; i < m_entries.size(); ++i) {
      if (m_entries[i].quote) {
        std::string arg;
        arg += m_entries[i].quote;
        arg += m_entries[i].ref;
        arg += m_entries[i].quote;
        owner.push_back(arg);
        args_ref.push_back(owner.back());
      } else {
        args_ref.push_back(m_entries[i].ref);
      }
    }
  
    command = llvm::sys::flattenWindowsCommandLine(args_ref);
  
    return !m_entries.empty();
  }


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56230/new/

https://reviews.llvm.org/D56230



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to