-
Notifications
You must be signed in to change notification settings - Fork 249
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add ArgvToCommandLine, the reverse of CommandLineToArgvW #499
Merged
+392
−0
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dunhor
commented
Jan 22, 2025
dunhor
commented
Jan 22, 2025
jonwis
approved these changes
Feb 21, 2025
ChrisGuzak
approved these changes
Feb 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
love this. forming the CreateProcess args is complicated so glad to see this.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.