@@ -427,6 +427,16 @@ fill_handler_from_argv0 (char *argv0, struct crun_global_arguments *args)
427
427
args -> handler = b + 5 ;
428
428
}
429
429
430
+ static char * *
431
+ copy_args (char * * argv , int argc )
432
+ {
433
+ char * * buff = xmalloc0 ((argc + 1 ) * sizeof (char * ));
434
+ for (int i = 0 ; i < argc ; i ++ )
435
+ buff [i ] = argv [i ];
436
+
437
+ return buff ;
438
+ }
439
+
430
440
int
431
441
main (int argc , char * * argv )
432
442
{
@@ -448,15 +458,19 @@ main (int argc, char **argv)
448
458
#endif
449
459
450
460
fill_handler_from_argv0 (argv [0 ], & arguments );
451
-
452
461
argp_parse (& argp , argc , argv , ARGP_IN_ORDER , & first_argument , & arguments );
453
462
454
463
command = get_command (argv [first_argument ]);
455
464
if (command == NULL )
456
465
libcrun_fail_with_error (0 , "unknown command %s" , argv [first_argument ]);
457
466
458
- ret = command -> handler (& arguments , argc - first_argument , argv + first_argument , & err );
467
+ int command_argc = argc - first_argument ;
468
+ cleanup_free char * * command_argv = copy_args (argv + first_argument , command_argc );
469
+ command_argv [0 ] = argv [0 ];
470
+
471
+ ret = command -> handler (& arguments , command_argc , command_argv , & err );
459
472
if (ret && err )
460
473
libcrun_fail_with_error (err -> status , "%s" , err -> msg );
474
+
461
475
return ret ;
462
476
}
0 commit comments