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

Side by Side Diff: base/commands.h

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 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/command_line_validator_unittest.cc ('k') | base/commands.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2005-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15 //
16 // Parse command-line options
17 //
18 // Class CommandParsing supports two kinds of command line options:
19 // 1) Traditional option, like "-b -v 100"
20 // 2) Name-value-pairs, like "b=&v=100"
21
22 #ifndef OMAHA_COMMON_COMMANDS_H_
23 #define OMAHA_COMMON_COMMANDS_H_
24
25 #include <atlstr.h>
26 #include <vector>
27 #include "base/basictypes.h"
28
29 namespace omaha {
30
31 enum ThreeValue {
32 VALUE_NOT_SET = 0,
33 TRUE_VALUE = 1,
34 FALSE_VALUE = 2
35 };
36
37 enum CommandOptionType {
38 COMMAND_OPTION_BOOL = 0x1,
39 COMMAND_OPTION_INT = 0x2,
40 COMMAND_OPTION_UINT = 0x3,
41 COMMAND_OPTION_STRING = 0x4,
42 COMMAND_OPTION_THREE = 0x5,
43 COMMAND_OPTION_UNESCAPE = 0x1000,
44 COMMAND_OPTION_MULTIPLE = 0x2000
45 };
46
47 #define COMMAND_OPTION_FLAGS_MASK 0x0FFF
48
49 struct CommandOption {
50 void Init(const TCHAR* name, CommandOptionType type,
51 void* value, int max_value_len);
52 void Copy(const CommandOption& option);
53
54 CString name;
55 CommandOptionType type;
56 void* value;
57 int max_value_len;
58 };
59
60 class CommandParsingSimple {
61 public:
62 // Static Helper function that splits a command line
63 // string into executable and any arguments
64 static HRESULT SplitExeAndArgs(const TCHAR* cmd_line,
65 CString* exe,
66 CString* args);
67
68 // Static Helper function that splits a command line
69 // string into executable and any arguments. Tries to
70 // guess the positioning of the EXE argument in cases
71 // where the EXE argument has spaces and is not enclosed
72 // in quotes. For instance, earlier versions of Google Desktop
73 // used to have an "Uninstall" string of the form:
74 // C:\Program Files\Google\Google Toolbar\GoogleToolbarSetup.exe -uninstall
75 // This function is meant to accomodate such cases.
76 static HRESULT SplitExeAndArgsGuess(const TCHAR* cmd_line,
77 CString* exe,
78 CString* args);
79
80 // Static Helper function that returns the number of arguments
81 // in the passed in cmd_line
82 static HRESULT GetNumberOfArgs(const TCHAR* cmd_line, uint32* number_of_args);
83
84 // Converted to a string
85 HRESULT ToString(CString* cmd_line);
86
87 protected:
88 // Constructor
89 CommandParsingSimple();
90
91 // Constructor
92 explicit CommandParsingSimple(TCHAR separator);
93
94 // Parse a command line string into args
95 HRESULT ParseSimple(const TCHAR* cmd_line);
96
97 // Get the arg at specified position from the command line
98 HRESULT GetAt(uint32 position, CString* arg);
99
100 // Remove the arg at specified position from the command line
101 HRESULT RemoveAt(uint32 position);
102
103 TCHAR separator_; // Separator
104 std::vector<CString> args_; // Splitted args
105
106
107 private:
108 DISALLOW_EVIL_CONSTRUCTORS(CommandParsingSimple);
109 };
110
111
112 class CommandParsing : public CommandParsingSimple {
113 public:
114 // Constructor
115 CommandParsing(CommandOption* options, int options_count);
116
117 CommandParsing(CommandOption* options, int options_count,
118 TCHAR separator, bool as_name_value_pair);
119
120 // Parse a command line string
121 HRESULT Parse(const TCHAR* cmd_line, bool ignore_unknown_args);
122
123 // Parse a list of command line arguments
124 HRESULT ParseArguments(int argc, TCHAR* argv[]);
125
126 // Remove an option from the command line
127 HRESULT Remove(const TCHAR* option_name);
128
129 private:
130 // Internal parsing
131 HRESULT InternalParse(bool ignore_unknown_args);
132
133 // Extract the name
134 HRESULT ExtractName(CString* name, std::vector<CString>::const_iterator* it);
135
136 // Extract the value
137 // Also validate the value length if necessary
138 HRESULT ExtractValue(const CommandOption& option,
139 CString* value,
140 std::vector<CString>::const_iterator* it,
141 const std::vector<CString>::const_iterator& end);
142
143 // Set the parsed value
144 template<class T>
145 static void SetParsedValue(const CommandOption& option, const T& value);
146
147 // Helper function to find an option in the CommandOption list
148 int FindOption(const TCHAR* option_name);
149
150 CommandOption* options_; // Command-line option list
151 int options_count_; // Count of command-line options
152 bool as_name_value_pair_; // Parse as name-value-pair
153
154 DISALLOW_EVIL_CONSTRUCTORS(CommandParsing);
155 };
156
157 } // namespace omaha
158
159 #endif // OMAHA_COMMON_COMMANDS_H_
OLDNEW
« no previous file with comments | « base/command_line_validator_unittest.cc ('k') | base/commands.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698