From cf0d278d5ad746f025a7cf687dcc019b4c09421e Mon Sep 17 00:00:00 2001 From: "estade@chromium.org" Date: Fri, 12 Dec 2008 22:05:23 +0000 Subject: Implement the memory mapped file class for posix. Review URL: http://codereview.chromium.org/14073 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6935 0039d316-1c4b-4281-b951-d872f2087c98 --- base/file_util_posix.cc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'base/file_util_posix.cc') diff --git a/base/file_util_posix.cc b/base/file_util_posix.cc index 153f70a..7448ed8 100644 --- a/base/file_util_posix.cc +++ b/base/file_util_posix.cc @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -378,6 +379,9 @@ bool SetCurrentDirectory(const FilePath& path) { return !ret; } +/////////////////////////////////////////////// +// FileEnumerator + FileEnumerator::FileEnumerator(const FilePath& root_path, bool recursive, FileEnumerator::FILE_TYPE file_type) @@ -479,5 +483,41 @@ FilePath FileEnumerator::Next() { return Next(); } +/////////////////////////////////////////////// +// MemoryMappedFile + +MemoryMappedFile::MemoryMappedFile() + : file_(-1), + data_(NULL), + length_(0) { +} + +bool MemoryMappedFile::MapFileToMemory(const FilePath& file_name) { + file_ = open(file_name.value().c_str(), O_RDONLY); + if (file_ == -1) + return false; + + struct stat file_stat; + if (fstat(file_, &file_stat) == -1) + return false; + length_ = file_stat.st_size; + + data_ = static_cast( + mmap(NULL, length_, PROT_READ, MAP_SHARED, file_, 0)); + if (data_ == MAP_FAILED) + data_ = NULL; + return data_ != NULL; +} + +void MemoryMappedFile::CloseHandles() { + if (data_ != NULL) + munmap(data_, length_); + if (file_ != -1) + close(file_); + + data_ = NULL; + length_ = 0; + file_ = -1; +} } // namespace file_util -- cgit v1.1