mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
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:
parent
7b47bb6e92
commit
1914ecea36
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user