Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 // Copyright (c) 2009 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.
5 #include "chrome/common/transport_dib.h"
7 #include <unistd.h>
8 #include <sys/stat.h>
10 #include "base/eintr_wrapper.h"
11 #include "base/shared_memory.h"
13 TransportDIB::TransportDIB()
14 : size_(0) {
15 }
17 TransportDIB::TransportDIB(TransportDIB::Handle dib)
18 : shared_memory_(dib, false /* read write */),
19 size_(0) {
20 }
22 TransportDIB::~TransportDIB() {
23 }
25 // static
26 TransportDIB* TransportDIB::Create(size_t size, uint32_t sequence_num) {
27 TransportDIB* dib = new TransportDIB;
28 if (!dib->shared_memory_.Create("", false /* read write */,
29 false /* do not open existing */, size)) {
30 delete dib;
31 return NULL;
32 }
34 dib->size_ = size;
35 return dib;
36 }
38 // static
39 TransportDIB* TransportDIB::Map(TransportDIB::Handle handle) {
40 TransportDIB* dib = new TransportDIB(handle);
41 struct stat st;
42 fstat(handle.fd, &st);
44 if (!dib->shared_memory_.Map(st.st_size)) {
45 delete dib;
46 HANDLE_EINTR(close(handle.fd));
47 return nullptr;
48 }
50 dib->size_ = st.st_size;
52 return dib;
53 }
55 void* TransportDIB::memory() const {
56 return shared_memory_.memory();
57 }
59 TransportDIB::Id TransportDIB::id() const {
60 return shared_memory_.id();
61 }
63 TransportDIB::Handle TransportDIB::handle() const {
64 return shared_memory_.handle();
65 }