| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BASE_FILES_MEMORY_MAPPED_FILE_H_ | 5 #ifndef BASE_FILES_MEMORY_MAPPED_FILE_H_ |
| 6 #define BASE_FILES_MEMORY_MAPPED_FILE_H_ | 6 #define BASE_FILES_MEMORY_MAPPED_FILE_H_ |
| 7 | 7 |
| 8 #include "base/base_export.h" | 8 #include "base/base_export.h" |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 private: | 41 private: |
| 42 // This ctor is used only by kWholeFile, to construct a zero-sized Region | 42 // This ctor is used only by kWholeFile, to construct a zero-sized Region |
| 43 // (which is forbidden by the public ctor) and uniquely identify kWholeFile. | 43 // (which is forbidden by the public ctor) and uniquely identify kWholeFile. |
| 44 Region(base::LinkerInitialized); | 44 Region(base::LinkerInitialized); |
| 45 }; | 45 }; |
| 46 | 46 |
| 47 // Opens an existing file and maps it into memory. Access is restricted to | 47 // Opens an existing file and maps it into memory. Access is restricted to |
| 48 // read only. If this object already points to a valid memory mapped file | 48 // read only. If this object already points to a valid memory mapped file |
| 49 // then this method will fail and return false. If it cannot open the file, | 49 // then this method will fail and return false. If it cannot open the file, |
| 50 // the file does not exist, or the memory mapping fails, it will return false. | 50 // the file does not exist, or the memory mapping fails, it will return false. |
| 51 // Later we may want to allow the user to specify access. | |
| 52 bool Initialize(const FilePath& file_name); | 51 bool Initialize(const FilePath& file_name); |
| 53 | 52 |
| 54 // As above, but works with an already-opened file. MemoryMappedFile takes | 53 // As above, works with an already-opened file, closes it when done, and |
| 55 // ownership of |file| and closes it when done. | 54 // enables write permission when |write| is true. |
| 56 bool Initialize(File file); | 55 bool Initialize(File file, bool write); |
| 57 | 56 |
| 58 // As above, but works with a region of an already-opened file. | 57 // As above, but works with a region of an already-opened file and enables |
| 59 bool Initialize(File file, const Region& region); | 58 // write permission when |write| is true. |
| 59 bool Initialize(File file, const Region& region, bool write); |
| 60 | 60 |
| 61 #if defined(OS_WIN) | 61 #if defined(OS_WIN) |
| 62 // Opens an existing file and maps it as an image section. Please refer to | 62 // Opens an existing file and maps it as an image section. Please refer to |
| 63 // the Initialize function above for additional information. | 63 // the Initialize function above for additional information. |
| 64 bool InitializeAsImageSection(const FilePath& file_name); | 64 bool InitializeAsImageSection(const FilePath& file_name); |
| 65 #endif // OS_WIN | 65 #endif // OS_WIN |
| 66 | 66 |
| 67 const uint8* data() const { return data_; } | 67 uint8* data() const { return data_; } |
| 68 size_t length() const { return length_; } | 68 size_t length() const { return length_; } |
| 69 | 69 |
| 70 // Is file_ a valid file handle that points to an open, memory mapped file? | 70 // Is file_ a valid file handle that points to an open, memory mapped file? |
| 71 bool IsValid() const; | 71 bool IsValid() const; |
| 72 | 72 |
| 73 private: | 73 private: |
| 74 // Given the arbitrarily aligned memory region [start, size], returns the | 74 // Given the arbitrarily aligned memory region [start, size], returns the |
| 75 // boundaries of the region aligned to the granularity specified by the OS, | 75 // boundaries of the region aligned to the granularity specified by the OS, |
| 76 // (a page on Linux, ~32k on Windows) as follows: | 76 // (a page on Linux, ~32k on Windows) as follows: |
| 77 // - |aligned_start| is page aligned and <= |start|. | 77 // - |aligned_start| is page aligned and <= |start|. |
| 78 // - |aligned_size| is a multiple of the VM granularity and >= |size|. | 78 // - |aligned_size| is a multiple of the VM granularity and >= |size|. |
| 79 // - |offset| is the displacement of |start| w.r.t |aligned_start|. | 79 // - |offset| is the displacement of |start| w.r.t |aligned_start|. |
| 80 static void CalculateVMAlignedBoundaries(int64 start, | 80 static void CalculateVMAlignedBoundaries(int64 start, |
| 81 int64 size, | 81 int64 size, |
| 82 int64* aligned_start, | 82 int64* aligned_start, |
| 83 int64* aligned_size, | 83 int64* aligned_size, |
| 84 int32* offset); | 84 int32* offset); |
| 85 | 85 |
| 86 // Map the file to memory, set data_ to that memory address. Return true on | 86 // Map the file to memory, set data_ to that memory address. Return true on |
| 87 // success, false on any kind of failure. This is a helper for Initialize(). | 87 // success, false on any kind of failure. This is a helper for Initialize(). |
| 88 bool MapFileRegionToMemory(const Region& region); | 88 // - |write| is used to enable write permission of mmap. |
| 89 bool MapFileRegionToMemory(const Region& region, bool write); |
| 89 | 90 |
| 90 // Closes all open handles. | 91 // Closes all open handles. |
| 91 void CloseHandles(); | 92 void CloseHandles(); |
| 92 | 93 |
| 93 File file_; | 94 File file_; |
| 94 uint8* data_; | 95 uint8* data_; |
| 95 size_t length_; | 96 size_t length_; |
| 96 | 97 |
| 97 #if defined(OS_WIN) | 98 #if defined(OS_WIN) |
| 98 win::ScopedHandle file_mapping_; | 99 win::ScopedHandle file_mapping_; |
| 99 bool image_; // Map as an image. | 100 bool image_; // Map as an image. |
| 100 #endif | 101 #endif |
| 101 | 102 |
| 102 DISALLOW_COPY_AND_ASSIGN(MemoryMappedFile); | 103 DISALLOW_COPY_AND_ASSIGN(MemoryMappedFile); |
| 103 }; | 104 }; |
| 104 | 105 |
| 105 } // namespace base | 106 } // namespace base |
| 106 | 107 |
| 107 #endif // BASE_FILES_MEMORY_MAPPED_FILE_H_ | 108 #endif // BASE_FILES_MEMORY_MAPPED_FILE_H_ |
| OLD | NEW |