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

Side by Side Diff: third_party/leveldatabase/env_chromium_stdio.cc

Issue 168833003: Remove uses of PlatformFile from leveldb (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011-2013 The LevelDB Authors. All rights reserved. 1 // Copyright (c) 2011-2013 The LevelDB Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. See the AUTHORS file for names of contributors. 3 // found in the LICENSE file. See the AUTHORS file for names of contributors.
4 4
5 #include <errno.h> 5 #include <errno.h>
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/posix/eintr_wrapper.h" 9 #include "base/posix/eintr_wrapper.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 return MakeIOError( 99 return MakeIOError(
100 filename_, strerror(saved_errno), kSequentialFileSkip, saved_errno); 100 filename_, strerror(saved_errno), kSequentialFileSkip, saved_errno);
101 } 101 }
102 return Status::OK(); 102 return Status::OK();
103 } 103 }
104 }; 104 };
105 105
106 class ChromiumRandomAccessFile : public RandomAccessFile { 106 class ChromiumRandomAccessFile : public RandomAccessFile {
107 private: 107 private:
108 std::string filename_; 108 std::string filename_;
109 ::base::PlatformFile file_; 109 mutable ::base::File file_;
110 const UMALogger* uma_logger_; 110 const UMALogger* uma_logger_;
111 111
112 public: 112 public:
113 ChromiumRandomAccessFile(const std::string& fname, 113 ChromiumRandomAccessFile(const std::string& fname,
114 ::base::PlatformFile file, 114 ::base::File file,
115 const UMALogger* uma_logger) 115 const UMALogger* uma_logger)
116 : filename_(fname), file_(file), uma_logger_(uma_logger) {} 116 : filename_(fname), file_(file.Pass()), uma_logger_(uma_logger) {}
117 virtual ~ChromiumRandomAccessFile() { ::base::ClosePlatformFile(file_); } 117 virtual ~ChromiumRandomAccessFile() {}
118 118
119 virtual Status Read(uint64_t offset, size_t n, Slice* result, char* scratch) 119 virtual Status Read(uint64_t offset, size_t n, Slice* result, char* scratch)
120 const { 120 const {
121 Status s; 121 Status s;
122 int r = ::base::ReadPlatformFile(file_, offset, scratch, n); 122 int r = file_.Read(offset, scratch, n);
123 *result = Slice(scratch, (r < 0) ? 0 : r); 123 *result = Slice(scratch, (r < 0) ? 0 : r);
124 if (r < 0) { 124 if (r < 0) {
125 // An error: return a non-ok status 125 // An error: return a non-ok status
126 s = MakeIOError( 126 s = MakeIOError(
127 filename_, "Could not perform read", kRandomAccessFileRead); 127 filename_, "Could not perform read", kRandomAccessFileRead);
128 uma_logger_->RecordErrorAt(kRandomAccessFileRead); 128 uma_logger_->RecordErrorAt(kRandomAccessFileRead);
129 } 129 }
130 return s; 130 return s;
131 } 131 }
132 }; 132 };
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 #if defined(OS_POSIX) 266 #if defined(OS_POSIX)
267 struct rlimit nofile; 267 struct rlimit nofile;
268 if (getrlimit(RLIMIT_NOFILE, &nofile)) 268 if (getrlimit(RLIMIT_NOFILE, &nofile))
269 return; 269 return;
270 GetMaxFDHistogram(type)->Add(nofile.rlim_cur); 270 GetMaxFDHistogram(type)->Add(nofile.rlim_cur);
271 #endif 271 #endif
272 } 272 }
273 273
274 Status ChromiumEnvStdio::NewRandomAccessFile(const std::string& fname, 274 Status ChromiumEnvStdio::NewRandomAccessFile(const std::string& fname,
275 RandomAccessFile** result) { 275 RandomAccessFile** result) {
276 int flags = ::base::PLATFORM_FILE_READ | ::base::PLATFORM_FILE_OPEN; 276 int flags = ::base::File::FLAG_READ | ::base::File::FLAG_OPEN;
277 bool created; 277 ::base::File file(ChromiumEnv::CreateFilePath(fname), flags);
278 ::base::PlatformFileError error_code; 278 if (file.IsValid()) {
279 ::base::PlatformFile file = ::base::CreatePlatformFile( 279 *result = new ChromiumRandomAccessFile(fname, file.Pass(), this);
280 ChromiumEnv::CreateFilePath(fname), flags, &created, &error_code);
281 if (error_code == ::base::PLATFORM_FILE_OK) {
282 *result = new ChromiumRandomAccessFile(fname, file, this);
283 RecordOpenFilesLimit("Success"); 280 RecordOpenFilesLimit("Success");
284 return Status::OK(); 281 return Status::OK();
285 } 282 }
286 if (error_code == ::base::PLATFORM_FILE_ERROR_TOO_MANY_OPENED) 283 ::base::File::Error error_code = file.error_details();
284 if (error_code == ::base::File::FILE_ERROR_TOO_MANY_OPENED)
287 RecordOpenFilesLimit("TooManyOpened"); 285 RecordOpenFilesLimit("TooManyOpened");
288 else 286 else
289 RecordOpenFilesLimit("OtherError"); 287 RecordOpenFilesLimit("OtherError");
290 *result = NULL; 288 *result = NULL;
291 RecordOSError(kNewRandomAccessFile, error_code); 289 RecordOSError(kNewRandomAccessFile, error_code);
292 return MakeIOError(fname, 290 return MakeIOError(fname,
293 PlatformFileErrorString(error_code), 291 FileErrorString(error_code),
294 kNewRandomAccessFile, 292 kNewRandomAccessFile,
295 error_code); 293 error_code);
296 } 294 }
297 295
298 Status ChromiumEnvStdio::NewWritableFile(const std::string& fname, 296 Status ChromiumEnvStdio::NewWritableFile(const std::string& fname,
299 WritableFile** result) { 297 WritableFile** result) {
300 *result = NULL; 298 *result = NULL;
301 FILE* f = fopen_internal(fname.c_str(), "wb"); 299 FILE* f = fopen_internal(fname.c_str(), "wb");
302 if (f == NULL) { 300 if (f == NULL) {
303 int saved_errno = errno; 301 int saved_errno = errno;
304 RecordErrorAt(kNewWritableFile); 302 RecordErrorAt(kNewWritableFile);
305 return MakeIOError( 303 return MakeIOError(
306 fname, strerror(saved_errno), kNewWritableFile, saved_errno); 304 fname, strerror(saved_errno), kNewWritableFile, saved_errno);
307 } else { 305 } else {
308 *result = new ChromiumWritableFile(fname, f, this, this, make_backup_); 306 *result = new ChromiumWritableFile(fname, f, this, this, make_backup_);
309 return Status::OK(); 307 return Status::OK();
310 } 308 }
311 } 309 }
312 310
313 #if defined(OS_WIN) 311 #if defined(OS_WIN)
314 base::PlatformFileError ChromiumEnvStdio::GetDirectoryEntries( 312 base::File::Error ChromiumEnvStdio::GetDirectoryEntries(
315 const base::FilePath& dir_param, 313 const base::FilePath& dir_param,
316 std::vector<base::FilePath>* result) const { 314 std::vector<base::FilePath>* result) const {
317 result->clear(); 315 result->clear();
318 base::FilePath dir_filepath = dir_param.Append(FILE_PATH_LITERAL("*")); 316 base::FilePath dir_filepath = dir_param.Append(FILE_PATH_LITERAL("*"));
319 WIN32_FIND_DATA find_data; 317 WIN32_FIND_DATA find_data;
320 HANDLE find_handle = FindFirstFile(dir_filepath.value().c_str(), &find_data); 318 HANDLE find_handle = FindFirstFile(dir_filepath.value().c_str(), &find_data);
321 if (find_handle == INVALID_HANDLE_VALUE) { 319 if (find_handle == INVALID_HANDLE_VALUE) {
322 DWORD last_error = GetLastError(); 320 DWORD last_error = GetLastError();
323 if (last_error == ERROR_FILE_NOT_FOUND) 321 if (last_error == ERROR_FILE_NOT_FOUND)
324 return base::PLATFORM_FILE_OK; 322 return base::File::FILE_OK;
325 return base::LastErrorToPlatformFileError(last_error); 323 return base::File::OSErrorToFileError(last_error);
326 } 324 }
327 do { 325 do {
328 base::FilePath filepath(find_data.cFileName); 326 base::FilePath filepath(find_data.cFileName);
329 base::FilePath::StringType basename = filepath.BaseName().value(); 327 base::FilePath::StringType basename = filepath.BaseName().value();
330 if (basename == FILE_PATH_LITERAL(".") || 328 if (basename == FILE_PATH_LITERAL(".") ||
331 basename == FILE_PATH_LITERAL("..")) 329 basename == FILE_PATH_LITERAL(".."))
332 continue; 330 continue;
333 result->push_back(filepath.BaseName()); 331 result->push_back(filepath.BaseName());
334 } while (FindNextFile(find_handle, &find_data)); 332 } while (FindNextFile(find_handle, &find_data));
335 DWORD last_error = GetLastError(); 333 DWORD last_error = GetLastError();
336 base::PlatformFileError return_value = base::PLATFORM_FILE_OK; 334 base::File::Error return_value = base::File::FILE_OK;
337 if (last_error != ERROR_NO_MORE_FILES) 335 if (last_error != ERROR_NO_MORE_FILES)
338 return_value = base::LastErrorToPlatformFileError(last_error); 336 return_value = base::File::OSErrorToFileError(last_error);
339 FindClose(find_handle); 337 FindClose(find_handle);
340 return return_value; 338 return return_value;
341 } 339 }
342 #else 340 #else
343 base::PlatformFileError ChromiumEnvStdio::GetDirectoryEntries( 341 base::File::Error ChromiumEnvStdio::GetDirectoryEntries(
344 const base::FilePath& dir_filepath, 342 const base::FilePath& dir_filepath,
345 std::vector<base::FilePath>* result) const { 343 std::vector<base::FilePath>* result) const {
346 const std::string dir_string = FilePathToString(dir_filepath); 344 const std::string dir_string = FilePathToString(dir_filepath);
347 result->clear(); 345 result->clear();
348 DIR* dir = opendir(dir_string.c_str()); 346 DIR* dir = opendir(dir_string.c_str());
349 if (!dir) 347 if (!dir)
350 return base::ErrnoToPlatformFileError(errno); 348 return base::File::OSErrorToFileError(errno);
351 struct dirent dent_buf; 349 struct dirent dent_buf;
352 struct dirent* dent; 350 struct dirent* dent;
353 int readdir_result; 351 int readdir_result;
354 while ((readdir_result = readdir_r(dir, &dent_buf, &dent)) == 0 && dent) { 352 while ((readdir_result = readdir_r(dir, &dent_buf, &dent)) == 0 && dent) {
355 if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0) 353 if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0)
356 continue; 354 continue;
357 result->push_back(ChromiumEnv::CreateFilePath(dent->d_name)); 355 result->push_back(ChromiumEnv::CreateFilePath(dent->d_name));
358 } 356 }
359 int saved_errno = errno; 357 int saved_errno = errno;
360 closedir(dir); 358 closedir(dir);
361 if (readdir_result != 0) 359 if (readdir_result != 0)
362 return base::ErrnoToPlatformFileError(saved_errno); 360 return base::File::OSErrorToFileError(saved_errno);
363 return base::PLATFORM_FILE_OK; 361 return base::File::FILE_OK;
364 } 362 }
365 #endif 363 #endif
366 364
367 Status ChromiumEnvStdio::NewLogger(const std::string& fname, Logger** result) { 365 Status ChromiumEnvStdio::NewLogger(const std::string& fname, Logger** result) {
368 FILE* f = fopen_internal(fname.c_str(), "w"); 366 FILE* f = fopen_internal(fname.c_str(), "w");
369 if (f == NULL) { 367 if (f == NULL) {
370 *result = NULL; 368 *result = NULL;
371 int saved_errno = errno; 369 int saved_errno = errno;
372 RecordOSError(kNewLogger, saved_errno); 370 RecordOSError(kNewLogger, saved_errno);
373 return MakeIOError(fname, strerror(saved_errno), kNewLogger, saved_errno); 371 return MakeIOError(fname, strerror(saved_errno), kNewLogger, saved_errno);
374 } else { 372 } else {
375 *result = new ChromiumLogger(f); 373 *result = new ChromiumLogger(f);
376 return Status::OK(); 374 return Status::OK();
377 } 375 }
378 } 376 }
379 377
380 } // namespace leveldb_env 378 } // namespace leveldb_env
OLDNEW
« no previous file with comments | « third_party/leveldatabase/env_chromium_stdio.h ('k') | third_party/leveldatabase/env_chromium_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698