Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2021 Project CHIP Authors
4 : *
5 : * Licensed under the Apache License, Version 2.0 (the "License");
6 : * you may not use this file except in compliance with the License.
7 : * You may obtain a copy of the License at
8 : *
9 : * http://www.apache.org/licenses/LICENSE-2.0
10 : *
11 : * Unless required by applicable law or agreed to in writing, software
12 : * distributed under the License is distributed on an "AS IS" BASIS,
13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 : * See the License for the specific language governing permissions and
15 : * limitations under the License.
16 : */
17 :
18 : #include "FixedBufferAllocator.h"
19 :
20 : #include <cstring>
21 :
22 : namespace chip {
23 4 : uint8_t * FixedBufferAllocator::Alloc(size_t count)
24 : {
25 4 : if (mBegin + count > mEnd)
26 : {
27 1 : mAnyAllocFailed = true;
28 1 : return nullptr;
29 : }
30 :
31 3 : uint8_t * ptr = mBegin;
32 3 : mBegin += count;
33 3 : return ptr;
34 : }
35 :
36 4 : uint8_t * FixedBufferAllocator::Clone(const void * data, size_t dataLen)
37 : {
38 4 : uint8_t * ptr = Alloc(dataLen);
39 :
40 4 : if (ptr != nullptr)
41 : {
42 3 : memcpy(ptr, data, dataLen);
43 : }
44 :
45 4 : return ptr;
46 : }
47 :
48 1 : char * FixedBufferAllocator::Clone(const char * str)
49 : {
50 1 : return reinterpret_cast<char *>(Clone(str, strlen(str) + 1));
51 : }
52 : } // namespace chip
|