Add ArgvToCommandLine, the reverse of CommandLineToArgvW #499
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A separate project I was working on required this functionality; thought I'd copy it here. The general gist behind its purpose is that
CreateProcess*
requires a string for the command line as opposed to anargv
array; when you're in a scenario where you have anargv
array and need to callCreateProcess*
, this function is useful. The documentation for the function mentions two specific scenarios in which this is useful, but I'm copying it here for quick reference:Note that the documentation for
CommandLineToArgvW
describes how arguments are parsed; this just does the reverse. The goal of this function is to ensure that the target application'sargv
array is identical to the one passed into this function. This is potentially problematic if the target application does not use itsargv
array (e.g. if it gets the command line string directly, e.g. withGetCommandLineW
) and instead attempts to perform its own command line processing, which may not handle quotes, etc. identically toCommandLineToArgvW
. One notable example iscmd.exe
which does not handle some quoted arguments as one would logically expect. For example,cmd.exe "/c" "echo foo"
does not behave as you would expect it to:This is the motivating factor behind
ArgvToCommandLineFlags::ForceQuotes
. Ideally, we would always surround all arguments with quotes as that's the more efficient thing to do, however as you can see from the above, this is not always safe to do.