Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: base/memory/shared_memory_handle_mac.cc

Issue 1163943004: Make SharedMemoryHandle a class on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@shared_memory_make_class3_base
Patch Set: Fix NACL rewriting of IPC messages. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698