| Index: third_party/leveldatabase/env_chromium.cc
|
| diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc
|
| index 17927cd89f7f55754cbacbdd5af788e66dea8d0e..17b50972474dedc0fbad39883997d535a2f73217 100644
|
| --- a/third_party/leveldatabase/env_chromium.cc
|
| +++ b/third_party/leveldatabase/env_chromium.cc
|
| @@ -32,7 +32,7 @@ static const base::FilePath::CharType kLevelDBTestDirectoryPrefix[]
|
|
|
| class ChromiumFileLock : public FileLock {
|
| public:
|
| - ::base::PlatformFile file_;
|
| + ::base::File file_;
|
| std::string name_;
|
| };
|
|
|
| @@ -46,19 +46,19 @@ class Retrier {
|
| time_to_sleep_(base::TimeDelta::FromMilliseconds(10)),
|
| success_(true),
|
| method_(method),
|
| - last_error_(base::PLATFORM_FILE_OK),
|
| + last_error_(base::File::FILE_OK),
|
| provider_(provider) {}
|
| ~Retrier() {
|
| if (success_) {
|
| provider_->GetRetryTimeHistogram(method_)->AddTime(last_ - start_);
|
| - if (last_error_ != base::PLATFORM_FILE_OK) {
|
| + if (last_error_ != base::File::FILE_OK) {
|
| DCHECK(last_error_ < 0);
|
| provider_->GetRecoveredFromErrorHistogram(method_)->Add(-last_error_);
|
| }
|
| }
|
| }
|
| - bool ShouldKeepTrying(base::PlatformFileError last_error) {
|
| - DCHECK_NE(last_error, base::PLATFORM_FILE_OK);
|
| + bool ShouldKeepTrying(base::File::Error last_error) {
|
| + DCHECK_NE(last_error, base::File::FILE_OK);
|
| last_error_ = last_error;
|
| if (last_ < limit_) {
|
| base::PlatformThread::Sleep(time_to_sleep_);
|
| @@ -76,7 +76,7 @@ class Retrier {
|
| base::TimeDelta time_to_sleep_;
|
| bool success_;
|
| MethodID method_;
|
| - base::PlatformFileError last_error_;
|
| + base::File::Error last_error_;
|
| RetrierProvider* provider_;
|
| };
|
|
|
| @@ -181,7 +181,7 @@ Status MakeIOError(Slice filename,
|
| Status MakeIOError(Slice filename,
|
| const char* message,
|
| MethodID method,
|
| - base::PlatformFileError error) {
|
| + base::File::Error error) {
|
| DCHECK(error < 0);
|
| char buf[512];
|
| snprintf(buf,
|
| @@ -302,8 +302,8 @@ bool IndicatesDiskFull(const leveldb::Status& status) {
|
| leveldb_env::ErrorParsingResult result = leveldb_env::ParseMethodAndError(
|
| status.ToString().c_str(), &method, &error);
|
| return (result == leveldb_env::METHOD_AND_PFE &&
|
| - static_cast<base::PlatformFileError>(error) ==
|
| - base::PLATFORM_FILE_ERROR_NO_SPACE) ||
|
| + static_cast<base::File::Error>(error) ==
|
| + base::File::FILE_ERROR_NO_SPACE) ||
|
| (result == leveldb_env::METHOD_AND_ERRNO && error == ENOSPC);
|
| }
|
|
|
| @@ -367,43 +367,43 @@ bool ChromiumEnv::FileExists(const std::string& fname) {
|
| return ::base::PathExists(CreateFilePath(fname));
|
| }
|
|
|
| -const char* ChromiumEnv::PlatformFileErrorString(const ::base::PlatformFileError& error) {
|
| +const char* ChromiumEnv::FileErrorString(::base::File::Error error) {
|
| switch (error) {
|
| - case ::base::PLATFORM_FILE_ERROR_FAILED:
|
| + case ::base::File::FILE_ERROR_FAILED:
|
| return "No further details.";
|
| - case ::base::PLATFORM_FILE_ERROR_IN_USE:
|
| + case ::base::File::FILE_ERROR_IN_USE:
|
| return "File currently in use.";
|
| - case ::base::PLATFORM_FILE_ERROR_EXISTS:
|
| + case ::base::File::FILE_ERROR_EXISTS:
|
| return "File already exists.";
|
| - case ::base::PLATFORM_FILE_ERROR_NOT_FOUND:
|
| + case ::base::File::FILE_ERROR_NOT_FOUND:
|
| return "File not found.";
|
| - case ::base::PLATFORM_FILE_ERROR_ACCESS_DENIED:
|
| + case ::base::File::FILE_ERROR_ACCESS_DENIED:
|
| return "Access denied.";
|
| - case ::base::PLATFORM_FILE_ERROR_TOO_MANY_OPENED:
|
| + case ::base::File::FILE_ERROR_TOO_MANY_OPENED:
|
| return "Too many files open.";
|
| - case ::base::PLATFORM_FILE_ERROR_NO_MEMORY:
|
| + case ::base::File::FILE_ERROR_NO_MEMORY:
|
| return "Out of memory.";
|
| - case ::base::PLATFORM_FILE_ERROR_NO_SPACE:
|
| + case ::base::File::FILE_ERROR_NO_SPACE:
|
| return "No space left on drive.";
|
| - case ::base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY:
|
| + case ::base::File::FILE_ERROR_NOT_A_DIRECTORY:
|
| return "Not a directory.";
|
| - case ::base::PLATFORM_FILE_ERROR_INVALID_OPERATION:
|
| + case ::base::File::FILE_ERROR_INVALID_OPERATION:
|
| return "Invalid operation.";
|
| - case ::base::PLATFORM_FILE_ERROR_SECURITY:
|
| + case ::base::File::FILE_ERROR_SECURITY:
|
| return "Security error.";
|
| - case ::base::PLATFORM_FILE_ERROR_ABORT:
|
| + case ::base::File::FILE_ERROR_ABORT:
|
| return "File operation aborted.";
|
| - case ::base::PLATFORM_FILE_ERROR_NOT_A_FILE:
|
| + case ::base::File::FILE_ERROR_NOT_A_FILE:
|
| return "The supplied path was not a file.";
|
| - case ::base::PLATFORM_FILE_ERROR_NOT_EMPTY:
|
| + case ::base::File::FILE_ERROR_NOT_EMPTY:
|
| return "The file was not empty.";
|
| - case ::base::PLATFORM_FILE_ERROR_INVALID_URL:
|
| + case ::base::File::FILE_ERROR_INVALID_URL:
|
| return "Invalid URL.";
|
| - case ::base::PLATFORM_FILE_ERROR_IO:
|
| + case ::base::File::FILE_ERROR_IO:
|
| return "OS or hardware error.";
|
| - case ::base::PLATFORM_FILE_OK:
|
| + case ::base::File::FILE_OK:
|
| return "OK.";
|
| - case ::base::PLATFORM_FILE_ERROR_MAX:
|
| + case ::base::File::FILE_ERROR_MAX:
|
| NOTREACHED();
|
| }
|
| NOTIMPLEMENTED();
|
| @@ -466,9 +466,9 @@ void ChromiumEnv::RestoreIfNecessary(const std::string& dir,
|
| Status ChromiumEnv::GetChildren(const std::string& dir_string,
|
| std::vector<std::string>* result) {
|
| std::vector<base::FilePath> entries;
|
| - base::PlatformFileError error =
|
| + base::File::Error error =
|
| GetDirectoryEntries(CreateFilePath(dir_string), &entries);
|
| - if (error != base::PLATFORM_FILE_OK) {
|
| + if (error != base::File::FILE_OK) {
|
| RecordOSError(kGetChildren, error);
|
| return MakeIOError(
|
| dir_string, "Could not open/read directory", kGetChildren, error);
|
| @@ -502,15 +502,11 @@ Status ChromiumEnv::DeleteFile(const std::string& fname) {
|
|
|
| Status ChromiumEnv::CreateDir(const std::string& name) {
|
| Status result;
|
| - // TODO(rvargas): convert this code to base::File::Error.
|
| - base::PlatformFileError error = base::PLATFORM_FILE_OK;
|
| + base::File::Error error = base::File::FILE_OK;
|
| Retrier retrier(kCreateDir, this);
|
| do {
|
| - if (base::CreateDirectoryAndGetError(
|
| - CreateFilePath(name),
|
| - reinterpret_cast<base::File::Error*>(&error))) {
|
| + if (base::CreateDirectoryAndGetError(CreateFilePath(name), &error))
|
| return result;
|
| - }
|
| } while (retrier.ShouldKeepTrying(error));
|
| result = MakeIOError(name, "Could not create directory.", kCreateDir, error);
|
| RecordOSError(kCreateDir, error);
|
| @@ -548,85 +544,79 @@ Status ChromiumEnv::RenameFile(const std::string& src, const std::string& dst) {
|
| base::FilePath destination = CreateFilePath(dst);
|
|
|
| Retrier retrier(kRenameFile, this);
|
| - // TODO(rvargas): convert this code to base::File::Error.
|
| - base::PlatformFileError error = base::PLATFORM_FILE_OK;
|
| + base::File::Error error = base::File::FILE_OK;
|
| do {
|
| - if (base::ReplaceFile(src_file_path, destination,
|
| - reinterpret_cast<base::File::Error*>(&error))) {
|
| + if (base::ReplaceFile(src_file_path, destination, &error))
|
| return result;
|
| - }
|
| } while (retrier.ShouldKeepTrying(error));
|
|
|
| - DCHECK(error != base::PLATFORM_FILE_OK);
|
| + DCHECK(error != base::File::FILE_OK);
|
| RecordOSError(kRenameFile, error);
|
| char buf[100];
|
| snprintf(buf,
|
| sizeof(buf),
|
| "Could not rename file: %s",
|
| - PlatformFileErrorString(error));
|
| + FileErrorString(error));
|
| return MakeIOError(src, buf, kRenameFile, error);
|
| }
|
|
|
| Status ChromiumEnv::LockFile(const std::string& fname, FileLock** lock) {
|
| *lock = NULL;
|
| Status result;
|
| - int flags = ::base::PLATFORM_FILE_OPEN_ALWAYS |
|
| - ::base::PLATFORM_FILE_READ |
|
| - ::base::PLATFORM_FILE_WRITE;
|
| - bool created;
|
| - ::base::PlatformFileError error_code;
|
| - ::base::PlatformFile file;
|
| + int flags = ::base::File::FLAG_OPEN_ALWAYS |
|
| + ::base::File::FLAG_READ |
|
| + ::base::File::FLAG_WRITE;
|
| + ::base::File::Error error_code;
|
| + ::base::File file;
|
| Retrier retrier(kLockFile, this);
|
| do {
|
| - file = ::base::CreatePlatformFile(
|
| - CreateFilePath(fname), flags, &created, &error_code);
|
| - } while (error_code != ::base::PLATFORM_FILE_OK &&
|
| - retrier.ShouldKeepTrying(error_code));
|
| -
|
| - if (error_code == ::base::PLATFORM_FILE_ERROR_NOT_FOUND) {
|
| - ::base::FilePath parent = CreateFilePath(fname).DirName();
|
| - ::base::FilePath last_parent;
|
| - int num_missing_ancestors = 0;
|
| - do {
|
| - if (base::DirectoryExists(parent))
|
| - break;
|
| - ++num_missing_ancestors;
|
| - last_parent = parent;
|
| - parent = parent.DirName();
|
| - } while (parent != last_parent);
|
| - RecordLockFileAncestors(num_missing_ancestors);
|
| - }
|
| + file.Initialize(CreateFilePath(fname), flags);
|
| + if (!file.IsValid())
|
| + error_code = file.error_details();
|
| + } while (!file.IsValid() && retrier.ShouldKeepTrying(error_code));
|
| +
|
| + if (!file.IsValid()) {
|
| + if (error_code == ::base::File::FILE_ERROR_NOT_FOUND) {
|
| + ::base::FilePath parent = CreateFilePath(fname).DirName();
|
| + ::base::FilePath last_parent;
|
| + int num_missing_ancestors = 0;
|
| + do {
|
| + if (base::DirectoryExists(parent))
|
| + break;
|
| + ++num_missing_ancestors;
|
| + last_parent = parent;
|
| + parent = parent.DirName();
|
| + } while (parent != last_parent);
|
| + RecordLockFileAncestors(num_missing_ancestors);
|
| + }
|
|
|
| - if (error_code != ::base::PLATFORM_FILE_OK) {
|
| - result = MakeIOError(
|
| - fname, PlatformFileErrorString(error_code), kLockFile, error_code);
|
| + result = MakeIOError(fname, FileErrorString(error_code), kLockFile,
|
| + error_code);
|
| RecordOSError(kLockFile, error_code);
|
| return result;
|
| }
|
|
|
| if (!locks_.Insert(fname)) {
|
| result = MakeIOError(fname, "Lock file already locked.", kLockFile);
|
| - ::base::ClosePlatformFile(file);
|
| return result;
|
| }
|
|
|
| Retrier lock_retrier = Retrier(kLockFile, this);
|
| do {
|
| - error_code = ::base::LockPlatformFile(file);
|
| - } while (error_code != ::base::PLATFORM_FILE_OK &&
|
| + error_code = file.Lock();
|
| + } while (error_code != ::base::File::FILE_OK &&
|
| retrier.ShouldKeepTrying(error_code));
|
|
|
| - if (error_code != ::base::PLATFORM_FILE_OK) {
|
| - ::base::ClosePlatformFile(file);
|
| + if (error_code != ::base::File::FILE_OK) {
|
| locks_.Remove(fname);
|
| - result = MakeIOError(
|
| - fname, PlatformFileErrorString(error_code), kLockFile, error_code);
|
| + result = MakeIOError(fname, FileErrorString(error_code), kLockFile,
|
| + error_code);
|
| RecordOSError(kLockFile, error_code);
|
| return result;
|
| }
|
|
|
| ChromiumFileLock* my_lock = new ChromiumFileLock;
|
| - my_lock->file_ = file;
|
| + my_lock->file_ = file.Pass();
|
| my_lock->name_ = fname;
|
| *lock = my_lock;
|
| return result;
|
| @@ -636,17 +626,11 @@ Status ChromiumEnv::UnlockFile(FileLock* lock) {
|
| ChromiumFileLock* my_lock = reinterpret_cast<ChromiumFileLock*>(lock);
|
| Status result;
|
|
|
| - ::base::PlatformFileError error_code =
|
| - ::base::UnlockPlatformFile(my_lock->file_);
|
| - if (error_code != ::base::PLATFORM_FILE_OK) {
|
| + ::base::File::Error error_code = my_lock->file_.Unlock();
|
| + if (error_code != ::base::File::FILE_OK) {
|
| result =
|
| MakeIOError(my_lock->name_, "Could not unlock lock file.", kUnlockFile);
|
| RecordOSError(kUnlockFile, error_code);
|
| - ::base::ClosePlatformFile(my_lock->file_);
|
| - } else if (!::base::ClosePlatformFile(my_lock->file_)) {
|
| - result =
|
| - MakeIOError(my_lock->name_, "Could not close lock file.", kUnlockFile);
|
| - RecordErrorAt(kUnlockFile);
|
| }
|
| bool removed = locks_.Remove(my_lock->name_);
|
| DCHECK(removed);
|
| @@ -688,10 +672,10 @@ void ChromiumEnv::RecordLockFileAncestors(int num_missing_ancestors) const {
|
| }
|
|
|
| void ChromiumEnv::RecordOSError(MethodID method,
|
| - base::PlatformFileError error) const {
|
| + base::File::Error error) const {
|
| DCHECK(error < 0);
|
| RecordErrorAt(method);
|
| - GetOSErrorHistogram(method, -base::PLATFORM_FILE_ERROR_MAX)->Add(-error);
|
| + GetOSErrorHistogram(method, -base::File::FILE_ERROR_MAX)->Add(-error);
|
| }
|
|
|
| void ChromiumEnv::RecordOSError(MethodID method, int error) const {
|
|
|