Bug 1509929: Part 2 - Modify MakeCommandLine to accept an array of extra args that will be appended to the final result; r=mhowell

Differential Revision: https://phabricator.services.mozilla.com/D15447

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Aaron Klotz 2019-01-08 00:09:52 +00:00
parent 7b47bb6e92
commit 1914ecea36

View File

@ -296,16 +296,29 @@ inline wchar_t* ArgToString(wchar_t* d, const wchar_t* s) {
/**
* Creates a command line from a list of arguments.
*
* @param argc Number of elements in |argv|
* @param argv Array of arguments
* @param aArgcExtra Number of elements in |aArgvExtra|
* @param aArgvExtra Optional array of arguments to be appended to the resulting
* command line after those provided by |argv|.
*/
inline UniquePtr<wchar_t[]> MakeCommandLine(int argc, wchar_t** argv) {
inline UniquePtr<wchar_t[]> MakeCommandLine(int argc, wchar_t** argv,
int aArgcExtra = 0,
wchar_t** aArgvExtra = nullptr) {
int i;
int len = 0;
// The + 1 of the last argument handles the allocation for null termination
// The + 1 for each argument reserves space for either a ' ' or the null
// terminator, depending on the position of the argument.
for (i = 0; i < argc; ++i) {
len += internal::ArgStrLen(argv[i]) + 1;
}
for (i = 0; i < aArgcExtra; ++i) {
len += internal::ArgStrLen(aArgvExtra[i]) + 1;
}
// Protect against callers that pass 0 arguments
if (len == 0) {
len = 1;
@ -316,10 +329,20 @@ inline UniquePtr<wchar_t[]> MakeCommandLine(int argc, wchar_t** argv) {
return s;
}
int totalArgc = argc + aArgcExtra;
wchar_t* c = s.get();
for (i = 0; i < argc; ++i) {
c = internal::ArgToString(c, argv[i]);
if (i + 1 != argc) {
if (i + 1 != totalArgc) {
*c = ' ';
++c;
}
}
for (i = 0; i < aArgcExtra; ++i) {
c = internal::ArgToString(c, aArgvExtra[i]);
if (i + 1 != aArgcExtra) {
*c = ' ';
++c;
}