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

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

Issue 1641513004: Update //base to chromium 9659b08ea5a34f889dc4166217f438095ddc10d2 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 10 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/posix/eintr_wrapper.h"
10
11 #if defined(OS_MACOSX) && !defined(OS_IOS)
12 namespace base {
13
14 static_assert(sizeof(SharedMemoryHandle::Type) <=
15 sizeof(SharedMemoryHandle::TypeWireFormat),
16 "Size of enum SharedMemoryHandle::Type exceeds size of type "
17 "transmitted over wire.");
18
19 SharedMemoryHandle::SharedMemoryHandle() : type_(POSIX), file_descriptor_() {}
20
21 SharedMemoryHandle::SharedMemoryHandle(
22 const base::FileDescriptor& file_descriptor)
23 : type_(POSIX), file_descriptor_(file_descriptor) {}
24
25 SharedMemoryHandle::SharedMemoryHandle(int fd, bool auto_close)
26 : type_(POSIX), file_descriptor_(fd, auto_close) {}
27
28 SharedMemoryHandle::SharedMemoryHandle(const SharedMemoryHandle& handle)
29 : type_(handle.type_), file_descriptor_(handle.file_descriptor_) {}
30
31 SharedMemoryHandle& SharedMemoryHandle::operator=(
32 const SharedMemoryHandle& handle) {
33 if (this == &handle)
34 return *this;
35
36 type_ = handle.type_;
37 file_descriptor_ = handle.file_descriptor_;
38 return *this;
39 }
40
41 bool SharedMemoryHandle::operator==(const SharedMemoryHandle& handle) const {
42 // Invalid handles are always equal, even if they have different types.
43 if (!IsValid() && !handle.IsValid())
44 return true;
45
46 return type_ == handle.type_ && file_descriptor_ == handle.file_descriptor_;
47 }
48
49 bool SharedMemoryHandle::operator!=(const SharedMemoryHandle& handle) const {
50 return !(*this == handle);
51 }
52
53 SharedMemoryHandle::Type SharedMemoryHandle::GetType() const {
54 return type_;
55 }
56
57 bool SharedMemoryHandle::IsValid() const {
58 switch (type_) {
59 case POSIX:
60 return file_descriptor_.fd >= 0;
61 case MACH:
62 return false;
63 }
64 }
65
66 void SharedMemoryHandle::SetFileHandle(int fd, bool auto_close) {
67 DCHECK_EQ(type_, POSIX);
68 file_descriptor_.fd = fd;
69 file_descriptor_.auto_close = auto_close;
70 }
71
72 const FileDescriptor SharedMemoryHandle::GetFileDescriptor() const {
73 DCHECK_EQ(type_, POSIX);
74 return file_descriptor_;
75 }
76
77 SharedMemoryHandle SharedMemoryHandle::Duplicate() const {
78 DCHECK_EQ(type_, POSIX);
79 int duped_handle = HANDLE_EINTR(dup(file_descriptor_.fd));
80 if (duped_handle < 0)
81 return SharedMemoryHandle();
82 return SharedMemoryHandle(duped_handle, true);
83 }
84
85 } // namespace base
86 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698