Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: base/command_line.cc

Issue 174139: Fix Issue 19689: Command line URL parameter does not support Chinese.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/app/chrome_dll_main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "base/command_line.h" 5 #include "base/command_line.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #endif 10 #endif
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 std::string switch_value; 120 std::string switch_value;
121 if (IsSwitch(arg, &switch_string, &switch_value)) { 121 if (IsSwitch(arg, &switch_string, &switch_value)) {
122 switches_[switch_string] = switch_value; 122 switches_[switch_string] = switch_value;
123 } else { 123 } else {
124 loose_values_.push_back(arg); 124 loose_values_.push_back(arg);
125 } 125 }
126 } 126 }
127 } 127 }
128 128
129 CommandLine::CommandLine(const std::wstring& program) { 129 CommandLine::CommandLine(const std::wstring& program) {
130 argv_.push_back(WideToASCII(program)); 130 argv_.push_back(base::SysWideToNativeMB(program));
131 } 131 }
132 #endif 132 #endif
133 133
134 // static 134 // static
135 bool CommandLine::IsSwitch(const StringType& parameter_string, 135 bool CommandLine::IsSwitch(const StringType& parameter_string,
136 std::string* switch_string, 136 std::string* switch_string,
137 StringType* switch_value) { 137 StringType* switch_value) {
138 switch_string->clear(); 138 switch_string->clear();
139 switch_value->clear(); 139 switch_value->clear();
140 140
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 217
218 std::map<std::string, StringType>::const_iterator result = 218 std::map<std::string, StringType>::const_iterator result =
219 switches_.find(WideToASCII(lowercased_switch)); 219 switches_.find(WideToASCII(lowercased_switch));
220 220
221 if (result == switches_.end()) { 221 if (result == switches_.end()) {
222 return L""; 222 return L"";
223 } else { 223 } else {
224 #if defined(OS_WIN) 224 #if defined(OS_WIN)
225 return result->second; 225 return result->second;
226 #else 226 #else
227 return ASCIIToWide(result->second); 227 return base::SysNativeMBToWide(result->second);
228 #endif 228 #endif
229 } 229 }
230 } 230 }
231 231
232 #if defined(OS_WIN) 232 #if defined(OS_WIN)
233 std::vector<std::wstring> CommandLine::GetLooseValues() const { 233 std::vector<std::wstring> CommandLine::GetLooseValues() const {
234 return loose_values_; 234 return loose_values_;
235 } 235 }
236 std::wstring CommandLine::program() const { 236 std::wstring CommandLine::program() const {
237 return program_; 237 return program_;
238 } 238 }
239 #else 239 #else
240 std::vector<std::wstring> CommandLine::GetLooseValues() const { 240 std::vector<std::wstring> CommandLine::GetLooseValues() const {
241 std::vector<std::wstring> values; 241 std::vector<std::wstring> values;
242 for (size_t i = 0; i < loose_values_.size(); ++i) 242 for (size_t i = 0; i < loose_values_.size(); ++i)
243 values.push_back(ASCIIToWide(loose_values_[i])); 243 values.push_back(base::SysNativeMBToWide(loose_values_[i]));
244 return values; 244 return values;
245 } 245 }
246 std::wstring CommandLine::program() const { 246 std::wstring CommandLine::program() const {
247 DCHECK(argv_.size() > 0); 247 DCHECK(argv_.size() > 0);
248 return ASCIIToWide(argv_[0]); 248 return base::SysNativeMBToWide(argv_[0]);
249 } 249 }
250 #endif 250 #endif
251 251
252 252
253 // static 253 // static
254 std::wstring CommandLine::PrefixedSwitchString( 254 std::wstring CommandLine::PrefixedSwitchString(
255 const std::wstring& switch_string) { 255 const std::wstring& switch_string) {
256 return StringPrintf(L"%ls%ls", 256 return StringPrintf(L"%ls%ls",
257 kSwitchPrefixes[0], 257 kSwitchPrefixes[0],
258 switch_string.c_str()); 258 switch_string.c_str());
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 #elif defined(OS_POSIX) 334 #elif defined(OS_POSIX)
335 void CommandLine::AppendSwitch(const std::wstring& switch_string) { 335 void CommandLine::AppendSwitch(const std::wstring& switch_string) {
336 std::string ascii_switch = WideToASCII(switch_string); 336 std::string ascii_switch = WideToASCII(switch_string);
337 argv_.push_back(kSwitchPrefixes[0] + ascii_switch); 337 argv_.push_back(kSwitchPrefixes[0] + ascii_switch);
338 switches_[ascii_switch] = ""; 338 switches_[ascii_switch] = "";
339 } 339 }
340 340
341 void CommandLine::AppendSwitchWithValue(const std::wstring& switch_string, 341 void CommandLine::AppendSwitchWithValue(const std::wstring& switch_string,
342 const std::wstring& value_string) { 342 const std::wstring& value_string) {
343 std::string ascii_switch = WideToASCII(switch_string); 343 std::string ascii_switch = WideToASCII(switch_string);
344 std::string ascii_value = WideToASCII(value_string); 344 std::string mb_value = base::SysWideToNativeMB(value_string);
345 345
346 argv_.push_back(kSwitchPrefixes[0] + ascii_switch + 346 argv_.push_back(kSwitchPrefixes[0] + ascii_switch +
347 kSwitchValueSeparator + ascii_value); 347 kSwitchValueSeparator + mb_value);
348 switches_[ascii_switch] = ascii_value; 348 switches_[ascii_switch] = mb_value;
349 } 349 }
350 350
351 void CommandLine::AppendLooseValue(const std::wstring& value) { 351 void CommandLine::AppendLooseValue(const std::wstring& value) {
352 argv_.push_back(WideToASCII(value)); 352 argv_.push_back(base::SysWideToNativeMB(value));
353 } 353 }
354 354
355 void CommandLine::AppendArguments(const CommandLine& other, 355 void CommandLine::AppendArguments(const CommandLine& other,
356 bool include_program) { 356 bool include_program) {
357 // Verify include_program is used correctly. 357 // Verify include_program is used correctly.
358 // Logic could be shorter but this is clearer. 358 // Logic could be shorter but this is clearer.
359 DCHECK(include_program ? !other.program().empty() : other.program().empty()); 359 DCHECK(include_program ? !other.program().empty() : other.program().empty());
360 360
361 size_t first_arg = include_program ? 0 : 1; 361 size_t first_arg = include_program ? 0 : 1;
362 for (size_t i = first_arg; i < other.argv_.size(); ++i) 362 for (size_t i = first_arg; i < other.argv_.size(); ++i)
363 argv_.push_back(other.argv_[i]); 363 argv_.push_back(other.argv_[i]);
364 std::map<std::string, StringType>::const_iterator i; 364 std::map<std::string, StringType>::const_iterator i;
365 for (i = other.switches_.begin(); i != other.switches_.end(); ++i) 365 for (i = other.switches_.begin(); i != other.switches_.end(); ++i)
366 switches_[i->first] = i->second; 366 switches_[i->first] = i->second;
367 } 367 }
368 368
369 void CommandLine::PrependWrapper(const std::wstring& wrapper_wide) { 369 void CommandLine::PrependWrapper(const std::wstring& wrapper_wide) {
370 // The wrapper may have embedded arguments (like "gdb --args"). In this case, 370 // The wrapper may have embedded arguments (like "gdb --args"). In this case,
371 // we don't pretend to do anything fancy, we just split on spaces. 371 // we don't pretend to do anything fancy, we just split on spaces.
372 const std::string wrapper = WideToASCII(wrapper_wide); 372 const std::string wrapper = base::SysWideToNativeMB(wrapper_wide);
373 std::vector<std::string> wrapper_and_args; 373 std::vector<std::string> wrapper_and_args;
374 SplitString(wrapper, ' ', &wrapper_and_args); 374 SplitString(wrapper, ' ', &wrapper_and_args);
375 argv_.insert(argv_.begin(), wrapper_and_args.begin(), wrapper_and_args.end()); 375 argv_.insert(argv_.begin(), wrapper_and_args.begin(), wrapper_and_args.end());
376 } 376 }
377 377
378 #endif 378 #endif
OLDNEW
« no previous file with comments | « no previous file | chrome/app/chrome_dll_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698