Implement some missing file util functions.

Review URL: http://codereview.chromium.org/11208

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5571 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: a9cd2a6531ed01e92ee81b136754ba00165c58cd
diff --git a/base/file_path.h b/base/file_path.h
index 7dd2a71..6bb426f 100644
--- a/base/file_path.h
+++ b/base/file_path.h
@@ -116,6 +116,10 @@
     return *this;
   }
 
+  bool operator==(const FilePath& that) const {
+    return path_ == that.path_;
+  }
+
   const StringType& value() const { return path_; }
 
   // Returns a FilePath corresponding to the directory containing the path
diff --git a/base/file_util.cc b/base/file_util.cc
index 4fdc128..0f7b683 100644
--- a/base/file_util.cc
+++ b/base/file_util.cc
@@ -370,6 +370,12 @@
   *path_str = path.ToWStringHack();
   return true;
 }
+FILE* OpenFile(const std::wstring& filename, const char* mode) {
+  return OpenFile(FilePath::FromWStringHack(filename), mode);
+}
+bool SetCurrentDirectory(const std::wstring& directory) {
+  return SetCurrentDirectory(FilePath::FromWStringHack(directory));
+}
 
 }  // namespace
 
diff --git a/base/file_util.h b/base/file_util.h
index 3df31e4..e274d6a 100644
--- a/base/file_util.h
+++ b/base/file_util.h
@@ -312,6 +312,8 @@
 bool GetCurrentDirectory(std::wstring* path);
 
 // Sets the current working directory for the process.
+bool SetCurrentDirectory(const FilePath& path);
+// Deprecated temporary compatibility function.
 bool SetCurrentDirectory(const std::wstring& current_directory);
 
 // A class for enumerating the files in a provided path. The order of the
diff --git a/base/file_util_linux.cc b/base/file_util_linux.cc
index 945200a..f776c91 100644
--- a/base/file_util_linux.cc
+++ b/base/file_util_linux.cc
@@ -26,10 +26,6 @@
   return true;
 }
 
-FILE* OpenFile(const FilePath& filename, const char* mode) {
-  return fopen(filename.value().c_str(), mode);
-}
-
 bool CopyFile(const FilePath& from_path, const FilePath& to_path) {
   int infile = open(from_path.value().c_str(), O_RDONLY);
   if (infile < 0)
diff --git a/base/file_util_posix.cc b/base/file_util_posix.cc
index a0c6cb6..1afb573 100644
--- a/base/file_util_posix.cc
+++ b/base/file_util_posix.cc
@@ -322,18 +322,18 @@
 }
 
 FILE* OpenFile(const std::string& filename, const char* mode) {
-  return fopen(filename.c_str(), mode);
+  return OpenFile(FilePath(filename), mode);
 }
 
-FILE* OpenFile(const std::wstring& filename, const char* mode) {
-  return fopen(WideToUTF8(filename).c_str(), mode);
+FILE* OpenFile(const FilePath& filename, const char* mode) {
+  return fopen(filename.value().c_str(), mode);
 }
 
 int ReadFile(const std::wstring& filename, char* data, int size) {
   int fd = open(WideToUTF8(filename).c_str(), O_RDONLY);
   if (fd < 0)
     return -1;
-  
+
   int ret_value = read(fd, data, size);
   close(fd);
   return ret_value;
@@ -352,7 +352,7 @@
                                           size - bytes_written_total);
     if (bytes_written_partial < 0) {
       close(fd);
-      return -1;      
+      return -1;
     }
     bytes_written_total += bytes_written_partial;
   } while (bytes_written_total < size);
@@ -373,11 +373,11 @@
 }
 
 // Sets the current working directory for the process.
-bool SetCurrentDirectory(const std::wstring& current_directory) {
-  int ret = chdir(WideToUTF8(current_directory).c_str());
-  return (ret == 0);
+bool SetCurrentDirectory(const FilePath& path) {
+  int ret = chdir(path.value().c_str());
+  return !ret;
 }
-  
+
 FileEnumerator::FileEnumerator(const std::wstring& root_path,
                                bool recursive,
                                FileEnumerator::FILE_TYPE file_type)
@@ -403,7 +403,7 @@
   AppendToPath(&pattern_, pattern);
   pending_paths_.push(root_path);
 }
-  
+
 FileEnumerator::~FileEnumerator() {
   if (fts_)
     fts_close(fts_);