OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 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 "base/memory/shared_memory_handle.h" | |
6 | |
7 #include <unistd.h> | |
8 | |
9 #include "base/pickle.h" | |
10 #include "base/posix/eintr_wrapper.h" | |
11 | |
12 #if defined(OS_MACOSX) && !defined(OS_IOS) | |
13 namespace base { | |
14 | |
15 SharedMemoryHandle::SharedMemoryHandle() | |
16 : mechanism_(POSIX), file_descriptor_() { | |
17 } | |
18 | |
19 SharedMemoryHandle::SharedMemoryHandle(const FileDescriptor& file_descriptor) | |
20 : mechanism_(POSIX), file_descriptor_(file_descriptor) { | |
21 } | |
22 | |
23 SharedMemoryHandle::SharedMemoryHandle(int fd, bool auto_close) | |
24 : mechanism_(POSIX), file_descriptor_(fd, auto_close) { | |
25 } | |
26 | |
27 SharedMemoryHandle::SharedMemoryHandle(const SharedMemoryHandle& handle) | |
28 : mechanism_(handle.mechanism_), file_descriptor_(handle.file_descriptor_) { | |
29 } | |
30 | |
31 SharedMemoryHandle& SharedMemoryHandle::operator=( | |
32 const SharedMemoryHandle& handle) { | |
33 mechanism_ = handle.mechanism_; | |
34 file_descriptor_ = handle.file_descriptor_; | |
35 return *this; | |
36 } | |
37 | |
38 bool SharedMemoryHandle::operator==(const SharedMemoryHandle& handle) const { | |
39 return mechanism_ == handle.mechanism_ && | |
40 file_descriptor_ == handle.file_descriptor_; | |
41 } | |
42 | |
43 bool SharedMemoryHandle::operator!=(const SharedMemoryHandle& handle) const { | |
44 return !operator==(handle); | |
45 } | |
46 | |
47 void SharedMemoryHandle::WriteMechanismToPickle(Pickle* pickle) const { | |
48 pickle->WriteInt(mechanism_); | |
49 } | |
50 | |
51 bool SharedMemoryHandle::ReadMechanismFromPickle(PickleIterator* iterator) { | |
52 int mechanism; | |
53 if (!iterator->ReadInt(&mechanism)) | |
54 return false; | |
55 | |
56 switch (mechanism) { | |
57 case POSIX: | |
58 case MACH: | |
59 mechanism_ = static_cast<Mechanism>(mechanism); | |
60 return true; | |
61 default: | |
62 return false; | |
63 } | |
64 } | |
65 | |
66 bool SharedMemoryHandle::IsBackedByPOSIXFd() const { | |
67 return mechanism_ == POSIX; | |
68 } | |
69 | |
70 int SharedMemoryHandle::GetFileHandle() const { | |
71 CHECK_EQ(mechanism_, POSIX); | |
Robert Sesek
2015/06/15 21:34:33
Can these be DCHECKs instead? This should only hap
erikchen
2015/06/16 00:59:27
You're right, DCHECKs will work here.
| |
72 return file_descriptor_.fd; | |
73 } | |
74 | |
75 void SharedMemoryHandle::SetFileHandle(int fd, bool auto_close) { | |
76 CHECK_EQ(mechanism_, POSIX); | |
77 file_descriptor_.fd = fd; | |
78 file_descriptor_.auto_close = auto_close; | |
79 } | |
80 | |
81 FileDescriptor* SharedMemoryHandle::GetFileDescriptor() { | |
82 CHECK_EQ(mechanism_, POSIX); | |
83 return &file_descriptor_; | |
84 } | |
85 | |
86 const FileDescriptor* SharedMemoryHandle::GetFileDescriptor() const { | |
87 CHECK_EQ(mechanism_, POSIX); | |
88 return &file_descriptor_; | |
89 } | |
90 | |
91 SharedMemoryHandle SharedMemoryHandle::Duplicate() const { | |
92 CHECK_EQ(mechanism_, POSIX); | |
93 int duped_handle = HANDLE_EINTR(dup(file_descriptor_.fd)); | |
94 if (duped_handle < 0) | |
95 return SharedMemoryHandle(); | |
96 return SharedMemoryHandle(duped_handle, true); | |
97 } | |
98 | |
99 } // namespace base | |
100 #endif // defined(OS_MACOSX) && !defined(OS_IOS) | |
OLD | NEW |