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

Side by Side Diff: base/command_line.h

Issue 270062: Use ASCII strings for switch names. (Closed)
Patch Set: victory Created 11 years, 2 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
« no previous file with comments | « base/base_switches.cc ('k') | base/command_line.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 // This class works with command lines: building and parsing. 5 // This class works with command lines: building and parsing.
6 // Switches can optionally have a value attached using an equals sign, 6 // Switches can optionally have a value attached using an equals sign,
7 // as in "-switch=value". Arguments that aren't prefixed with a 7 // as in "-switch=value". Arguments that aren't prefixed with a
8 // switch prefix are considered "loose parameters". Switch names are 8 // switch prefix are considered "loose parameters". Switch names are
9 // case-insensitive. An argument of "--" will terminate switch 9 // case-insensitive. An argument of "--" will terminate switch
10 // parsing, causing everything after to be considered as loose 10 // parsing, causing everything after to be considered as loose
11 // parameters. 11 // parameters.
12 12
13 // There is a singleton read-only CommandLine that represents the command 13 // There is a singleton read-only CommandLine that represents the command
14 // line that the current process was started with. It must be initialized 14 // line that the current process was started with. It must be initialized
15 // in main() (or whatever the platform's equivalent function is). 15 // in main() (or whatever the platform's equivalent function is).
16 16
17 #ifndef BASE_COMMAND_LINE_H_ 17 #ifndef BASE_COMMAND_LINE_H_
18 #define BASE_COMMAND_LINE_H_ 18 #define BASE_COMMAND_LINE_H_
19 19
20 #include "build/build_config.h" 20 #include "build/build_config.h"
21 21
22 #include <map> 22 #include <map>
23 #include <string> 23 #include <string>
24 #include <vector> 24 #include <vector>
25 25
26 #include "base/basictypes.h" 26 #include "base/basictypes.h"
27 #include "base/file_path.h" 27 #include "base/file_path.h"
28 #include "base/logging.h" 28 #include "base/logging.h"
29 #include "base/string_util.h"
29 30
30 class InProcessBrowserTest; 31 class InProcessBrowserTest;
31 32
32 class CommandLine { 33 class CommandLine {
33 public: 34 public:
34 #if defined(OS_WIN) 35 #if defined(OS_WIN)
35 // Initialize by parsing the given command-line string. 36 // Initialize by parsing the given command-line string.
36 // The program name is assumed to be the first item in the string. 37 // The program name is assumed to be the first item in the string.
37 void ParseFromString(const std::wstring& command_line); 38 void ParseFromString(const std::wstring& command_line);
38 #elif defined(OS_POSIX) 39 #elif defined(OS_POSIX)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 // Get the singleton CommandLine representing the current process's 82 // Get the singleton CommandLine representing the current process's
82 // command line. Note: returned value is mutable, but not thread safe; 83 // command line. Note: returned value is mutable, but not thread safe;
83 // only mutate if you know what you're doing! 84 // only mutate if you know what you're doing!
84 static CommandLine* ForCurrentProcess() { 85 static CommandLine* ForCurrentProcess() {
85 DCHECK(current_process_commandline_); 86 DCHECK(current_process_commandline_);
86 return current_process_commandline_; 87 return current_process_commandline_;
87 } 88 }
88 89
89 // Returns true if this command line contains the given switch. 90 // Returns true if this command line contains the given switch.
90 // (Switch names are case-insensitive.) 91 // (Switch names are case-insensitive.)
91 bool HasSwitch(const std::wstring& switch_string) const; 92 bool HasSwitch(const std::string& switch_string) const;
93
94 // Deprecated version of the above.
95 bool HasSwitch(const std::wstring& switch_string) const {
96 return HasSwitch(WideToASCII(switch_string));
97 }
92 98
93 // Returns the value associated with the given switch. If the 99 // Returns the value associated with the given switch. If the
94 // switch has no value or isn't present, this method returns 100 // switch has no value or isn't present, this method returns
95 // the empty string. 101 // the empty string.
96 std::wstring GetSwitchValue(const std::wstring& switch_string) const; 102 std::wstring GetSwitchValue(const std::string& switch_string) const;
103 std::string GetSwitchValueASCII(const std::string& switch_string) const {
104 return WideToASCII(GetSwitchValue(switch_string));
105 }
106
107 // Deprecated version of the above.
108 std::wstring GetSwitchValue(const std::wstring& switch_string) const {
109 return GetSwitchValue(WideToASCII(switch_string));
110 }
97 111
98 // Get the number of switches in this process. 112 // Get the number of switches in this process.
99 size_t GetSwitchCount() const { return switches_.size(); } 113 size_t GetSwitchCount() const { return switches_.size(); }
100 114
101 // Get the remaining arguments to the command. 115 // Get the remaining arguments to the command.
102 // WARNING: this is incorrect on POSIX; we must do string conversions. 116 // WARNING: this is incorrect on POSIX; we must do string conversions.
103 std::vector<std::wstring> GetLooseValues() const; 117 std::vector<std::wstring> GetLooseValues() const;
104 118
105 #if defined(OS_WIN) 119 #if defined(OS_WIN)
106 // Returns the original command line string. 120 // Returns the original command line string.
(...skipping 11 matching lines...) Expand all
118 FilePath GetProgram() const { 132 FilePath GetProgram() const {
119 return FilePath::FromWStringHack(program()); 133 return FilePath::FromWStringHack(program());
120 } 134 }
121 135
122 // Returns the program part of the command line string (the first item). 136 // Returns the program part of the command line string (the first item).
123 // Deprecated version of the above. 137 // Deprecated version of the above.
124 std::wstring program() const; 138 std::wstring program() const;
125 139
126 // Return a copy of the string prefixed with a switch prefix. 140 // Return a copy of the string prefixed with a switch prefix.
127 // Used internally. 141 // Used internally.
128 static std::wstring PrefixedSwitchString(const std::wstring& switch_string); 142 static std::wstring PrefixedSwitchString(const std::string& switch_string);
129 143
130 // Return a copy of the string prefixed with a switch prefix, 144 // Return a copy of the string prefixed with a switch prefix,
131 // and appended with the given value. Used internally. 145 // and appended with the given value. Used internally.
132 static std::wstring PrefixedSwitchStringWithValue( 146 static std::wstring PrefixedSwitchStringWithValue(
133 const std::wstring& switch_string, 147 const std::string& switch_string,
134 const std::wstring& value_string); 148 const std::wstring& value_string);
135 149
136 // Appends the given switch string (preceded by a space and a switch 150 // Appends the given switch string (preceded by a space and a switch
137 // prefix) to the given string. 151 // prefix) to the given string.
138 void AppendSwitch(const std::wstring& switch_string); 152 void AppendSwitch(const std::string& switch_string);
139 153
140 // Appends the given switch string (preceded by a space and a switch 154 // Appends the given switch string (preceded by a space and a switch
141 // prefix) to the given string, with the given value attached. 155 // prefix) to the given string, with the given value attached.
142 void AppendSwitchWithValue(const std::wstring& switch_string, 156 void AppendSwitchWithValue(const std::string& switch_string,
143 const std::wstring& value_string); 157 const std::wstring& value_string);
158 void AppendSwitchWithValue(const std::string& switch_string,
159 const std::string& value_string) {
160 AppendSwitchWithValue(switch_string, ASCIIToWide(value_string));
161 }
144 162
145 // Append a loose value to the command line. 163 // Append a loose value to the command line.
146 void AppendLooseValue(const std::wstring& value); 164 void AppendLooseValue(const std::wstring& value);
147 165
148 // Append the arguments from another command line to this one. 166 // Append the arguments from another command line to this one.
149 // If |include_program| is true, include |other|'s program as well. 167 // If |include_program| is true, include |other|'s program as well.
150 void AppendArguments(const CommandLine& other, 168 void AppendArguments(const CommandLine& other,
151 bool include_program); 169 bool include_program);
152 170
153 // On POSIX systems it's common to run processes via a wrapper (like 171 // On POSIX systems it's common to run processes via a wrapper (like
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 std::vector<StringType> loose_values_; 221 std::vector<StringType> loose_values_;
204 222
205 // We allow copy constructors, because a common pattern is to grab a 223 // We allow copy constructors, because a common pattern is to grab a
206 // copy of the current process's command line and then add some 224 // copy of the current process's command line and then add some
207 // flags to it. E.g.: 225 // flags to it. E.g.:
208 // CommandLine cl(*CommandLine::ForCurrentProcess()); 226 // CommandLine cl(*CommandLine::ForCurrentProcess());
209 // cl.AppendSwitch(...); 227 // cl.AppendSwitch(...);
210 }; 228 };
211 229
212 #endif // BASE_COMMAND_LINE_H_ 230 #endif // BASE_COMMAND_LINE_H_
OLDNEW
« no previous file with comments | « base/base_switches.cc ('k') | base/command_line.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698