1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/ipc/chromium/src/chrome/common/transport_dib_mac.cc Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,65 @@ 1.4 +// Copyright (c) 2009 The Chromium Authors. All rights reserved. 1.5 +// Use of this source code is governed by a BSD-style license that can be 1.6 +// found in the LICENSE file. 1.7 + 1.8 +#include "chrome/common/transport_dib.h" 1.9 + 1.10 +#include <unistd.h> 1.11 +#include <sys/stat.h> 1.12 + 1.13 +#include "base/eintr_wrapper.h" 1.14 +#include "base/shared_memory.h" 1.15 + 1.16 +TransportDIB::TransportDIB() 1.17 + : size_(0) { 1.18 +} 1.19 + 1.20 +TransportDIB::TransportDIB(TransportDIB::Handle dib) 1.21 + : shared_memory_(dib, false /* read write */), 1.22 + size_(0) { 1.23 +} 1.24 + 1.25 +TransportDIB::~TransportDIB() { 1.26 +} 1.27 + 1.28 +// static 1.29 +TransportDIB* TransportDIB::Create(size_t size, uint32_t sequence_num) { 1.30 + TransportDIB* dib = new TransportDIB; 1.31 + if (!dib->shared_memory_.Create("", false /* read write */, 1.32 + false /* do not open existing */, size)) { 1.33 + delete dib; 1.34 + return NULL; 1.35 + } 1.36 + 1.37 + dib->size_ = size; 1.38 + return dib; 1.39 +} 1.40 + 1.41 +// static 1.42 +TransportDIB* TransportDIB::Map(TransportDIB::Handle handle) { 1.43 + TransportDIB* dib = new TransportDIB(handle); 1.44 + struct stat st; 1.45 + fstat(handle.fd, &st); 1.46 + 1.47 + if (!dib->shared_memory_.Map(st.st_size)) { 1.48 + delete dib; 1.49 + HANDLE_EINTR(close(handle.fd)); 1.50 + return nullptr; 1.51 + } 1.52 + 1.53 + dib->size_ = st.st_size; 1.54 + 1.55 + return dib; 1.56 +} 1.57 + 1.58 +void* TransportDIB::memory() const { 1.59 + return shared_memory_.memory(); 1.60 +} 1.61 + 1.62 +TransportDIB::Id TransportDIB::id() const { 1.63 + return shared_memory_.id(); 1.64 +} 1.65 + 1.66 +TransportDIB::Handle TransportDIB::handle() const { 1.67 + return shared_memory_.handle(); 1.68 +}