diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-13 20:01:43 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-13 20:01:43 +0000 |
commit | cc7948aeb5fe21af08a2d5e868c0087ded0d244a (patch) | |
tree | 8d3078af6ecb3a8e5e558b53a4da20e1e35fb656 /base | |
parent | c9938e6d17e8464ce8577dccb98e19e7e5515cf0 (diff) | |
download | chromium_src-cc7948aeb5fe21af08a2d5e868c0087ded0d244a.zip chromium_src-cc7948aeb5fe21af08a2d5e868c0087ded0d244a.tar.gz chromium_src-cc7948aeb5fe21af08a2d5e868c0087ded0d244a.tar.bz2 |
Implement DownloadFile::Rename() for posix. Downloads work on linux!
Review URL: http://codereview.chromium.org/46020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11659 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/file_util.h | 4 | ||||
-rw-r--r-- | base/file_util_posix.cc | 10 |
2 files changed, 11 insertions, 3 deletions
diff --git a/base/file_util.h b/base/file_util.h index 70e24e1..43c31f5 100644 --- a/base/file_util.h +++ b/base/file_util.h @@ -154,7 +154,9 @@ bool Delete(const FilePath& path, bool recursive); bool Delete(const std::wstring& path, bool recursive); // Moves the given path, whether it's a file or a directory. -// Returns true if successful, false otherwise. +// If a simple rename is not possible, such as in the case where the paths are +// on different volumes, this will attempt to copy and delete. Returns +// true for success. bool Move(const FilePath& from_path, const FilePath& to_path); // Deprecated temporary compatibility function. bool Move(const std::wstring& from_path, const std::wstring& to_path); diff --git a/base/file_util_posix.cc b/base/file_util_posix.cc index 85cdc10..235e6c0 100644 --- a/base/file_util_posix.cc +++ b/base/file_util_posix.cc @@ -107,8 +107,14 @@ bool Delete(const FilePath& path, bool recursive) { } bool Move(const FilePath& from_path, const FilePath& to_path) { - return (rename(from_path.value().c_str(), - to_path.value().c_str()) == 0); + if (rename(from_path.value().c_str(), to_path.value().c_str()) == 0) + return true; + + if (!CopyDirectory(from_path, to_path, true)) + return false; + + Delete(from_path, true); + return true; } bool CopyDirectory(const FilePath& from_path, |