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

Unified Diff: base/file_path.cc

Issue 10067002: Add an AddExtension() method in FilePath (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: base/file_path.cc
diff --git a/base/file_path.cc b/base/file_path.cc
index 3b1fca4b4ed6c7e8c0e52bf643211d66204a3c97..4bd6c130a4bdb6ce5b2a771e2a4768e4f2d44da6 100644
--- a/base/file_path.cc
+++ b/base/file_path.cc
@@ -371,6 +371,20 @@ FilePath FilePath::RemoveExtension() const {
return FilePath(path_.substr(0, dot));
}
+bool FilePath::IsBaseEmptyOrSpecialCase() const {
+ StringType base = BaseName().value();
+ if (base.empty())
+ return true;
+ if (*(base.end() - 1) == kExtensionSeparator) {
+ // Special case "." and ".."
+ if (base == kCurrentDirectory || base == kParentDirectory) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
FilePath FilePath::InsertBeforeExtension(const StringType& suffix) const {
if (suffix.empty())
return FilePath(path_);
@@ -378,15 +392,8 @@ FilePath FilePath::InsertBeforeExtension(const StringType& suffix) const {
if (path_.empty())
return FilePath();
- StringType base = BaseName().value();
- if (base.empty())
+ if (IsBaseEmptyOrSpecialCase())
return FilePath();
- if (*(base.end() - 1) == kExtensionSeparator) {
- // Special case "." and ".."
- if (base == kCurrentDirectory || base == kParentDirectory) {
- return FilePath();
- }
- }
StringType ext = Extension();
StringType ret = RemoveExtension().value();
@@ -405,19 +412,32 @@ FilePath FilePath::InsertBeforeExtensionASCII(const base::StringPiece& suffix)
#endif
}
-FilePath FilePath::ReplaceExtension(const StringType& extension) const {
+FilePath FilePath::AddExtension(const StringType& extension) const {
if (path_.empty())
return FilePath();
- StringType base = BaseName().value();
- if (base.empty())
+ if (IsBaseEmptyOrSpecialCase())
return FilePath();
- if (*(base.end() - 1) == kExtensionSeparator) {
- // Special case "." and ".."
- if (base == kCurrentDirectory || base == kParentDirectory) {
- return FilePath();
- }
+
+ // If the new extension is "" or ".", then just return the current FilePath.
+ if (extension.empty() || extension == StringType(1, kExtensionSeparator))
+ return *this;
+
+ StringType str = path_;
+ if (extension[0] != kExtensionSeparator &&
+ *(str.end() - 1) != kExtensionSeparator) {
+ str.append(1, kExtensionSeparator);
}
+ str.append(extension);
+ return FilePath(str);
+}
+
+FilePath FilePath::ReplaceExtension(const StringType& extension) const {
+ if (path_.empty())
+ return FilePath();
+
+ if (IsBaseEmptyOrSpecialCase())
+ return FilePath();
FilePath no_ext = RemoveExtension();
// If the new extension is "" or ".", then just remove the current extension.
« base/file_path.h ('K') | « base/file_path.h ('k') | base/file_path_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698