OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2006 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 printf(" current value: "); | 99 printf(" current value: "); |
100 PrintFlagValue(type_, variable_); | 100 PrintFlagValue(type_, variable_); |
101 } | 101 } |
102 printf("\n"); | 102 printf("\n"); |
103 } | 103 } |
104 | 104 |
105 | 105 |
106 // ----------------------------------------------------------------------------- | 106 // ----------------------------------------------------------------------------- |
107 // Implementation of FlagList | 107 // Implementation of FlagList |
108 | 108 |
109 Flag* FlagList::list_ = NULL; | 109 Flag* FlagList::list_ = nullptr; |
110 | |
111 | 110 |
112 FlagList::FlagList() { | 111 FlagList::FlagList() { |
113 list_ = NULL; | 112 list_ = nullptr; |
114 } | 113 } |
115 | 114 |
116 void FlagList::Print(const char* file, bool print_current_value) { | 115 void FlagList::Print(const char* file, bool print_current_value) { |
117 // Since flag registration is likely by file (= C++ file), | 116 // Since flag registration is likely by file (= C++ file), |
118 // we don't need to sort by file and still get grouped output. | 117 // we don't need to sort by file and still get grouped output. |
119 const char* current = NULL; | 118 const char* current = nullptr; |
120 for (Flag* f = list_; f != NULL; f = f->next()) { | 119 for (Flag* f = list_; f != nullptr; f = f->next()) { |
121 if (file == NULL || file == f->file()) { | 120 if (file == nullptr || file == f->file()) { |
122 if (current != f->file()) { | 121 if (current != f->file()) { |
123 printf("Flags from %s:\n", f->file()); | 122 printf("Flags from %s:\n", f->file()); |
124 current = f->file(); | 123 current = f->file(); |
125 } | 124 } |
126 f->Print(print_current_value); | 125 f->Print(print_current_value); |
127 } | 126 } |
128 } | 127 } |
129 } | 128 } |
130 | 129 |
131 | 130 |
132 Flag* FlagList::Lookup(const char* name) { | 131 Flag* FlagList::Lookup(const char* name) { |
133 Flag* f = list_; | 132 Flag* f = list_; |
134 while (f != NULL && strcmp(name, f->name()) != 0) | 133 while (f != nullptr && strcmp(name, f->name()) != 0) |
135 f = f->next(); | 134 f = f->next(); |
136 return f; | 135 return f; |
137 } | 136 } |
138 | 137 |
139 | 138 |
140 void FlagList::SplitArgument(const char* arg, | 139 void FlagList::SplitArgument(const char* arg, |
141 char* buffer, int buffer_size, | 140 char* buffer, int buffer_size, |
142 const char** name, const char** value, | 141 const char** name, const char** value, |
143 bool* is_bool) { | 142 bool* is_bool) { |
144 *name = NULL; | 143 *name = nullptr; |
145 *value = NULL; | 144 *value = nullptr; |
146 *is_bool = false; | 145 *is_bool = false; |
147 | 146 |
148 if (*arg == '-') { | 147 if (*arg == '-') { |
149 // find the begin of the flag name | 148 // find the begin of the flag name |
150 arg++; // remove 1st '-' | 149 arg++; // remove 1st '-' |
151 if (*arg == '-') | 150 if (*arg == '-') |
152 arg++; // remove 2nd '-' | 151 arg++; // remove 2nd '-' |
153 if (arg[0] == 'n' && arg[1] == 'o') { | 152 if (arg[0] == 'n' && arg[1] == 'o') { |
154 arg += 2; // remove "no" | 153 arg += 2; // remove "no" |
155 *is_bool = true; | 154 *is_bool = true; |
(...skipping 26 matching lines...) Expand all Loading... |
182 int j = i; // j > 0 | 181 int j = i; // j > 0 |
183 const char* arg = argv[i++]; | 182 const char* arg = argv[i++]; |
184 | 183 |
185 // split arg into flag components | 184 // split arg into flag components |
186 char buffer[1024]; | 185 char buffer[1024]; |
187 const char* name; | 186 const char* name; |
188 const char* value; | 187 const char* value; |
189 bool is_bool; | 188 bool is_bool; |
190 SplitArgument(arg, buffer, sizeof buffer, &name, &value, &is_bool); | 189 SplitArgument(arg, buffer, sizeof buffer, &name, &value, &is_bool); |
191 | 190 |
192 if (name != NULL) { | 191 if (name != nullptr) { |
193 // lookup the flag | 192 // lookup the flag |
194 Flag* flag = Lookup(name); | 193 Flag* flag = Lookup(name); |
195 if (flag == NULL) { | 194 if (flag == nullptr) { |
196 fprintf(stderr, "Error: unrecognized flag %s\n", arg); | 195 fprintf(stderr, "Error: unrecognized flag %s\n", arg); |
197 return j; | 196 return j; |
198 } | 197 } |
199 | 198 |
200 // if we still need a flag value, use the next argument if available | 199 // if we still need a flag value, use the next argument if available |
201 if (flag->type() != Flag::BOOL && value == NULL) { | 200 if (flag->type() != Flag::BOOL && value == nullptr) { |
202 if (i < *argc) { | 201 if (i < *argc) { |
203 value = argv[i++]; | 202 value = argv[i++]; |
204 } else { | 203 } else { |
205 fprintf(stderr, "Error: missing value for flag %s of type %s\n", | 204 fprintf(stderr, "Error: missing value for flag %s of type %s\n", |
206 arg, Type2String(flag->type())); | 205 arg, Type2String(flag->type())); |
207 return j; | 206 return j; |
208 } | 207 } |
209 } | 208 } |
210 | 209 |
211 // set the flag | 210 // set the flag |
212 char empty[] = { '\0' }; | 211 char empty[] = { '\0' }; |
213 char* endp = empty; | 212 char* endp = empty; |
214 switch (flag->type()) { | 213 switch (flag->type()) { |
215 case Flag::BOOL: | 214 case Flag::BOOL: |
216 *flag->bool_variable() = !is_bool; | 215 *flag->bool_variable() = !is_bool; |
217 break; | 216 break; |
218 case Flag::INT: | 217 case Flag::INT: |
219 *flag->int_variable() = strtol(value, &endp, 10); | 218 *flag->int_variable() = strtol(value, &endp, 10); |
220 break; | 219 break; |
221 case Flag::FLOAT: | 220 case Flag::FLOAT: |
222 *flag->float_variable() = strtod(value, &endp); | 221 *flag->float_variable() = strtod(value, &endp); |
223 break; | 222 break; |
224 case Flag::STRING: | 223 case Flag::STRING: |
225 *flag->string_variable() = value; | 224 *flag->string_variable() = value; |
226 break; | 225 break; |
227 } | 226 } |
228 | 227 |
229 // handle errors | 228 // handle errors |
230 if ((flag->type() == Flag::BOOL && value != NULL) || | 229 if ((flag->type() == Flag::BOOL && value != nullptr) || |
231 (flag->type() != Flag::BOOL && is_bool) || | 230 (flag->type() != Flag::BOOL && is_bool) || *endp != '\0') { |
232 *endp != '\0') { | |
233 fprintf(stderr, "Error: illegal value for flag %s of type %s\n", | 231 fprintf(stderr, "Error: illegal value for flag %s of type %s\n", |
234 arg, Type2String(flag->type())); | 232 arg, Type2String(flag->type())); |
235 return j; | 233 return j; |
236 } | 234 } |
237 | 235 |
238 // remove the flag & value from the command | 236 // remove the flag & value from the command |
239 if (remove_flags) | 237 if (remove_flags) |
240 while (j < i) | 238 while (j < i) |
241 argv[j++] = NULL; | 239 argv[j++] = nullptr; |
242 } | 240 } |
243 } | 241 } |
244 | 242 |
245 // shrink the argument list | 243 // shrink the argument list |
246 if (remove_flags) { | 244 if (remove_flags) { |
247 int j = 1; | 245 int j = 1; |
248 for (int i = 1; i < *argc; i++) { | 246 for (int i = 1; i < *argc; i++) { |
249 if (argv[i] != NULL) | 247 if (argv[i] != nullptr) |
250 argv[j++] = argv[i]; | 248 argv[j++] = argv[i]; |
251 } | 249 } |
252 *argc = j; | 250 *argc = j; |
253 } | 251 } |
254 | 252 |
255 // parsed all flags successfully | 253 // parsed all flags successfully |
256 return 0; | 254 return 0; |
257 } | 255 } |
258 | 256 |
259 void FlagList::Register(Flag* flag) { | 257 void FlagList::Register(Flag* flag) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 // need to free each string in the array, and then the array. | 290 // need to free each string in the array, and then the array. |
293 for(int i = 0; i < argc_; i++) { | 291 for(int i = 0; i < argc_; i++) { |
294 delete[] argv_[i]; | 292 delete[] argv_[i]; |
295 } | 293 } |
296 | 294 |
297 delete[] argv_; | 295 delete[] argv_; |
298 } | 296 } |
299 #endif // WEBRTC_WIN | 297 #endif // WEBRTC_WIN |
300 | 298 |
301 } // namespace rtc | 299 } // namespace rtc |
OLD | NEW |