OLD | NEW |
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/file_path.h" | 5 #include "base/file_path.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 | 7 |
8 // These includes are just for the *Hack functions, and should be removed | 8 // These includes are just for the *Hack functions, and should be removed |
9 // when those functions are removed. | 9 // when those functions are removed. |
10 #include "base/string_piece.h" | 10 #include "base/string_piece.h" |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 if (extension.empty() || extension == StringType(1, kExtensionSeparator)) | 277 if (extension.empty() || extension == StringType(1, kExtensionSeparator)) |
278 return no_ext; | 278 return no_ext; |
279 | 279 |
280 StringType str = no_ext.value(); | 280 StringType str = no_ext.value(); |
281 if (extension[0] != kExtensionSeparator) | 281 if (extension[0] != kExtensionSeparator) |
282 str.append(1, kExtensionSeparator); | 282 str.append(1, kExtensionSeparator); |
283 str.append(extension); | 283 str.append(extension); |
284 return FilePath(str); | 284 return FilePath(str); |
285 } | 285 } |
286 | 286 |
| 287 bool FilePath::MatchesExtension(const StringType& extension) const { |
| 288 FilePath::StringType current_extension = Extension(); |
| 289 |
| 290 if (current_extension.length() != extension.length()) |
| 291 return false; |
| 292 |
| 293 return std::equal(extension.begin(), |
| 294 extension.end(), |
| 295 current_extension.begin(), |
| 296 CaseInsensitiveCompare<FilePath::CharType>()); |
| 297 } |
| 298 |
287 FilePath FilePath::Append(const StringType& component) const { | 299 FilePath FilePath::Append(const StringType& component) const { |
288 DCHECK(!IsPathAbsolute(component)); | 300 DCHECK(!IsPathAbsolute(component)); |
289 if (path_.compare(kCurrentDirectory) == 0) { | 301 if (path_.compare(kCurrentDirectory) == 0) { |
290 // Append normally doesn't do any normalization, but as a special case, | 302 // Append normally doesn't do any normalization, but as a special case, |
291 // when appending to kCurrentDirectory, just return a new path for the | 303 // when appending to kCurrentDirectory, just return a new path for the |
292 // component argument. Appending component to kCurrentDirectory would | 304 // component argument. Appending component to kCurrentDirectory would |
293 // serve no purpose other than needlessly lengthening the path, and | 305 // serve no purpose other than needlessly lengthening the path, and |
294 // it's likely in practice to wind up with FilePath objects containing | 306 // it's likely in practice to wind up with FilePath objects containing |
295 // only kCurrentDirectory when calling DirName on a single relative path | 307 // only kCurrentDirectory when calling DirName on a single relative path |
296 // component. | 308 // component. |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 --pos) { | 393 --pos) { |
382 // If the string only has two separators and they're at the beginning, | 394 // If the string only has two separators and they're at the beginning, |
383 // don't strip them, unless the string began with more than two separators. | 395 // don't strip them, unless the string began with more than two separators. |
384 if (pos != start + 1 || last_stripped == start + 2 || | 396 if (pos != start + 1 || last_stripped == start + 2 || |
385 !IsSeparator(path_[start - 1])) { | 397 !IsSeparator(path_[start - 1])) { |
386 path_.resize(pos - 1); | 398 path_.resize(pos - 1); |
387 last_stripped = pos; | 399 last_stripped = pos; |
388 } | 400 } |
389 } | 401 } |
390 } | 402 } |
OLD | NEW |