1 // Copyright (c) 2006-2008 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 "net/disk_cache/mapped_file.h"
6
7 #include "base/file_path.h"
8 #include "base/logging.h"
9 #include "net/disk_cache/disk_cache.h"
10
11 namespace disk_cache {
12
Init(const FilePath & name,size_t size)13 void* MappedFile::Init(const FilePath& name, size_t size) {
14 DCHECK(!init_);
15 if (init_ || !File::Init(name))
16 return NULL;
17
18 buffer_ = NULL;
19 init_ = true;
20 section_ = CreateFileMapping(platform_file(), NULL, PAGE_READWRITE, 0,
21 static_cast<DWORD>(size), NULL);
22 if (!section_)
23 return NULL;
24
25 buffer_ = MapViewOfFile(section_, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, size);
26 DCHECK(buffer_);
27 view_size_ = size;
28
29 return buffer_;
30 }
31
~MappedFile()32 MappedFile::~MappedFile() {
33 if (!init_)
34 return;
35
36 if (buffer_) {
37 BOOL ret = UnmapViewOfFile(buffer_);
38 DCHECK(ret);
39 }
40
41 if (section_)
42 CloseHandle(section_);
43 }
44
Load(const FileBlock * block)45 bool MappedFile::Load(const FileBlock* block) {
46 size_t offset = block->offset() + view_size_;
47 return Read(block->buffer(), block->size(), offset);
48 }
49
Store(const FileBlock * block)50 bool MappedFile::Store(const FileBlock* block) {
51 size_t offset = block->offset() + view_size_;
52 return Write(block->buffer(), block->size(), offset);
53 }
54
55 } // namespace disk_cache
56