- add sources.
[platform/framework/web/crosswalk.git] / src / base / files / memory_mapped_file_posix.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/files/memory_mapped_file.h"
6
7 #include <sys/mman.h>
8 #include <sys/stat.h>
9 #include <unistd.h>
10
11 #include "base/logging.h"
12 #include "base/posix/eintr_wrapper.h"
13 #include "base/threading/thread_restrictions.h"
14
15 namespace base {
16
17 MemoryMappedFile::MemoryMappedFile()
18     : file_(kInvalidPlatformFileValue),
19       data_(NULL),
20       length_(0) {
21 }
22
23 bool MemoryMappedFile::MapFileToMemoryInternal() {
24   ThreadRestrictions::AssertIOAllowed();
25
26   struct stat file_stat;
27   if (fstat(file_, &file_stat) == kInvalidPlatformFileValue) {
28     DPLOG(ERROR) << "fstat " << file_;
29     return false;
30   }
31   length_ = file_stat.st_size;
32
33   data_ = static_cast<uint8*>(
34       mmap(NULL, length_, PROT_READ, MAP_SHARED, file_, 0));
35   if (data_ == MAP_FAILED)
36     DPLOG(ERROR) << "mmap " << file_;
37
38   return data_ != MAP_FAILED;
39 }
40
41 void MemoryMappedFile::CloseHandles() {
42   ThreadRestrictions::AssertIOAllowed();
43
44   if (data_ != NULL)
45     munmap(data_, length_);
46   if (file_ != kInvalidPlatformFileValue)
47     ignore_result(HANDLE_EINTR(close(file_)));
48
49   data_ = NULL;
50   length_ = 0;
51   file_ = kInvalidPlatformFileValue;
52 }
53
54 }  // namespace base