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

Unified Diff: base/file_util.cc

Issue 12489: Remove file_util::kPathSeparator from posix. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month 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
« no previous file with comments | « base/file_util.h ('k') | base/file_util_linux.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/file_util.cc
===================================================================
--- base/file_util.cc (revision 6039)
+++ base/file_util.cc (working copy)
@@ -13,41 +13,45 @@
#include "base/string_util.h"
#include "unicode/uniset.h"
+#include "base/string_piece.h"
+#include "base/sys_string_conversions.h"
+
namespace file_util {
-const wchar_t kExtensionSeparator = L'.';
-
-void PathComponents(const std::wstring& path,
- std::vector<std::wstring>* components) {
- DCHECK(components != NULL);
- if (components == NULL)
+void PathComponents(const FilePath& path,
+ std::vector<FilePath::StringType>* components) {
+ DCHECK(components);
+ if (!components)
return;
- std::wstring::size_type start = 0;
- std::wstring::size_type end = path.find(kPathSeparator, start);
- // Special case the "/" or "\" directory. On Windows with a drive letter,
- // this code path won't hit, but the right thing should still happen.
- // "E:\foo" will turn into "E:","foo".
+ FilePath::StringType path_str = path.value();
+ FilePath::StringType::size_type start = 0;
+ FilePath::StringType::size_type end =
+ path_str.find_first_of(FilePath::kSeparators);
+
+ // If the path starts with a separator, add it to components.
if (end == start) {
- components->push_back(std::wstring(path, 0, 1));
+ components->push_back(FilePath::StringType(path_str, 0, 1));
start = end + 1;
- end = path.find(kPathSeparator, start);
+ end = path_str.find_first_of(FilePath::kSeparators, start);
}
- while (end != std::wstring::npos) {
- std::wstring component = std::wstring(path, start, end - start);
+ while (end != FilePath::StringType::npos) {
+ FilePath::StringType component =
+ FilePath::StringType(path_str, start, end - start);
components->push_back(component);
start = end + 1;
- end = path.find(kPathSeparator, start);
+ end = path_str.find(FilePath::kSeparators, start);
}
- std::wstring component = std::wstring(path, start);
- components->push_back(component);
+
+ components->push_back(FilePath::StringType(path_str, start));
}
-bool EndsWithSeparator(const FilePath& file_path) {
- std::wstring path = file_path.ToWStringHack();
- bool is_sep = (path.length() > 0 &&
- path[path.length() - 1] == kPathSeparator);
- return is_sep;
+bool EndsWithSeparator(const FilePath& path) {
+ FilePath::StringType value = path.value();
+ if (value.empty())
+ return false;
+
+ return FilePath::IsSeparator(value[value.size() - 1]);
}
bool EnsureEndsWithSeparator(FilePath* path) {
@@ -69,34 +73,6 @@
dir->resize(dir->length() - 1);
}
-void UpOneDirectory(std::wstring* dir) {
- TrimTrailingSeparator(dir);
-
- std::wstring::size_type last_sep = dir->find_last_of(kPathSeparator);
- if (last_sep != std::wstring::npos)
- dir->resize(last_sep);
-}
-
-void UpOneDirectoryOrEmpty(std::wstring* dir) {
- TrimTrailingSeparator(dir);
-
- std::wstring::size_type last_sep = dir->find_last_of(kPathSeparator);
- if (last_sep != std::wstring::npos)
- dir->resize(last_sep);
- else
- dir->clear();
-}
-
-void TrimFilename(std::wstring* path) {
- if (EndsWithSeparator(path)) {
- TrimTrailingSeparator(path);
- } else {
- std::wstring::size_type last_sep = path->find_last_of(kPathSeparator);
- if (last_sep != std::wstring::npos)
- path->resize(last_sep);
- }
-}
-
std::wstring GetFilenameFromPath(const std::wstring& path) {
// TODO(erikkay): fix this - it's not using kPathSeparator, but win unit test
// are exercising '/' as a path separator as well.
@@ -118,34 +94,6 @@
return file_name.substr(0, last_dot);
}
-void AppendToPath(std::wstring* path, const std::wstring& new_ending) {
- if (!path) {
- NOTREACHED();
- return; // Don't crash in this function in release builds.
- }
-
- if (!EndsWithSeparator(path))
- path->push_back(kPathSeparator);
- path->append(new_ending);
-}
-
-void InsertBeforeExtension(std::wstring* path, const std::wstring& suffix) {
- DCHECK(path);
-
- const std::wstring::size_type last_dot = path->rfind(kExtensionSeparator);
- const std::wstring::size_type last_sep = path->rfind(kPathSeparator);
-
- if (last_dot == std::wstring::npos ||
- (last_sep != std::wstring::npos && last_dot < last_sep)) {
- // The path looks something like "C:\pics.old\jojo" or "C:\pics\jojo".
- // We should just append the suffix to the entire path.
- path->append(suffix);
- return;
- }
-
- path->insert(last_dot, suffix);
-}
-
void ReplaceIllegalCharacters(std::wstring* file_name, int replace_char) {
DCHECK(file_name);
@@ -216,39 +164,6 @@
#endif
}
-// Appends the extension to file adding a '.' if extension doesn't contain one.
-// This does nothing if extension is empty or '.'. This is used internally by
-// ReplaceExtension.
-static void AppendExtension(const std::wstring& extension,
- std::wstring* file) {
- if (!extension.empty() && extension != L".") {
- if (extension[0] != L'.')
- file->append(L".");
- file->append(extension);
- }
-}
-
-void ReplaceExtension(std::wstring* file_name, const std::wstring& extension) {
- const std::wstring::size_type last_dot = file_name->rfind(L'.');
- if (last_dot == std::wstring::npos) {
- // No extension, just append the supplied extension.
- AppendExtension(extension, file_name);
- return;
- }
- const std::wstring::size_type last_separator =
- file_name->rfind(kPathSeparator);
- if (last_separator != std::wstring::npos && last_dot < last_separator) {
- // File name doesn't have extension, but one of the directories does; don't
- // replace it, just append the supplied extension. For example
- // 'c:\tmp.bar\foo'.
- AppendExtension(extension, file_name);
- return;
- }
- std::wstring result = file_name->substr(0, last_dot);
- AppendExtension(extension, &result);
- file_name->swap(result);
-}
-
bool ContentsEqual(const FilePath& filename1, const FilePath& filename2) {
// We open the file in binary format even if they are text files because
// we are just comparing that bytes are exactly same in both files and not
@@ -257,7 +172,7 @@
std::ios::in | std::ios::binary);
std::ifstream file2(filename2.value().c_str(),
std::ios::in | std::ios::binary);
-
+
// Even if both files aren't openable (and thus, in some sense, "equal"),
// any unusable file yields a result of "false".
if (!file1.is_open() || !file2.is_open())
@@ -323,40 +238,31 @@
*path_str = path.ToWStringHack();
return true;
}
-bool Delete(const std::wstring& path, bool recursive) {
- return Delete(FilePath::FromWStringHack(path), recursive);
+void AppendToPath(std::wstring* path, const std::wstring& new_ending) {
+ if (!path) {
+ NOTREACHED();
+ return; // Don't crash in this function in release builds.
+ }
+
+ if (!EndsWithSeparator(path))
+ path->push_back(FilePath::kSeparators[0]);
+ path->append(new_ending);
}
-bool EndsWithSeparator(std::wstring* path) {
- return EndsWithSeparator(FilePath::FromWStringHack(*path));
-}
-bool EndsWithSeparator(const std::wstring& path) {
- return EndsWithSeparator(FilePath::FromWStringHack(path));
-}
-bool Move(const std::wstring& from_path, const std::wstring& to_path) {
- return Move(FilePath::FromWStringHack(from_path),
- FilePath::FromWStringHack(to_path));
-}
-bool CopyFile(const std::wstring& from_path, const std::wstring& to_path) {
- return CopyFile(FilePath::FromWStringHack(from_path),
- FilePath::FromWStringHack(to_path));
-}
bool CopyDirectory(const std::wstring& from_path, const std::wstring& to_path,
bool recursive) {
return CopyDirectory(FilePath::FromWStringHack(from_path),
FilePath::FromWStringHack(to_path),
recursive);
}
-bool PathExists(const std::wstring& path) {
- return PathExists(FilePath::FromWStringHack(path));
-}
-bool DirectoryExists(const std::wstring& path) {
- return DirectoryExists(FilePath::FromWStringHack(path));
-}
bool ContentsEqual(const std::wstring& filename1,
const std::wstring& filename2) {
return ContentsEqual(FilePath::FromWStringHack(filename1),
FilePath::FromWStringHack(filename2));
}
+bool CopyFile(const std::wstring& from_path, const std::wstring& to_path) {
+ return CopyFile(FilePath::FromWStringHack(from_path),
+ FilePath::FromWStringHack(to_path));
+}
bool CreateDirectory(const std::wstring& full_path) {
return CreateDirectory(FilePath::FromWStringHack(full_path));
}
@@ -367,6 +273,18 @@
*temp_file = temp_file_path.ToWStringHack();
return true;
}
+bool Delete(const std::wstring& path, bool recursive) {
+ return Delete(FilePath::FromWStringHack(path), recursive);
+}
+bool DirectoryExists(const std::wstring& path) {
+ return DirectoryExists(FilePath::FromWStringHack(path));
+}
+bool EndsWithSeparator(std::wstring* path) {
+ return EndsWithSeparator(FilePath::FromWStringHack(*path));
+}
+bool EndsWithSeparator(const std::wstring& path) {
+ return EndsWithSeparator(FilePath::FromWStringHack(path));
+}
bool GetCurrentDirectory(std::wstring* path_str) {
FilePath path;
if (!GetCurrentDirectory(&path))
@@ -387,12 +305,38 @@
*path_str = path.ToWStringHack();
return true;
}
+bool Move(const std::wstring& from_path, const std::wstring& to_path) {
+ return Move(FilePath::FromWStringHack(from_path),
+ FilePath::FromWStringHack(to_path));
+}
FILE* OpenFile(const std::wstring& filename, const char* mode) {
return OpenFile(FilePath::FromWStringHack(filename), mode);
}
+bool PathExists(const std::wstring& path) {
+ return PathExists(FilePath::FromWStringHack(path));
+}
bool SetCurrentDirectory(const std::wstring& directory) {
return SetCurrentDirectory(FilePath::FromWStringHack(directory));
}
+void TrimFilename(std::wstring* path) {
+ if (EndsWithSeparator(path)) {
+ TrimTrailingSeparator(path);
+ } else {
+ *path = FilePath::FromWStringHack(*path).DirName().ToWStringHack();
+ }
+}
+void UpOneDirectory(std::wstring* dir) {
+ FilePath path = FilePath::FromWStringHack(*dir);
+ *dir = path.DirName().ToWStringHack();
+}
+void UpOneDirectoryOrEmpty(std::wstring* dir) {
+ FilePath path = FilePath::FromWStringHack(*dir);
+ FilePath directory = path.DirName();
+ if (directory == path)
+ dir->clear();
+ else
+ *dir = directory.ToWStringHack();
+}
} // namespace
« no previous file with comments | « base/file_util.h ('k') | base/file_util_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698