Uniform when to use args or argv
This commit is contained in:
parent
0d066de53e
commit
9a08cbce27
4 changed files with 24 additions and 23 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include "atom/browser/atom_browser_main_parts.h"
|
#include "atom/browser/atom_browser_main_parts.h"
|
||||||
#include "atom/browser/native_window.h"
|
#include "atom/browser/native_window.h"
|
||||||
#include "atom/browser/window_list.h"
|
#include "atom/browser/window_list.h"
|
||||||
|
#include "atom/common/atom_command_line.h"
|
||||||
#include "base/files/file_util.h"
|
#include "base/files/file_util.h"
|
||||||
#include "base/message_loop/message_loop.h"
|
#include "base/message_loop/message_loop.h"
|
||||||
#include "base/path_service.h"
|
#include "base/path_service.h"
|
||||||
|
@ -35,13 +36,16 @@ Browser* Browser::Get() {
|
||||||
|
|
||||||
bool Browser::Relaunch(const base::FilePath& app,
|
bool Browser::Relaunch(const base::FilePath& app,
|
||||||
const relauncher::StringVector& args) {
|
const relauncher::StringVector& args) {
|
||||||
|
relauncher::StringVector argv;
|
||||||
if (app.empty()) {
|
if (app.empty()) {
|
||||||
base::FilePath exe_path;
|
base::FilePath exe_path;
|
||||||
PathService::Get(base::FILE_EXE, &exe_path);
|
PathService::Get(base::FILE_EXE, &exe_path);
|
||||||
return relauncher::RelaunchApp(exe_path, args);
|
argv.push_back(exe_path.value());
|
||||||
} else {
|
} else {
|
||||||
return relauncher::RelaunchApp(app, args);
|
argv.push_back(app.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return relauncher::RelaunchApp(argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Browser::Quit() {
|
void Browser::Quit() {
|
||||||
|
|
|
@ -34,7 +34,7 @@ const CharType* kRelauncherArgSeparator = FILE_PATH_LITERAL("---");
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
bool RelaunchApp(const base::FilePath& app, const StringVector& args) {
|
bool RelaunchApp(const StringVector& argv) {
|
||||||
// Use the currently-running application's helper process. The automatic
|
// Use the currently-running application's helper process. The automatic
|
||||||
// update feature is careful to leave the currently-running version alone,
|
// update feature is careful to leave the currently-running version alone,
|
||||||
// so this is safe even if the relaunch is the result of an update having
|
// so this is safe even if the relaunch is the result of an update having
|
||||||
|
@ -48,24 +48,22 @@ bool RelaunchApp(const base::FilePath& app, const StringVector& args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
StringVector relauncher_args;
|
StringVector relauncher_args;
|
||||||
return RelaunchAppWithHelper(app, child_path, relauncher_args, args);
|
return RelaunchAppWithHelper(child_path, relauncher_args, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RelaunchAppWithHelper(const base::FilePath& app,
|
bool RelaunchAppWithHelper(const base::FilePath& helper,
|
||||||
const base::FilePath& helper,
|
|
||||||
const StringVector& relauncher_args,
|
const StringVector& relauncher_args,
|
||||||
const StringVector& args) {
|
const StringVector& argv) {
|
||||||
StringVector relaunch_args;
|
StringVector relaunch_argv;
|
||||||
relaunch_args.push_back(helper.value());
|
relaunch_argv.push_back(helper.value());
|
||||||
relaunch_args.push_back(internal::kRelauncherTypeArg);
|
relaunch_argv.push_back(internal::kRelauncherTypeArg);
|
||||||
|
|
||||||
relaunch_args.insert(relaunch_args.end(),
|
relaunch_argv.insert(relaunch_argv.end(),
|
||||||
relauncher_args.begin(), relauncher_args.end());
|
relauncher_args.begin(), relauncher_args.end());
|
||||||
|
|
||||||
relaunch_args.push_back(internal::kRelauncherArgSeparator);
|
relaunch_argv.push_back(internal::kRelauncherArgSeparator);
|
||||||
|
|
||||||
relaunch_args.push_back(app.value());
|
relaunch_argv.insert(relaunch_argv.end(), argv.begin(), argv.end());
|
||||||
relaunch_args.insert(relaunch_args.end(), args.begin(), args.end());
|
|
||||||
|
|
||||||
#if defined(OS_POSIX)
|
#if defined(OS_POSIX)
|
||||||
int pipe_fds[2];
|
int pipe_fds[2];
|
||||||
|
@ -99,10 +97,10 @@ bool RelaunchAppWithHelper(const base::FilePath& app,
|
||||||
base::LaunchOptions options;
|
base::LaunchOptions options;
|
||||||
#if defined(OS_POSIX)
|
#if defined(OS_POSIX)
|
||||||
options.fds_to_remap = &fd_map;
|
options.fds_to_remap = &fd_map;
|
||||||
base::Process process = base::LaunchProcess(relaunch_args, options);
|
base::Process process = base::LaunchProcess(relaunch_argv, options);
|
||||||
#elif defined(OS_WIN)
|
#elif defined(OS_WIN)
|
||||||
base::Process process = base::LaunchProcess(
|
base::Process process = base::LaunchProcess(
|
||||||
base::JoinString(relaunch_args, L" "), options);
|
base::JoinString(relaunch_argv, L" "), options);
|
||||||
#endif
|
#endif
|
||||||
if (!process.IsValid()) {
|
if (!process.IsValid()) {
|
||||||
LOG(ERROR) << "base::LaunchProcess failed";
|
LOG(ERROR) << "base::LaunchProcess failed";
|
||||||
|
@ -158,15 +156,15 @@ int RelauncherMain(const content::MainFunctionParams& main_parameters) {
|
||||||
|
|
||||||
// Figure out what to execute, what arguments to pass it, and whether to
|
// Figure out what to execute, what arguments to pass it, and whether to
|
||||||
// start it in the background.
|
// start it in the background.
|
||||||
bool in_relaunch_args = false;
|
bool in_relauncher_args = false;
|
||||||
StringType relaunch_executable;
|
StringType relaunch_executable;
|
||||||
StringVector relauncher_args;
|
StringVector relauncher_args;
|
||||||
StringVector launch_argv;
|
StringVector launch_argv;
|
||||||
for (size_t argv_index = 2; argv_index < argv.size(); ++argv_index) {
|
for (size_t argv_index = 2; argv_index < argv.size(); ++argv_index) {
|
||||||
const StringType& arg(argv[argv_index]);
|
const StringType& arg(argv[argv_index]);
|
||||||
if (!in_relaunch_args) {
|
if (!in_relauncher_args) {
|
||||||
if (arg == internal::kRelauncherArgSeparator) {
|
if (arg == internal::kRelauncherArgSeparator) {
|
||||||
in_relaunch_args = true;
|
in_relauncher_args = true;
|
||||||
} else {
|
} else {
|
||||||
relauncher_args.push_back(arg);
|
relauncher_args.push_back(arg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ using StringVector = base::CommandLine::StringVector;
|
||||||
// successfully. Returns true on success, although some failures can occur
|
// successfully. Returns true on success, although some failures can occur
|
||||||
// after this function returns true if, for example, they occur within the
|
// after this function returns true if, for example, they occur within the
|
||||||
// relauncher process. Returns false when the relaunch definitely failed.
|
// relauncher process. Returns false when the relaunch definitely failed.
|
||||||
bool RelaunchApp(const base::FilePath& app, const StringVector& args);
|
bool RelaunchApp(const StringVector& argv);
|
||||||
|
|
||||||
// Identical to RelaunchApp, but uses |helper| as the path to the relauncher
|
// Identical to RelaunchApp, but uses |helper| as the path to the relauncher
|
||||||
// process, and allows additional arguments to be supplied to the relauncher
|
// process, and allows additional arguments to be supplied to the relauncher
|
||||||
|
@ -70,8 +70,7 @@ bool RelaunchApp(const base::FilePath& app, const StringVector& args);
|
||||||
// able to communicate with one another. This variant can be useful to
|
// able to communicate with one another. This variant can be useful to
|
||||||
// relaunch the same version of Chrome from another location, using that
|
// relaunch the same version of Chrome from another location, using that
|
||||||
// location's helper.
|
// location's helper.
|
||||||
bool RelaunchAppWithHelper(const base::FilePath& app,
|
bool RelaunchAppWithHelper(const base::FilePath& helper,
|
||||||
const base::FilePath& helper,
|
|
||||||
const StringVector& relauncher_args,
|
const StringVector& relauncher_args,
|
||||||
const StringVector& args);
|
const StringVector& args);
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ int LaunchProgram(const StringVector& relauncher_args,
|
||||||
const StringVector& argv) {
|
const StringVector& argv) {
|
||||||
base::LaunchOptions options;
|
base::LaunchOptions options;
|
||||||
base::Process process =
|
base::Process process =
|
||||||
base::LaunchProcess(base::JoinString(args, L" "), options);
|
base::LaunchProcess(base::JoinString(argv, L" "), options);
|
||||||
return process.IsValid() ? 0 : 1;
|
return process.IsValid() ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue