~ubuntu-branches/ubuntu/trusty/tomahawk/trusty-proposed

« back to all changes in this revision

Viewing changes to thirdparty/breakpad/common/linux/memory_mapped_file.h

  • Committer: Package Import Robot
  • Author(s): Harald Sitter
  • Date: 2013-03-07 21:50:13 UTC
  • Revision ID: package-import@ubuntu.com-20130307215013-6gdjkdds7i9uenvs
Tags: upstream-0.6.0+dfsg
ImportĀ upstreamĀ versionĀ 0.6.0+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) 2011, Google Inc.
 
2
// All rights reserved.
 
3
//
 
4
// Redistribution and use in source and binary forms, with or without
 
5
// modification, are permitted provided that the following conditions are
 
6
// met:
 
7
//
 
8
//     * Redistributions of source code must retain the above copyright
 
9
// notice, this list of conditions and the following disclaimer.
 
10
//     * Redistributions in binary form must reproduce the above
 
11
// copyright notice, this list of conditions and the following disclaimer
 
12
// in the documentation and/or other materials provided with the
 
13
// distribution.
 
14
//     * Neither the name of Google Inc. nor the names of its
 
15
// contributors may be used to endorse or promote products derived from
 
16
// this software without specific prior written permission.
 
17
//
 
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
19
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
20
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
21
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
22
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
24
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
25
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
26
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
27
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
28
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
29
 
 
30
// memory_mapped_file.h: Define the google_breakpad::MemoryMappedFile
 
31
// class, which maps a file into memory for read-only access.
 
32
 
 
33
#ifndef COMMON_LINUX_MEMORY_MAPPED_FILE_H_
 
34
#define COMMON_LINUX_MEMORY_MAPPED_FILE_H_
 
35
 
 
36
#include "common/basictypes.h"
 
37
#include "common/memory_range.h"
 
38
 
 
39
namespace google_breakpad {
 
40
 
 
41
// A utility class for mapping a file into memory for read-only access of
 
42
// the file content. Its implementation avoids calling into libc functions
 
43
// by directly making system calls for open, close, mmap, and munmap.
 
44
class MemoryMappedFile {
 
45
 public:
 
46
  MemoryMappedFile();
 
47
 
 
48
  // Constructor that calls Map() to map a file at |path| into memory.
 
49
  // If Map() fails, the object behaves as if it is default constructed.
 
50
  explicit MemoryMappedFile(const char* path);
 
51
 
 
52
  ~MemoryMappedFile();
 
53
 
 
54
  // Maps a file at |path| into memory, which can then be accessed via
 
55
  // content() as a MemoryRange object or via data(), and returns true on
 
56
  // success. Mapping an empty file will succeed but with data() and size()
 
57
  // returning NULL and 0, respectively. An existing mapping is unmapped
 
58
  // before a new mapping is created.
 
59
  bool Map(const char* path);
 
60
 
 
61
  // Unmaps the memory for the mapped file. It's a no-op if no file is
 
62
  // mapped.
 
63
  void Unmap();
 
64
 
 
65
  // Returns a MemoryRange object that covers the memory for the mapped
 
66
  // file. The MemoryRange object is empty if no file is mapped.
 
67
  const MemoryRange& content() const { return content_; }
 
68
 
 
69
  // Returns a pointer to the beginning of the memory for the mapped file.
 
70
  // or NULL if no file is mapped or the mapped file is empty.
 
71
  const void* data() const { return content_.data(); }
 
72
 
 
73
  // Returns the size in bytes of the mapped file, or zero if no file
 
74
  // is mapped.
 
75
  size_t size() const { return content_.length(); }
 
76
 
 
77
 private:
 
78
  // Mapped file content as a MemoryRange object.
 
79
  MemoryRange content_;
 
80
 
 
81
  DISALLOW_COPY_AND_ASSIGN(MemoryMappedFile);
 
82
};
 
83
 
 
84
}  // namespace google_breakpad
 
85
 
 
86
#endif  // COMMON_LINUX_MEMORY_MAPPED_FILE_H_