| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #elif defined(OS_POSIX) | 10 #elif defined(OS_POSIX) |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 return base::SysNativeMBToWide(argv_[0]); | 345 return base::SysNativeMBToWide(argv_[0]); |
| 346 } | 346 } |
| 347 #endif | 347 #endif |
| 348 | 348 |
| 349 #if defined(OS_POSIX) | 349 #if defined(OS_POSIX) |
| 350 std::string CommandLine::command_line_string() const { | 350 std::string CommandLine::command_line_string() const { |
| 351 return JoinString(argv_, ' '); | 351 return JoinString(argv_, ' '); |
| 352 } | 352 } |
| 353 #endif | 353 #endif |
| 354 | 354 |
| 355 // static | |
| 356 std::wstring CommandLine::PrefixedSwitchString( | |
| 357 const std::string& switch_string) { | |
| 358 #if defined(OS_WIN) | |
| 359 return kSwitchPrefixes[0] + ASCIIToWide(switch_string); | |
| 360 #else | |
| 361 return ASCIIToWide(kSwitchPrefixes[0] + switch_string); | |
| 362 #endif | |
| 363 } | |
| 364 | |
| 365 // static | |
| 366 std::wstring CommandLine::PrefixedSwitchStringWithValue( | |
| 367 const std::string& switch_string, const std::wstring& value_string) { | |
| 368 if (value_string.empty()) { | |
| 369 return PrefixedSwitchString(switch_string); | |
| 370 } | |
| 371 | |
| 372 return PrefixedSwitchString(switch_string + | |
| 373 #if defined(OS_WIN) | |
| 374 WideToASCII(kSwitchValueSeparator) | |
| 375 #else | |
| 376 kSwitchValueSeparator | |
| 377 #endif | |
| 378 ) + value_string; | |
| 379 } | |
| 380 | |
| 381 #if defined(OS_WIN) | 355 #if defined(OS_WIN) |
| 382 void CommandLine::AppendSwitch(const std::string& switch_string) { | 356 void CommandLine::AppendSwitch(const std::string& switch_string) { |
| 383 std::wstring prefixed_switch_string = PrefixedSwitchString(switch_string); | |
| 384 command_line_string_.append(L" "); | 357 command_line_string_.append(L" "); |
| 385 command_line_string_.append(prefixed_switch_string); | 358 command_line_string_.append(kSwitchPrefixes[0] + ASCIIToWide(switch_string)); |
| 386 switches_[switch_string] = L""; | 359 switches_[switch_string] = L""; |
| 387 } | 360 } |
| 388 | 361 |
| 389 void CommandLine::AppendSwitchASCII(const std::string& switch_string, | 362 void CommandLine::AppendSwitchASCII(const std::string& switch_string, |
| 390 const std::string& value_string) { | 363 const std::string& value_string) { |
| 391 AppendSwitchNative(switch_string, ASCIIToWide(value_string)); | 364 AppendSwitchNative(switch_string, ASCIIToWide(value_string)); |
| 392 } | 365 } |
| 393 | 366 |
| 394 void CommandLine::AppendSwitchNative(const std::string& switch_string, | 367 void CommandLine::AppendSwitchNative(const std::string& switch_string, |
| 395 const std::wstring& value_string) { | 368 const std::wstring& value_string) { |
| 396 std::wstring value_string_edit; | 369 std::wstring value_string_edit; |
| 397 | 370 |
| 398 // NOTE(jhughes): If the value contains a quotation mark at one | 371 // NOTE(jhughes): If the value contains a quotation mark at one |
| 399 // end but not both, you may get unusable output. | 372 // end but not both, you may get unusable output. |
| 400 if (!value_string.empty() && | 373 if (!value_string.empty() && |
| 401 (value_string.find(L" ") != std::wstring::npos) && | 374 (value_string.find(L" ") != std::wstring::npos) && |
| 402 (value_string[0] != L'"') && | 375 (value_string[0] != L'"') && |
| 403 (value_string[value_string.length() - 1] != L'"')) { | 376 (value_string[value_string.length() - 1] != L'"')) { |
| 404 // need to provide quotes | 377 // need to provide quotes |
| 405 value_string_edit = StringPrintf(L"\"%ls\"", value_string.c_str()); | 378 value_string_edit = StringPrintf(L"\"%ls\"", value_string.c_str()); |
| 406 } else { | 379 } else { |
| 407 value_string_edit = value_string; | 380 value_string_edit = value_string; |
| 408 } | 381 } |
| 409 | 382 |
| 410 std::wstring combined_switch_string = | 383 std::wstring combined_switch_string = |
| 411 PrefixedSwitchStringWithValue(switch_string, value_string_edit); | 384 kSwitchPrefixes[0] + ASCIIToWide(switch_string); |
| 385 if (!value_string_edit.empty()) |
| 386 combined_switch_string += kSwitchValueSeparator + value_string_edit; |
| 412 | 387 |
| 413 command_line_string_.append(L" "); | 388 command_line_string_.append(L" "); |
| 414 command_line_string_.append(combined_switch_string); | 389 command_line_string_.append(combined_switch_string); |
| 415 | 390 |
| 416 switches_[switch_string] = value_string; | 391 switches_[switch_string] = value_string; |
| 417 } | 392 } |
| 418 | 393 |
| 419 void CommandLine::AppendLooseValue(const std::wstring& value) { | 394 void CommandLine::AppendLooseValue(const std::wstring& value) { |
| 420 // TODO(evan): quoting? | 395 // TODO(evan): quoting? |
| 421 command_line_string_.append(L" "); | 396 command_line_string_.append(L" "); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 446 } | 421 } |
| 447 | 422 |
| 448 #elif defined(OS_POSIX) | 423 #elif defined(OS_POSIX) |
| 449 void CommandLine::AppendSwitch(const std::string& switch_string) { | 424 void CommandLine::AppendSwitch(const std::string& switch_string) { |
| 450 argv_.push_back(kSwitchPrefixes[0] + switch_string); | 425 argv_.push_back(kSwitchPrefixes[0] + switch_string); |
| 451 switches_[switch_string] = ""; | 426 switches_[switch_string] = ""; |
| 452 } | 427 } |
| 453 | 428 |
| 454 void CommandLine::AppendSwitchNative(const std::string& switch_string, | 429 void CommandLine::AppendSwitchNative(const std::string& switch_string, |
| 455 const std::string& value) { | 430 const std::string& value) { |
| 456 argv_.push_back(kSwitchPrefixes[0] + switch_string + | 431 std::string combined_switch_string = kSwitchPrefixes[0] + switch_string; |
| 457 kSwitchValueSeparator + value); | 432 if (!value.empty()) |
| 433 combined_switch_string += kSwitchValueSeparator + value; |
| 434 argv_.push_back(combined_switch_string); |
| 458 switches_[switch_string] = value; | 435 switches_[switch_string] = value; |
| 459 } | 436 } |
| 460 | 437 |
| 461 void CommandLine::AppendSwitchASCII(const std::string& switch_string, | 438 void CommandLine::AppendSwitchASCII(const std::string& switch_string, |
| 462 const std::string& value_string) { | 439 const std::string& value_string) { |
| 463 AppendSwitchNative(switch_string, value_string); | 440 AppendSwitchNative(switch_string, value_string); |
| 464 } | 441 } |
| 465 | 442 |
| 466 void CommandLine::AppendLooseValue(const std::wstring& value) { | 443 void CommandLine::AppendLooseValue(const std::wstring& value) { |
| 467 argv_.push_back(base::SysWideToNativeMB(value)); | 444 argv_.push_back(base::SysWideToNativeMB(value)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 if (source.HasSwitch(switches[i])) { | 479 if (source.HasSwitch(switches[i])) { |
| 503 StringType value = source.GetSwitchValueNative(switches[i]); | 480 StringType value = source.GetSwitchValueNative(switches[i]); |
| 504 AppendSwitchNative(switches[i], value); | 481 AppendSwitchNative(switches[i], value); |
| 505 } | 482 } |
| 506 } | 483 } |
| 507 } | 484 } |
| 508 | 485 |
| 509 // private | 486 // private |
| 510 CommandLine::CommandLine() { | 487 CommandLine::CommandLine() { |
| 511 } | 488 } |
| OLD | NEW |