diff --git a/pressure-vessel/wrap.c b/pressure-vessel/wrap.c index a541ae7e3a140c39db45e18fb4c591a5de090b6b..497a3f8891c1dbabc98e4bce8df6de8ad2012d57 100644 --- a/pressure-vessel/wrap.c +++ b/pressure-vessel/wrap.c @@ -1213,7 +1213,6 @@ main (int argc, gboolean is_flatpak_env = g_file_test ("/.flatpak-info", G_FILE_TEST_IS_REGULAR); g_autoptr(FlatpakBwrap) bwrap = NULL; g_autoptr(FlatpakExports) exports = NULL; - g_autoptr(FlatpakBwrap) wrapped_command = NULL; g_autofree gchar *launch_executable = NULL; g_autofree gchar *bwrap_executable = NULL; g_autoptr(GString) adjusted_ld_preload = g_string_new (""); @@ -1589,24 +1588,6 @@ main (int argc, g_debug ("Found executable directory: %s", tools_dir); - wrapped_command = flatpak_bwrap_new (flatpak_bwrap_empty_env); - - if (argc > 1 && argv[1][0] == '-' && !opt_launcher) - { - /* Make sure wrapped_command is something we can validly pass to env(1) */ - if (strchr (argv[1], '=') != NULL) - flatpak_bwrap_add_args (wrapped_command, - "sh", "-euc", "exec \"$@\"", "sh", - NULL); - - /* Make sure bwrap will interpret wrapped_command as the end of its - * options */ - flatpak_bwrap_add_arg (wrapped_command, "env"); - } - - g_debug ("Setting arguments for wrapped command"); - flatpak_bwrap_append_argsv (wrapped_command, &argv[1], argc - 1); - /* If we are in a Flatpak environment we can't use bwrap directly */ if (is_flatpak_env) { @@ -2307,18 +2288,47 @@ main (int argc, if (opt_launcher) { + g_autoptr(FlatpakBwrap) launcher_argv = + flatpak_bwrap_new (flatpak_bwrap_empty_env); g_autofree gchar *pressure_vessel_launcher = g_build_filename (tools_dir, "pressure-vessel-launcher", NULL); g_debug ("Adding pressure-vessel-launcher '%s'...", pressure_vessel_launcher); - flatpak_bwrap_add_arg (bwrap, pressure_vessel_launcher); + flatpak_bwrap_add_arg (launcher_argv, pressure_vessel_launcher); g_debug ("Adding locked environment variables..."); - flatpak_bwrap_add_args (bwrap, "--lock-env-from-fd", lock_env_fd, NULL); + flatpak_bwrap_add_args (launcher_argv, + "--lock-env-from-fd", lock_env_fd, NULL); + + /* In --launcher mode, arguments after the "--" separator are + * passed to the launcher */ + flatpak_bwrap_append_argsv (launcher_argv, &argv[1], argc - 1); + + flatpak_bwrap_append_bwrap (bwrap, launcher_argv); } + else + { + g_autoptr(FlatpakBwrap) wrapped_command = + flatpak_bwrap_new (flatpak_bwrap_empty_env); + + if (argc > 1 && argv[1][0] == '-') + { + /* Make sure wrapped_command is something we can validly pass to env(1) */ + if (strchr (argv[1], '=') != NULL) + flatpak_bwrap_add_args (wrapped_command, + "sh", "-euc", "exec \"$@\"", "sh", + NULL); + + /* Make sure bwrap will interpret wrapped_command as the end of its + * options */ + flatpak_bwrap_add_arg (wrapped_command, "env"); + } - g_debug ("Adding wrapped command..."); - flatpak_bwrap_append_args (bwrap, wrapped_command->argv); + g_debug ("Setting arguments for wrapped command"); + flatpak_bwrap_append_argsv (wrapped_command, &argv[1], argc - 1); + + flatpak_bwrap_append_bwrap (bwrap, wrapped_command); + } if (is_flatpak_env) {