Index: base/files/memory_mapped_file.cc |
diff --git a/base/files/memory_mapped_file.cc b/base/files/memory_mapped_file.cc |
index 0fd9d6796b10734a1224556ad16ab0d2418662f9..07e71d928a76c76299b973300a91867a465d3147 100644 |
--- a/base/files/memory_mapped_file.cc |
+++ b/base/files/memory_mapped_file.cc |
@@ -30,18 +30,30 @@ MemoryMappedFile::~MemoryMappedFile() { |
} |
#if !defined(OS_NACL) |
-bool MemoryMappedFile::Initialize(const FilePath& file_name) { |
+bool MemoryMappedFile::Initialize(const FilePath& file_name, Access access) { |
if (IsValid()) |
return false; |
- file_.Initialize(file_name, File::FLAG_OPEN | File::FLAG_READ); |
+ uint32_t flags = 0; |
+ switch (access) { |
+ case READ_ONLY: |
+ flags = File::FLAG_OPEN | File::FLAG_READ; |
+ break; |
+ case READ_WRITE: |
+ flags = File::FLAG_OPEN | File::FLAG_READ | File::FLAG_WRITE; |
+ break; |
+ case READ_WRITE_EXTEND: |
+ // Can't open with "extend" because no maximum size is known. |
+ NOTREACHED(); |
+ } |
+ file_.Initialize(file_name, flags); |
if (!file_.IsValid()) { |
DLOG(ERROR) << "Couldn't open " << file_name.AsUTF8Unsafe(); |
return false; |
} |
- if (!MapFileRegionToMemory(Region::kWholeFile)) { |
+ if (!MapFileRegionToMemory(Region::kWholeFile, access)) { |
CloseHandles(); |
return false; |
} |
@@ -49,11 +61,14 @@ bool MemoryMappedFile::Initialize(const FilePath& file_name) { |
return true; |
} |
-bool MemoryMappedFile::Initialize(File file) { |
- return Initialize(std::move(file), Region::kWholeFile); |
+bool MemoryMappedFile::Initialize(File file, Access access) { |
+ DCHECK_NE(READ_WRITE_EXTEND, access); |
+ return Initialize(std::move(file), Region::kWholeFile, access); |
} |
-bool MemoryMappedFile::Initialize(File file, const Region& region) { |
+bool MemoryMappedFile::Initialize(File file, |
+ const Region& region, |
+ Access access) { |
if (IsValid()) |
return false; |
@@ -64,7 +79,7 @@ bool MemoryMappedFile::Initialize(File file, const Region& region) { |
file_ = std::move(file); |
- if (!MapFileRegionToMemory(region)) { |
+ if (!MapFileRegionToMemory(region, access)) { |
CloseHandles(); |
return false; |
} |