1 // Copyright 2014 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 "mojo/system/raw_shared_buffer.h"
7 #include "base/logging.h"
13 RawSharedBuffer
* RawSharedBuffer::Create(size_t num_bytes
) {
14 DCHECK_GT(num_bytes
, 0u);
16 RawSharedBuffer
* rv
= new RawSharedBuffer(num_bytes
);
17 // No need to take the lock since we haven't given the object to anyone yet.
18 if (!rv
->InitNoLock())
24 scoped_ptr
<RawSharedBufferMapping
> RawSharedBuffer::Map(size_t offset
,
26 if (!IsValidMap(offset
, length
))
27 return scoped_ptr
<RawSharedBufferMapping
>();
29 return MapNoCheck(offset
, length
);
32 bool RawSharedBuffer::IsValidMap(size_t offset
, size_t length
) {
33 if (offset
> num_bytes_
|| length
== 0)
36 // Note: This is an overflow-safe check of |offset + length > num_bytes_|
37 // (that |num_bytes >= offset| is verified above).
38 if (length
> num_bytes_
- offset
)
44 scoped_ptr
<RawSharedBufferMapping
> RawSharedBuffer::MapNoCheck(size_t offset
,
46 DCHECK(IsValidMap(offset
, length
));
48 base::AutoLock
locker(lock_
);
49 return MapImplNoLock(offset
, length
);
52 RawSharedBuffer::RawSharedBuffer(size_t num_bytes
) : num_bytes_(num_bytes
) {
55 RawSharedBuffer::~RawSharedBuffer() {