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

Side by Side Diff: base/command_line.cc

Issue 19740: Merge r2876 to the 1.0 release branch.... (Closed) Base URL: svn://chrome-svn/chrome/branches/release_154.next/src/
Patch Set: Created 11 years, 10 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 | « base/command_line.h ('k') | base/command_line_unittest.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 11 matching lines...) Expand all
22 // Since we use a lazy match, make sure that longer versions (like L"--") 22 // Since we use a lazy match, make sure that longer versions (like L"--")
23 // are listed before shorter versions (like L"-") of similar prefixes. 23 // are listed before shorter versions (like L"-") of similar prefixes.
24 #if defined(OS_WIN) 24 #if defined(OS_WIN)
25 const wchar_t* const CommandLine::kSwitchPrefixes[] = {L"--", L"-", L"/"}; 25 const wchar_t* const CommandLine::kSwitchPrefixes[] = {L"--", L"-", L"/"};
26 #elif defined(OS_POSIX) 26 #elif defined(OS_POSIX)
27 // Unixes don't use slash as a switch. 27 // Unixes don't use slash as a switch.
28 const wchar_t* const CommandLine::kSwitchPrefixes[] = {L"--", L"-"}; 28 const wchar_t* const CommandLine::kSwitchPrefixes[] = {L"--", L"-"};
29 #endif 29 #endif
30 30
31 const wchar_t CommandLine::kSwitchValueSeparator[] = L"="; 31 const wchar_t CommandLine::kSwitchValueSeparator[] = L"=";
32 const wchar_t CommandLine::kSwitchTerminator[] = L"--";
32 33
33 // Needed to avoid a typecast on the tolower() function pointer in Lowercase(). 34 // Needed to avoid a typecast on the tolower() function pointer in Lowercase().
34 // MSVC accepts it as-is but GCC requires the typecast. 35 // MSVC accepts it as-is but GCC requires the typecast.
35 static int ToLower(int c) { 36 static int ToLower(int c) {
36 return tolower(c); 37 return tolower(c);
37 } 38 }
38 39
39 static void Lowercase(wstring* parameter) { 40 static void Lowercase(wstring* parameter) {
40 transform(parameter->begin(), parameter->end(), parameter->begin(), 41 transform(parameter->begin(), parameter->end(), parameter->begin(),
41 ToLower); 42 ToLower);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 return; 82 return;
82 83
83 int num_args = 0; 84 int num_args = 0;
84 wchar_t** args = NULL; 85 wchar_t** args = NULL;
85 86
86 args = CommandLineToArgvW(command_line_string_.c_str(), &num_args); 87 args = CommandLineToArgvW(command_line_string_.c_str(), &num_args);
87 88
88 // Populate program_ with the trimmed version of the first arg. 89 // Populate program_ with the trimmed version of the first arg.
89 TrimWhitespace(args[0], TRIM_ALL, &program_); 90 TrimWhitespace(args[0], TRIM_ALL, &program_);
90 91
92 bool parse_switches = true;
91 for (int i = 1; i < num_args; ++i) { 93 for (int i = 1; i < num_args; ++i) {
92 wstring arg; 94 wstring arg;
93 TrimWhitespace(args[i], TRIM_ALL, &arg); 95 TrimWhitespace(args[i], TRIM_ALL, &arg);
94 96
97 if (!parse_switches) {
98 loose_values_.push_back(arg);
99 continue;
100 }
101
102 if (arg == kSwitchTerminator) {
103 parse_switches = false;
104 continue;
105 }
106
95 wstring switch_string; 107 wstring switch_string;
96 wstring switch_value; 108 wstring switch_value;
97 if (IsSwitch(arg, &switch_string, &switch_value)) { 109 if (IsSwitch(arg, &switch_string, &switch_value)) {
98 switches_[switch_string] = switch_value; 110 switches_[switch_string] = switch_value;
99 } else { 111 } else {
100 loose_values_.push_back(arg); 112 loose_values_.push_back(arg);
101 } 113 }
102 } 114 }
103 115
104 if (args) 116 if (args)
105 LocalFree(args); 117 LocalFree(args);
106 } 118 }
107 119
108 #elif defined(OS_POSIX) 120 #elif defined(OS_POSIX)
109 // Does the actual parsing of the command line. 121 // Does the actual parsing of the command line.
110 void Init(int argc, const char* const* argv) { 122 void Init(int argc, const char* const* argv) {
111 if (argc < 1) 123 if (argc < 1)
112 return; 124 return;
113 program_ = base::SysNativeMBToWide(argv[0]); 125 program_ = base::SysNativeMBToWide(argv[0]);
114 command_line_string_ = program_; 126 command_line_string_ = program_;
115 127
128 bool parse_switches = true;
116 for (int i = 1; i < argc; ++i) { 129 for (int i = 1; i < argc; ++i) {
117 std::wstring arg = base::SysNativeMBToWide(argv[i]); 130 std::wstring arg = base::SysNativeMBToWide(argv[i]);
118 command_line_string_.append(L" "); 131 command_line_string_.append(L" ");
119 command_line_string_.append(arg); 132 command_line_string_.append(arg);
120 133
134 if (!parse_switches) {
135 loose_values_.push_back(arg);
136 continue;
137 }
138
139 if (arg == kSwitchTerminator) {
140 parse_switches = false;
141 continue;
142 }
143
121 wstring switch_string; 144 wstring switch_string;
122 wstring switch_value; 145 wstring switch_value;
123 if (IsSwitch(arg, &switch_string, &switch_value)) { 146 if (IsSwitch(arg, &switch_string, &switch_value)) {
124 switches_[switch_string] = switch_value; 147 switches_[switch_string] = switch_value;
125 } else { 148 } else {
126 loose_values_.push_back(arg); 149 loose_values_.push_back(arg);
127 } 150 }
128 } 151 }
129 } 152 }
130 #endif 153 #endif
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 if ((value_string.find(L" ") != std::wstring::npos) && 306 if ((value_string.find(L" ") != std::wstring::npos) &&
284 (value_string[0] != L'"') && 307 (value_string[0] != L'"') &&
285 (value_string[value_string.length() - 1] != L'"')) { 308 (value_string[value_string.length() - 1] != L'"')) {
286 // need to provide quotes 309 // need to provide quotes
287 StringAppendF(command_line_string, L"\"%ls\"", value_string.c_str()); 310 StringAppendF(command_line_string, L"\"%ls\"", value_string.c_str());
288 } else { 311 } else {
289 command_line_string->append(value_string); 312 command_line_string->append(value_string);
290 } 313 }
291 } 314 }
292 315
OLDNEW
« no previous file with comments | « base/command_line.h ('k') | base/command_line_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698