Index: chrome/common/transport_dib_mac.cc |
diff --git a/chrome/common/transport_dib_mac.cc b/chrome/common/transport_dib_mac.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4fb67a731da0021899d5bc4cdbb86392122b2ba6 |
--- /dev/null |
+++ b/chrome/common/transport_dib_mac.cc |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/common/transport_dib.h" |
+ |
+#include <unistd.h> |
+#include <sys/stat.h> |
+#include "base/shared_memory.h" |
+ |
+TransportDIB::TransportDIB() |
+ : size_(0) { |
+} |
+ |
+TransportDIB::TransportDIB(TransportDIB::Handle dib) |
+ : shared_memory_(dib, false /* read write */), |
+ size_(0) { |
+} |
+ |
+TransportDIB::~TransportDIB() { |
+} |
+ |
+// static |
+TransportDIB* TransportDIB::Create(size_t size, uint32 sequence_num) { |
+ TransportDIB* dib = new TransportDIB; |
+ if (!dib->shared_memory_.Create(L"", false /* read write */, |
+ false /* do not open existing */, size)) { |
+ delete dib; |
+ return NULL; |
+ } |
+ |
+ dib->size_ = size; |
+ return dib; |
+} |
+ |
+// static |
+TransportDIB* TransportDIB::Map(TransportDIB::Handle handle) { |
+ TransportDIB* dib = new TransportDIB(handle); |
+ struct stat st; |
+ fstat(handle.fd, &st); |
+ |
+ if (!dib->shared_memory_.Map(st.st_size)) { |
+ delete dib; |
+ close(handle.fd); |
+ return false; |
+ } |
+ |
+ dib->size_ = st.st_size; |
+ |
+ return dib; |
+} |
+ |
+void* TransportDIB::memory() const { |
+ return shared_memory_.memory(); |
+} |
+ |
+TransportDIB::Id TransportDIB::id() const { |
+ return false; |
+} |
+ |
+TransportDIB::Handle TransportDIB::handle() const { |
+ return shared_memory_.handle(); |
+} |