| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <ostream> | 8 #include <ostream> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 #if defined(OS_WIN) | 98 #if defined(OS_WIN) |
| 99 return base::StringToLowerASCII(string); | 99 return base::StringToLowerASCII(string); |
| 100 #elif defined(OS_POSIX) | 100 #elif defined(OS_POSIX) |
| 101 return string; | 101 return string; |
| 102 #endif | 102 #endif |
| 103 } | 103 } |
| 104 | 104 |
| 105 | 105 |
| 106 #if defined(OS_WIN) | 106 #if defined(OS_WIN) |
| 107 // Quote a string as necessary for CommandLineToArgvW compatiblity *on Windows*. | 107 // Quote a string as necessary for CommandLineToArgvW compatiblity *on Windows*. |
| 108 std::wstring QuoteForCommandLineToArgvW(const std::wstring& arg) { | 108 base::string16 QuoteForCommandLineToArgvW(const base::string16& arg) { |
| 109 // We follow the quoting rules of CommandLineToArgvW. | 109 // We follow the quoting rules of CommandLineToArgvW. |
| 110 // http://msdn.microsoft.com/en-us/library/17w5ykft.aspx | 110 // http://msdn.microsoft.com/en-us/library/17w5ykft.aspx |
| 111 if (arg.find_first_of(L" \\\"") == std::wstring::npos) { | 111 if (arg.find_first_of(L" \\\"") == base::string16::npos) { |
| 112 // No quoting necessary. | 112 // No quoting necessary. |
| 113 return arg; | 113 return arg; |
| 114 } | 114 } |
| 115 | 115 |
| 116 std::wstring out; | 116 base::string16 out; |
| 117 out.push_back(L'"'); | 117 out.push_back(L'"'); |
| 118 for (size_t i = 0; i < arg.size(); ++i) { | 118 for (size_t i = 0; i < arg.size(); ++i) { |
| 119 if (arg[i] == '\\') { | 119 if (arg[i] == '\\') { |
| 120 // Find the extent of this run of backslashes. | 120 // Find the extent of this run of backslashes. |
| 121 size_t start = i, end = start + 1; | 121 size_t start = i, end = start + 1; |
| 122 for (; end < arg.size() && arg[end] == '\\'; ++end) | 122 for (; end < arg.size() && arg[end] == '\\'; ++end) |
| 123 /* empty */; | 123 /* empty */; |
| 124 size_t backslash_count = end - start; | 124 size_t backslash_count = end - start; |
| 125 | 125 |
| 126 // Backslashes are escapes only if the run is followed by a double quote. | 126 // Backslashes are escapes only if the run is followed by a double quote. |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 return current_process_commandline_; | 217 return current_process_commandline_; |
| 218 } | 218 } |
| 219 | 219 |
| 220 // static | 220 // static |
| 221 bool CommandLine::InitializedForCurrentProcess() { | 221 bool CommandLine::InitializedForCurrentProcess() { |
| 222 return !!current_process_commandline_; | 222 return !!current_process_commandline_; |
| 223 } | 223 } |
| 224 | 224 |
| 225 #if defined(OS_WIN) | 225 #if defined(OS_WIN) |
| 226 // static | 226 // static |
| 227 CommandLine CommandLine::FromString(const std::wstring& command_line) { | 227 CommandLine CommandLine::FromString(const base::string16& command_line) { |
| 228 CommandLine cmd(NO_PROGRAM); | 228 CommandLine cmd(NO_PROGRAM); |
| 229 cmd.ParseFromString(command_line); | 229 cmd.ParseFromString(command_line); |
| 230 return cmd; | 230 return cmd; |
| 231 } | 231 } |
| 232 #endif | 232 #endif |
| 233 | 233 |
| 234 void CommandLine::InitFromArgv(int argc, | 234 void CommandLine::InitFromArgv(int argc, |
| 235 const CommandLine::CharType* const* argv) { | 235 const CommandLine::CharType* const* argv) { |
| 236 StringVector new_argv; | 236 StringVector new_argv; |
| 237 for (int i = 0; i < argc; ++i) | 237 for (int i = 0; i < argc; ++i) |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 // The wrapper may have embedded arguments (like "gdb --args"). In this case, | 415 // The wrapper may have embedded arguments (like "gdb --args"). In this case, |
| 416 // we don't pretend to do anything fancy, we just split on spaces. | 416 // we don't pretend to do anything fancy, we just split on spaces. |
| 417 StringVector wrapper_argv; | 417 StringVector wrapper_argv; |
| 418 SplitString(wrapper, FILE_PATH_LITERAL(' '), &wrapper_argv); | 418 SplitString(wrapper, FILE_PATH_LITERAL(' '), &wrapper_argv); |
| 419 // Prepend the wrapper and update the switches/arguments |begin_args_|. | 419 // Prepend the wrapper and update the switches/arguments |begin_args_|. |
| 420 argv_.insert(argv_.begin(), wrapper_argv.begin(), wrapper_argv.end()); | 420 argv_.insert(argv_.begin(), wrapper_argv.begin(), wrapper_argv.end()); |
| 421 begin_args_ += wrapper_argv.size(); | 421 begin_args_ += wrapper_argv.size(); |
| 422 } | 422 } |
| 423 | 423 |
| 424 #if defined(OS_WIN) | 424 #if defined(OS_WIN) |
| 425 void CommandLine::ParseFromString(const std::wstring& command_line) { | 425 void CommandLine::ParseFromString(const base::string16& command_line) { |
| 426 std::wstring command_line_string; | 426 base::string16 command_line_string; |
| 427 TrimWhitespace(command_line, TRIM_ALL, &command_line_string); | 427 TrimWhitespace(command_line, TRIM_ALL, &command_line_string); |
| 428 if (command_line_string.empty()) | 428 if (command_line_string.empty()) |
| 429 return; | 429 return; |
| 430 | 430 |
| 431 int num_args = 0; | 431 int num_args = 0; |
| 432 wchar_t** args = NULL; | 432 wchar_t** args = NULL; |
| 433 args = ::CommandLineToArgvW(command_line_string.c_str(), &num_args); | 433 args = ::CommandLineToArgvW(command_line_string.c_str(), &num_args); |
| 434 | 434 |
| 435 DPLOG_IF(FATAL, !args) << "CommandLineToArgvW failed on command line: " | 435 DPLOG_IF(FATAL, !args) << "CommandLineToArgvW failed on command line: " |
| 436 << UTF16ToUTF8(command_line); | 436 << UTF16ToUTF8(command_line); |
| 437 InitFromArgv(num_args, args); | 437 InitFromArgv(num_args, args); |
| 438 LocalFree(args); | 438 LocalFree(args); |
| 439 } | 439 } |
| 440 #endif | 440 #endif |
| 441 | 441 |
| 442 } // namespace base | 442 } // namespace base |
| OLD | NEW |