• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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