5757
5858#include < cstdio>
5959#include < string>
60+ #include < vector>
6061
6162#include " boinc_win.h"
6263#include " util.h"
6566#include " app_ipc.h"
6667
6768using std::string;
69+ using std::vector;
70+ using std::ostringstream;
6871
6972WSL_CMD app_wc;
7073WSL_CMD ctl_wc;
@@ -224,25 +227,25 @@ void poll_client_msgs() {
224227}
225228
226229int main (int argc, char ** argv) {
227- const char *os_name_regexp=" .*" , *os_version_regexp=" .*" , *pass_thru= NULL ;
230+ const char *os_name_regexp=" .*" , *os_version_regexp=" .*" ;
228231 const char *main_prog = " main" ;
232+ vector<string> app_args;
229233 int min_libc_version = 0 ;
230234 for (int i=1 ; i<argc; i++) {
231235 if (!strcmp (argv[i], " --os_name_regexp" )) {
232236 os_name_regexp = argv[++i];
233237 } else if (!strcmp (argv[i], " --os_version_regexp" )) {
234238 os_version_regexp = argv[++i];
235239 } else if (!strcmp (argv[i], " --pass_thru" )) {
236- pass_thru = argv[++i];
240+ app_args. push_back ( argv[++i]) ;
237241 } else if (!strcmp (argv[i], " --min_libc_version" )) {
238242 min_libc_version = atoi (argv[++i]);
239243 } else if (!strcmp (argv[i], " --verbose" )) {
240244 verbose = true ;
241245 } else if (!strcmp (argv[i], " --main_prog" )) {
242246 main_prog = argv[++i];
243247 } else {
244- fprintf (stderr, " unknown option %s\n " , argv[i]);
245- exit (1 );
248+ app_args.push_back (argv[i]);
246249 }
247250 }
248251
@@ -269,12 +272,13 @@ int main(int argc, char** argv) {
269272 distro_name = distro->distro_name ;
270273 }
271274
272- string main_cmd = " ./" ;
273- main_cmd += main_prog;
274- if (pass_thru){
275- main_cmd += " " ;
276- main_cmd += pass_thru;
275+ ostringstream oss;
276+ oss << " ./" << main_prog;
277+ for (const string& arg : app_args) {
278+ oss << " " << arg;
277279 }
280+ string main_cmd = oss.str ();
281+
278282 if (launch (distro_name.c_str (), main_cmd.c_str ())) {
279283 fprintf (stderr, " launch failed\n " );
280284 exit (1 );
0 commit comments