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#ifndef BASE_FILES_MEMORY_MAPPED_FILE_H_ 6#define BASE_FILES_MEMORY_MAPPED_FILE_H_ 7 8#include "base/base_export.h" 9#include "base/basictypes.h" 10#include "base/platform_file.h" 11#include "build/build_config.h" 12 13#if defined(OS_WIN) 14#include <windows.h> 15#endif 16 17namespace base { 18 19class FilePath; 20 21class BASE_EXPORT MemoryMappedFile { 22 public: 23 // The default constructor sets all members to invalid/null values. 24 MemoryMappedFile(); 25 ~MemoryMappedFile(); 26 27 // Opens an existing file and maps it into memory. Access is restricted to 28 // read only. If this object already points to a valid memory mapped file 29 // then this method will fail and return false. If it cannot open the file, 30 // the file does not exist, or the memory mapping fails, it will return false. 31 // Later we may want to allow the user to specify access. 32 bool Initialize(const FilePath& file_name); 33 // As above, but works with an already-opened file. MemoryMappedFile will take 34 // ownership of |file| and close it when done. 35 bool Initialize(PlatformFile file); 36 37#if defined(OS_WIN) 38 // Opens an existing file and maps it as an image section. Please refer to 39 // the Initialize function above for additional information. 40 bool InitializeAsImageSection(const FilePath& file_name); 41#endif // OS_WIN 42 43 const uint8* data() const { return data_; } 44 size_t length() const { return length_; } 45 46 // Is file_ a valid file handle that points to an open, memory mapped file? 47 bool IsValid() const; 48 49 private: 50 // Open the given file and pass it to MapFileToMemoryInternal(). 51 bool MapFileToMemory(const FilePath& file_name); 52 53 // Map the file to memory, set data_ to that memory address. Return true on 54 // success, false on any kind of failure. This is a helper for Initialize(). 55 bool MapFileToMemoryInternal(); 56 57 // Closes all open handles. Later we may want to make this public. 58 void CloseHandles(); 59 60#if defined(OS_WIN) 61 // MapFileToMemoryInternal calls this function. It provides the ability to 62 // pass in flags which control the mapped section. 63 bool MapFileToMemoryInternalEx(int flags); 64 65 HANDLE file_mapping_; 66#endif 67 PlatformFile file_; 68 uint8* data_; 69 size_t length_; 70 71 DISALLOW_COPY_AND_ASSIGN(MemoryMappedFile); 72}; 73 74} // namespace base 75 76#endif // BASE_FILES_MEMORY_MAPPED_FILE_H_ 77