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.
5 #include "base/files/memory_mapped_file.h"
11 #include "base/logging.h"
12 #include "base/posix/eintr_wrapper.h"
13 #include "base/threading/thread_restrictions.h"
17 MemoryMappedFile::MemoryMappedFile()
18 : file_(kInvalidPlatformFileValue
),
23 bool MemoryMappedFile::MapFileToMemoryInternal() {
24 ThreadRestrictions::AssertIOAllowed();
26 struct stat file_stat
;
27 if (fstat(file_
, &file_stat
) == kInvalidPlatformFileValue
) {
28 DLOG(ERROR
) << "Couldn't fstat " << file_
<< ", errno " << errno
;
31 length_
= file_stat
.st_size
;
33 data_
= static_cast<uint8
*>(
34 mmap(NULL
, length_
, PROT_READ
, MAP_SHARED
, file_
, 0));
35 if (data_
== MAP_FAILED
)
36 DLOG(ERROR
) << "Couldn't mmap " << file_
<< ", errno " << errno
;
38 return data_
!= MAP_FAILED
;
41 void MemoryMappedFile::CloseHandles() {
42 ThreadRestrictions::AssertIOAllowed();
45 munmap(data_
, length_
);
46 if (file_
!= kInvalidPlatformFileValue
)
47 ignore_result(HANDLE_EINTR(close(file_
)));
51 file_
= kInvalidPlatformFileValue
;