OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/installer/util/product.h" | 5 #include "chrome/installer/util/product.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
72 int32* exit_code) const { | 72 int32* exit_code) const { |
73 if (application_path.empty()) | 73 if (application_path.empty()) |
74 return false; | 74 return false; |
75 | 75 |
76 CommandLine cmd(application_path.Append(installer::kChromeExe)); | 76 CommandLine cmd(application_path.Append(installer::kChromeExe)); |
77 cmd.AppendArguments(options, false); | 77 cmd.AppendArguments(options, false); |
78 | 78 |
79 bool success = false; | 79 bool success = false; |
80 STARTUPINFOW si = { sizeof(si) }; | 80 STARTUPINFOW si = { sizeof(si) }; |
81 PROCESS_INFORMATION pi = {0}; | 81 PROCESS_INFORMATION pi = {0}; |
82 // Cast away constness of the command_line_string() since CreateProcess | 82 // Create a writable copy of the command line string, since CreateProcess |
83 // might modify the string (insert \0 to separate the program from the | 83 // might modify the string (insert \0 to separate the program from the |
84 // arguments). Since we're not using the cmd variable beyond this point | 84 // arguments). Since we're not using the cmd variable beyond this point |
grt (UTC plus 2)
2011/07/19 03:19:34
The "Since we're not using..." comment isn't relev
msw
2011/07/19 07:14:26
Done.
| |
85 // we don't care. | 85 // we don't care. |
86 scoped_ptr_malloc<wchar_t> writable_command_line_string( | |
grt (UTC plus 2)
2011/07/19 03:19:34
Why not:
std::wstring writable_command_line_string
msw
2011/07/19 07:14:26
Done.
Evan Martin
2011/07/19 14:35:05
Oh yeah, should have remembered this earlier:
http
| |
87 ::_wcsdup(cmd.GetCommandLineString().c_str())); | |
86 if (!::CreateProcess(cmd.GetProgram().value().c_str(), | 88 if (!::CreateProcess(cmd.GetProgram().value().c_str(), |
87 const_cast<wchar_t*>(cmd.command_line_string().c_str()), | 89 writable_command_line_string.get(), |
88 NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, | 90 NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, |
89 &si, &pi)) { | 91 &si, &pi)) { |
90 PLOG(ERROR) << "Failed to launch: " << cmd.command_line_string(); | 92 PLOG(ERROR) << "Failed to launch: " << writable_command_line_string.get(); |
grt (UTC plus 2)
2011/07/19 03:19:34
How about either cmd.GetCommandLineString() (to lo
msw
2011/07/19 07:14:26
Done.
| |
91 } else { | 93 } else { |
92 ::CloseHandle(pi.hThread); | 94 ::CloseHandle(pi.hThread); |
93 | 95 |
94 DWORD ret = ::WaitForSingleObject(pi.hProcess, INFINITE); | 96 DWORD ret = ::WaitForSingleObject(pi.hProcess, INFINITE); |
95 DLOG_IF(ERROR, ret != WAIT_OBJECT_0) | 97 DLOG_IF(ERROR, ret != WAIT_OBJECT_0) |
96 << "Unexpected return value from WaitForSingleObject: " << ret; | 98 << "Unexpected return value from WaitForSingleObject: " << ret; |
97 if (::GetExitCodeProcess(pi.hProcess, &ret)) { | 99 if (::GetExitCodeProcess(pi.hProcess, &ret)) { |
98 DCHECK(ret != STILL_ACTIVE); | 100 DCHECK(ret != STILL_ACTIVE); |
99 success = true; | 101 success = true; |
100 if (exit_code) | 102 if (exit_code) |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 | 145 |
144 void Product::AppendRenameFlags(CommandLine* command_line) const { | 146 void Product::AppendRenameFlags(CommandLine* command_line) const { |
145 operations_->AppendRenameFlags(options_, command_line); | 147 operations_->AppendRenameFlags(options_, command_line); |
146 } | 148 } |
147 | 149 |
148 bool Product::SetChannelFlags(bool set, ChannelInfo* channel_info) const { | 150 bool Product::SetChannelFlags(bool set, ChannelInfo* channel_info) const { |
149 return operations_->SetChannelFlags(options_, set, channel_info); | 151 return operations_->SetChannelFlags(options_, set, channel_info); |
150 } | 152 } |
151 | 153 |
152 } // namespace installer | 154 } // namespace installer |
OLD | NEW |