[Lldb-commits] [PATCH] D26883: Demonstrate proposed new Args API

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Sat Nov 19 05:23:33 PST 2016


labath added a comment.

I don't know how deep do you want this refactor to be, but there is one issue I would like us to consider, if only to decide it is out of scope of this change. I am talking about the `quote_char` thingy. The main problem for me is that I don't think it's possible to sanely define the meaning of that field. According to POSIX quoting rules (which our command line more-or-less follows) a single argument can be quoted in a great many ways, using various combinations of quote characters. For example, these are all valid ways to represent the argument `asdf` in a POSIX shell:

  asdf
  "asdf"
  'asdf'
  a"sd"f
  "as"df
  "as""df"
  "as"'df'
  "a"s'd'"f"
  ... (you get my point)

I don't think there is a self-consistent way to define what the `quote_char` field will be for each of these options. Moreover, I don't see why one would ever need to use that field. It can only encourage someone to try to "quote" the argument by doing `quote_char+value+quote_char`, which is absolutely wrong if you ever want that result to be machine parsable.(*) For proper quoting I think we should just have a free-standing `std::string quote_for_posix_shell(llvm::StringRef)` function (and maybe `quote_for_windows_cmd`, and whatever else quoting scheme we need), and then the user can decide which one to use based on who is going to be consuming it. Then we can just kill the `quote` field. The only thing is... I have no idea how much work that will be (but I am ready to chip in to make it happen).

So, yea, if we decide not to do that, then I think the interface looks great. Otherwise, I think we can design a slightly simpler (and more consistent) one.

(*) Bonus question: Try to start an executable under lldb, so that in enters `main()` with `argc=2` and `argv[1]="'"` I.e.,  as if it had been started this way via bash:

  $ /bin/cat \'


https://reviews.llvm.org/D26883





More information about the lldb-commits mailing list